【发布时间】:2020-10-06 09:50:12
【问题描述】:
我有一个模型,它在批次中为每个样本返回两个值,其中第一个值必须 >=0,第二个值必须
def maxMinDiffLossConstrained(y_true, y_pred, sample_weight=None):
y_pred_shape = list(y_pred.shape) # y_pred returns a tuple, we want a list so we can construct another tensor
#y_pred_data = y_pred.numpy() # get the tensor data as a numpy array
y_pred[y_pred[:,0] < 0, 0] = -10
y_pred[y_pred[:,1] > 0, 1] = 10
y_mod = tf.reshape(y_pred, y_pred_shape)
mse = MeanSquaredError()
loss = mse(y_true, y_mod)
return loss
哪里出错了
TypeError: 'Tensor' object does not support item assignment
如您所见,我尝试使用 y_pred.numpy(),但 type(y_pred) 之外的对象是 <class 'tensorflow.python.framework.ops.Tensor'> 并返回错误:
AttributeError: 'Tensor' object has no attribute 'numpy'
我检查了许多其他帖子。这个建议拆垛和重新堆叠
TypeError: 'Tensor' object does not support item assignment in TensorFlow
下一篇较长的文章很有帮助,它建议根据条件进行分解,然后重新制作张量。我仍在努力寻找这种方法的解决方案:
不幸的是,由于我的张量的尺寸是(batch_size, 2),我仍然没有找到可行的解决方案。我的困难是,在我使用以下代码获得 dim1 (>=0) 和 dim2 (
maxes_to_remove = y_pred[:,0] < 0
mins_to_remove = y_pred[:,1] > 0
idx_maxes = tf.where(maxes_to_remove == True)
idx_mins = tf.where(mins_to_remove == True)
我不知道如何只替换需要替换的第一个维度中的值以及需要替换的第二个维度中的值。
顺便说一句,我也遇到了this issue,但能够解决它。
【问题讨论】:
标签: python tensorflow keras neural-network loss-function