RNN(keras)的欧氏距离损失函数
我想将欧几里德距离设置为LSTM或RNN的损失函数 这种函数应该有什么输出:float(批大小)或(批大小,时间步长) 模型输入X_序列为(n_样本、时间步长、数据尺寸)。 Y_列车的尺寸相同 示例代码: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
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
对每个时间片应用密集
,并调整完全连接层中隐藏单元的数量