0

多出力回帰器の損失関数を計算するために平均二乗誤差を使用しています。私は、1対多アーキテクチャのリカレントニューラルネットワークモデルを使用しました。私の出力ベクトルはサイズ6(1 * 6)であり、値は単調増加(非減少)です。多出力回帰における二乗誤差コスト関数に制約を追加

例: Y_I = [1,3,6,13,30,57,201]

私はこの依存関係を学ぶためにモデルを強制したいと思います。したがって、コスト関数に制約を加える。検証セットで300に等しいエラーが発生しています。私は平均二乗誤差損失関数を編集した後、より良い性能を得ることができると信じています。

私は実装にケラスを使用しています。ここにコアモデルがあります。

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.") 

学習率、減衰などに関するその他のヒントがあります。

答えて

0

平均二乗誤差をメトリックとして保持します。代わりにSmooth L1 lossを使用してください。ここに私の実装があります。

#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') 
関連する問題