多输出回归中均方误差代价函数的加约束

2024-09-28 03:17:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我用均方误差来计算多输出回归函数的损失函数。我使用的是一对多结构的递归神经网络模型。我的输出向量的大小是6(1*6),值是单调的(非递减的)。在

示例: y\u i=[1,3,6,13,30,57201]

我想强迫模型学习这种依赖性。因此给成本函数增加了一个约束。我在验证集中得到一个等于300的错误。我相信在编辑均方误差损失函数后,我将能够获得更好的性能。在

我使用keras来实现。这是核心模型。在

batchSize = 256
epochs = 20

samplesData = trainX
samplesLabels = trainY

print("Compiling neural network model...")

Model = Sequential()
Model.add(LSTM(input_shape = (98,),input_dim=98, output_dim=128, return_sequences=True))
Model.add(Dropout(0.2))
#Model.add(LSTM(128, return_sequences=True))
#Model.add(Dropout(0.2))
Model.add(TimeDistributedDense(7))  
#rmsprop = rmsprop(lr=0.0, decay=0.0)
Model.compile(loss='mean_squared_error', optimizer='rmsprop')
Model.summary()
print("Training model...")
# learning schedule callback
#lrate = LearningRateScheduler(step_decay)
#callbacks_list = [lrate]
history = Model.fit(samplesData, samplesLabels, batch_size=batchSize, nb_epoch= epochs, verbose=1,
                             validation_split=0.2, show_accuracy=True)
print("model training has been completed.")

关于学习率、衰退等的其他提示。。感谢你。在


Tags: 函数模型addtruemodel误差printepochs
1条回答
网友
1楼 · 发布于 2024-09-28 03:17:57

保持均方误差只是一个度量。使用平滑L1损耗代替。这是我的实现。在

#Define Smooth L1 Loss
def l1_smooth_loss(y_true, y_pred):
    abs_loss = tf.abs(y_true - y_pred)
    sq_loss = 0.5 * (y_true - y_pred)**2
    l1_loss = tf.where(tf.less(abs_loss, 1.0), sq_loss, abs_loss - 0.5)
    return tf.reduce_sum(l1_loss, -1)    
#And

Model.compile(loss='l1_smooth_loss', optimizer='rmsprop')

相关问题 更多 >

    热门问题