为什么训练误差和验证误差在数量上有如此大的差异?

时间:2019-06-16 14:01:42

标签: python keras neural-network deep-learning loss-function

问题

  1. 为什么我的“火车损失” “验证损失” 之间有如此大的差异,如下图所示?这是否表示我的代码错误以及受过训练的网络也错误?

enter image description here

  1. 我的一些代码如下:

    DATA_SPLIT_PCT = 0.2
    
    timesteps =  5
    n_features =  20
    
    epochs = 100
    batch = 32
    lr = 0.0001
    
    lstm_autoencoder = Sequential([
    # Encoder
    LSTM(8, activation='relu', input_shape=(timesteps, n_features), return_sequences=True),
    LSTM(4, activation='relu', return_sequences=False),
    RepeatVector(timesteps),
    
    # Decoder
    LSTM(4, activation='relu', return_sequences=True),
    LSTM(8, activation='relu', return_sequences=True)
    TimeDistributed(Dense(n_features)),
    ])
    
    adam = optimizers.Adam(lr)
    lstm_autoencoder.compile(loss='mse', optimizer=adam)
    
    for stock in stock_list:  # 500 stocks in stock_list
        lstm_autoencoder_history = lstm_autoencoder.fit(X_train_dict[ticker], X_train_dict[ticker], 
                                                    epochs=epochs, 
                                                    batch_size=batch, 
                                                    validation_data=(X_valid_dict[ticker], X_valid_dict[ticker]),
                                                    verbose=False).history
    
    plt.plot(lstm_autoencoder_history['loss'], linewidth=2, label='Train')
    plt.plot(lstm_autoencoder_history['val_loss'], linewidth=2, label='Valid')
    plt.show()
    
  2. 我使用了for循环将我的数据馈送到lstm_autoencoder网络中。在字典变量stock_list中,有500个股票名称,例如'AAPL'。

  3. 我绘制了lstm_autoencoder_history['loss']lstm_autoencoder_history['val_loss'],这很奇怪,因为通常验证损失高于训练损失。

  4. 我很想知道为什么我的地块的验证损失较少。作为参考,我使用了 Keras 作为深度学习框架。自从我使用Keras以来,我认为该库将通过平均误差来处理训练集大小和验证集大小的不同比例。

0 个答案:

没有答案