我创建了一个具有三个密集层的 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
但我收到错误“张量”对象不可迭代。我怎样才能以正确的方式实现我的损失函数我真的很感谢你的帮助