首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >RNN (keras)的欧氏距离损失函数

RNN (keras)的欧氏距离损失函数
EN

Stack Overflow用户
提问于 2017-10-05 20:16:52
回答 1查看 6K关注 0票数 3

我想把欧氏距离设为LSTM或RNN的损失函数。

这样的函数应该有哪些输出: float,(batch_size)或(batch_size,timesteps)?

模型输入X_train是(n_samples,timesteps,data_dim)。Y_train具有相同的维度。

示例代码:

代码语言:javascript
运行
复制
def euc_dist_keras(x, y):
    return K.sqrt(K.sum(K.square(x - y), axis=-1, keepdims=True))


model = Sequential()
model.add(SimpleRNN(n_units, activation='relu', input_shape=(timesteps, data_dim), return_sequences=True))
model.add(Dense(n_output, activation='linear'))

model.compile(loss=euc_dist_keras, optimizer='adagrad')

model.fit(y_train, y_train, batch_size=512, epochs=10)

因此,我是否应该在时间步长维度和/或batch_size上平均损失?

EN

回答 1

Stack Overflow用户

发布于 2017-10-06 01:55:10

损失函数将接受预测的和真实的标签,并在Keras中输出一个标量:

代码语言:javascript
运行
复制
from keras import backend as K 
def euc_dist_keras(y_true, y_pred):
    return K.sqrt(K.sum(K.square(y_true - y_pred), axis=-1, keepdims=True))

注意,它不会将X_train作为输入。损失计算遵循前向传播步骤,它的值提供了预测标签与真实标签相比的优性。

这样的函数应该有哪些输出: float,(batch_size)或(batch_size,timesteps)?

损失函数应该有标量输出。

因此,我是否应该在时间步长维度和/或batch_size上平均损失?

这将不需要能够使用欧氏距离作为损失函数。

旁注:在你的情况下,我认为问题可能在于神经网络架构,而不是损失。给定(batch_size, timesteps, data_dim)SimpleRNN的输出将是(batch_size, timesteps, n_units),而Dense层的输出将是(batch_size, n_output)。因此,如果您的Y_train具有形状(batch_size, timesteps, data_dim),您可能需要使用TimeDistributed 包装器为每个时态切片应用Dense,并调整完全连接层中隐藏单元的数量。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46594115

复制
相关文章

相似问题

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