loc*_*cys 2 python artificial-intelligence conv-neural-network tensorflow
例如:
我有一个输入tensor(input),形(?,10) dtype=float32,第一维的意思batch_size。
还有一个面具tensor(mask),异形(?,10)。mask[sample_number]就像[True,True,False,...],意味着面具
和一个标签张量(avg_label),形状(?,),表示每个样本的掩码位置的正确平均值
我想训练模型,但找不到获得输出的好方法。
在tf.reduce_...(如tf.reduce_mean)的功能似乎并不支持论点约遮蔽。
我尝试tf.boolean_mask,但它会将输出形状展平为一维,抛出sample_number维,因此无法区分样本
我考虑过tf.where,比如:
masked=tf.where(mask,input,tf.zeros(tf.shape(input)))
avg_out=tf.reduce_mean(masked,axis=1)
loss=tf.pow(avg_out-avg_label,2)
Run Code Online (Sandbox Code Playgroud)
但是上面的代码肯定不起作用,因为 False 设置为 0 会改变 avg。如果使用 np.nan ,它总是会得到 nan 。我想知道在做reduce操作时是否有一个表示缺席的值。
我怎样才能做到这一点?
您可以使用tf.boolean_mask。
In [17]: tensor = tf.constant([[1, 2], [3, 4], [5, 6]])
In [18]: mask = np.array([[True, False], [False, True], [True, False]])
In [19]: masked = tf.boolean_mask(tensor, mask)
In [20]: masked.eval()
Out[20]: array([1, 4, 5], dtype=int32)
In [21]: tf.reduce_mean(masked).eval()
Out[21]: 3
Run Code Online (Sandbox Code Playgroud)
对于 False 掩码值,您可以使用 tf.logic_not 来切换掩码。
您可以使用tf.ragged.boolean_mask来保持维度。
tf.reduce_mean(tf.ragged.boolean_mask(x, mask=mask), axis=1)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4070 次 |
| 最近记录: |