我最近在Keras中建立了一個CNN(Tensorflow作爲後端),它將恆星光譜作爲輸入並預測三個恆星參數作爲輸出:溫度,表面重力和金屬性。我現在正在嘗試創建一個RNN來做相同的事情,以便比較兩個模型。Keras RNN迴歸輸入尺寸和結構
通過搜索示例和論壇後,我還沒有遇到很多與我的項目相似的應用程序。我嘗試過實施一個簡單的RNN,看看我能否拿出明智的結果,但目前還沒有運氣:網絡似乎根本沒有學習。
我真的可以使用一些指導讓我開始。具體而言: RNN是否適合這類問題? 模型的正確輸入形狀是什麼?我知道這取決於網絡的體系結構,所以我想我的下一個問題是:什麼是一個簡單的體系結構,能夠計算迴歸預測?
我的輸入數據是這樣的,我有m = 50,000個光譜,每個有n = 7000個數據點,而L = 3個輸出標籤,我試圖學習。我也有相同的測試集和交叉驗證集。 當我的輸入數據構造爲(m,n,1),我的輸出目標爲(m,L)並使用以下體系結構時,損失似乎不會減少。
n=7000
L=3
## train_X.shape = (50000, n, 1)
## train_Y.shape = (50000, L)
## cv_X.shape = (10000, n, 1)
## cv_Y.shape = (10000, L)
batch_size=32
lstm_layers = [16, 32]
input_shape = (None, n, 1)
model = Sequential([
InputLayer(batch_input_shape=input_shape),
LSTM(lstm_layers[0],return_sequences=True, dropout_W=0.2, dropout_U=0.2),
LSTM(lstm_layers[1], return_sequences=False),
Dense(L),
Activation('linear')
])
model.compile(loss='mean_squared_error',
optimizer='adam',
metrics=['accuracy'])
model.fit(train_X, train_Y, batch_size=batch_size, nb_epoch=20,
validation_data=(cv_X, cv_Y), verbose=2)
我也嘗試將輸入形狀更改爲(m,1,n),但仍然沒有任何成功。我不是在尋找一個最佳的網絡,只是一些訓練,然後我可以從那裏開始。我的輸入數據不是時間序列的,但是頻譜的一部分和前一部分之間有關係,所以有什麼方法可以將每個頻譜結構化爲二維陣列,這將允許RNN從中學習恆星參數光譜?
對不起,這是一個錯字。你是對的,輸入是有意義的(None,n,1) – Starnetter
所以它仍然不起作用? –
什麼是錯誤信息? @Starnetter? –