【发布时间】:2017-11-16 14:46:42
【问题描述】:
我创建了一个具有三个密集层的 keras 序列模型,我只是创建了一个自定义损失函数,如下所示:
def lossFunctionality(y_t, y_p):
# 'y_t' shape is (bach_size, 500)
# 'y_p' shape is (bach_size, 256) (output of last layer)
# 'v' is np array of shape (500, 256)
p = K.exp(K.dot(y_p, K.transpose(v)))
sp = K.sum(p,axis=1)
sp = K.expand_dims(sp, axis=1)
sp = K.tile(sp,(1, len(v)))
soft = p/sp
soft=K.clip(soft, 0.0000001, 0.9999999)
obj = K.categorical_crossentropy(soft, y_t)
return obj
有了这个损失函数,一切都很好。
但现在假设我为 'y_p' 中的每条记录都有特定的 'v' 数组,并且我想做代码的第 5 行,以使 'y_p' 的点积与记录特定的 'v' 数组。换句话说,我有 'v' 向量的 bach_size 数量,我想将 'y_p' 中的每条记录乘积到那个特定的 'v' 数组中。我想要的显示如下:
def lossFunctionality(y_t, y_p):
tempArray=[]
for record in y_p:
tempArray.append(K.exp(K.dot(record, K.transpose(v))))
p=np.array(tempArray)
sp = K.sum(p,axis=1)
sp = K.expand_dims(sp, axis=1)
sp = K.tile(sp,(1, len(v)))
soft = p/sp
soft=K.clip(soft, 0.0000001, 0.9999999)
obj = K.categorical_crossentropy(soft, y_t)
return obj
但我收到错误“张量”对象不可迭代。 我怎样才能以正确的方式实现我的损失函数 非常感谢您的帮助
【问题讨论】:
-
我认为错误出现在代码的第 3 行。“记录在 y_p”
-
你是对的,我知道错误来自那一行。我想知道如何以正确的方式实现这个逻辑
-
我的意思是如何遍历 Tensor 对象
标签: python tensorflow deep-learning keras tensor