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

RNN(keras)的欧氏距离损失函数,keras,loss,rnn,Keras,Loss,Rnn,我想将欧几里德距离设置为LSTM或RNN的损失函数 这种函数应该有什么输出:float(批大小)或(批大小,时间步长) 模型输入X_序列为(n_样本、时间步长、数据尺寸)。 Y_列车的尺寸相同 示例代码: def euc_dist_keras(x,y): 返回K.sqrt(K.sum(K.square(x-y),轴=-1,keepdims=True)) 模型=顺序() 添加(SimpleRN(n_单位,activation='relu',input_shape=(时间步长,数据大小),retur

我想将欧几里德距离设置为LSTM或RNN的损失函数

这种函数应该有什么输出:float(批大小)或(批大小,时间步长)

模型输入X_序列为(n_样本、时间步长、数据尺寸)。 Y_列车的尺寸相同

示例代码:

def euc_dist_keras(x,y):
返回K.sqrt(K.sum(K.square(x-y),轴=-1,keepdims=True))
模型=顺序()
添加(SimpleRN(n_单位,activation='relu',input_shape=(时间步长,数据大小),return_sequences=True))
model.add(密集(n_输出,activation='linear'))
compile(loss=euc\u dist\u keras,optimizer='adagrad')
模型.拟合(y_序列,y_序列,批量大小=512,历代数=10)

那么,我应该平均时间步长维度和/或批次大小的损失吗?

损失函数将采用预测和真实标签,并将输出标量,单位为Keras:

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(批量大小)或 (批次大小、时间步长)

损失函数应该有标量输出

那么,我应该在时间步长维度和/或批量大小上平均损失吗

将欧几里德距离用作损失函数不需要这样做

旁注:在你的情况下,我认为问题可能在于神经网络架构,而不是损失。给定
(批大小、时间步长、数据步长)
时,
SimpleRN
的输出将是
(批大小、时间步长、n单位)
,而
密集层的输出将是
(批大小、n单位)
。因此,如果您的
Y\u序列
具有
形状(批大小、时间步长、数据大小)
,您可能需要使用
TimeDistributed
对每个时间片应用
密集
,并调整完全连接层中隐藏单元的数量