2020-10-07,PFLD loss再分析

    科技2024-07-04  66

    attributes_w_n = tf.to_float(attribute_batch[:, 1:6]) print('attributes_w_n=',attributes_w_n.get_shape()) #?要运行时才知道,奇怪的设定 # attributes_w_n[75000,5] mat_ratio = tf.reduce_mean(attributes_w_n,axis=0) # mat_ratio[5],对第一维求均值 mat_ratio = tf.map_fn(lambda x:(tf.cond(x > 0,lambda: 1/x,lambda:float(args.batch_size))),mat_ratio) # >0,则为1/x; 否则为args.batch_size。 attributes_w_n = tf.convert_to_tensor(attributes_w_n * mat_ratio) #所有数据乘以均值?,tf.multiply()两个矩阵中对应元素各自相乘。attributes_w_n前后的维度不变 attributes_w_n = tf.reduce_sum(attributes_w_n,axis=1) # attributes_w_n[75000],对第二个维度求和 list_ops['attributes_w_n_batch']=attributes_w_n L2_loss = tf.add_n(tf.losses.get_regularization_losses()) # 获取总正则化loss, 为一个标量 _sum_k = tf.reduce_sum(tf.map_fn(lambda x: 1 - tf.cos(abs(x)), euler_angles_gt_batch - euler_angles_pre), axis=1) # euler_angles_gt_batch[75000,3],每个图片都有这样的三个角度 # _sum_k[75000] loss_sum = tf.reduce_sum(tf.square(landmark_batch - landmarks_pre), axis=1) # landmark_batch[75000,196], 每张输入样本图片上都有196个标记 # loss_sum[75000],对第二个维度求和 loss_sum = tf.reduce_mean(loss_sum*_sum_k*attributes_w_n) #标记的误差平方和*角度误差和*属性比值,前面的维度都是75000,从而可以对应位置相乘,再求均值得到标量与L2_loss相加 loss_sum += L2_loss #再与总体误差相加

    1)attributes_w_n对第一个维度样本数75000求均值,再做变换,再求第二个维度的和,即对第二个维度求和。

    2)_sum_k对每个样本三个角度求和

    3)loss_sum = tf.reduce_sum(tf.square(landmark_batch - landmarks_pre), axis=1)对标记点求平方和之类的

    和论文表达还是有点区别,不知道理解得对不对?

    2)

    Processed: 0.010, SQL: 8