首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算网络两个输出之间的cosine_proximity损失

计算网络两个输出之间的cosine_proximity损失
EN

Stack Overflow用户
提问于 2017-04-08 19:09:49
回答 1查看 3.6K关注 0票数 2

我使用Keras2.0.2FunctionalAPI (Tensorflow 1.0.1)来实现一个网络,它需要几个输入并产生两个输出ab。我需要使用cosine_proximity丢失来训练网络,这样b才是a的标签。我该怎么做?

在这里分享我的密码。最后一行model.fit(..)是有问题的部分,因为我没有标记数据本身。标签是由模型本身产生的。

代码语言:javascript
复制
from keras.models import Model
from keras.layers import Input, LSTM
from keras import losses

shared_lstm = LSTM(dim)

q1 = Input(shape=(..,.. ), name='q1')
q2 = Input(shape=(..,.. ), name='q2')
a = shared_lstm(q1)
b = shared_lstm(q2)
model = Model(inputs=[q1,q2], outputs=[a, b])
model.compile(optimizer='adam', loss=losses.cosine_proximity)

model.fit([testq1, testq2], [?????])
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-08 19:35:50

你可以先定义一个假的真实标签。例如,将其定义为输入数据大小的一维数组。

现在是损失函数。你可以按下面的方式写。

代码语言:javascript
复制
def my_cosine_proximity(y_true, y_pred):
    a = y_pred[0]
    b = y_pred[1]
    # depends on whether you want to normalize
    a = K.l2_normalize(a, axis=-1)
    b = K.l2_normalize(b, axis=-1)        
    return -K.mean(a * b, axis=-1) + 0 * y_true

我将y_true乘以零,并将其相加,这样Theano就不会给出丢失的输入警告/错误。

你应该在正常情况下调用你的fit函数,也就是包括你的假真实标签.

代码语言:javascript
复制
model.compile('adam', my_cosine_proximity) # 'adam' used as an example optimizer 
model.fit([testq1, testq2], fake_y_true)
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43299274

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档