1)这里是对属性/类别求误差。
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 = tf.to_float(attribute_batch[:, 1:6])之后为attributes_w_n [M,5]
1.1)
mat_ratio = tf.reduce_mean(attributes_w_n,axis=0)表示:
tmp[1:5]=0
for i in range(M):tmp[:]=tmp[:]+attributes_w_n[i,:]
mat_ratio = tmp/M求M个的均值。1.2)
mat_ratio = tf.map_fn(lambda x:(tf.cond(x > 0,lambda: 1/x,lambda:float(args.batch_size))),mat_ratio)
mat_ratio 是一个包含5个元素的数组,这里做了个转换,仍然是个5个元素的数组。1.3)
attributes_w_n = tf.convert_to_tensor(attributes_w_n * mat_ratio)
attributes_w_n * mat_ratio表示:
for i in range(M):attributes_w_n[i][:]=attributes_w_n[i][:]*mat_ratio[:]
对应位置相乘。1.4)
attributes_w_n = tf.reduce_sum(attributes_w_n,axis=1)
表示:
for i in rannge(M):tmp=0for j in range(5):tmp=tmp+attributes_w_n[i][j]attributes_w_n[i]=tmp/5
大概是这个意思吧
2)