簡體   English   中英

ValueError:檢查目標時出錯:預期 activation_10 有 2 個維度,但得到了形狀為 (118, 50, 1) 的數組

[英]ValueError: Error when checking target: expected activation_10 to have 2 dimensions, but got array with shape (118, 50, 1)

我正在嘗試使用 LSTM 來預測股票價格,但遇到了以下錯誤

這是我的代碼:

from keras.layers.core import Dense, Activation, Dropout
from keras.layers.recurrent import LSTM
from keras.models import Sequential
import lstm, time

X_train, X_test, Y_train, Y_test = lstm.load_data('tata.csv', 50, True)

#build model
model = Sequential()

mode.add(LSTM(
    input_dim=1,
    output_dim=50,
    return_sequences=True))
model.add(Dropout(0.2))

model.add(LSTM(
    100,
    return_sequences=False))
model.add(Dropout(0.2))

model.add(Dense(
    output_dim=1,))
model.add(Activation('linear'))

start = time.time()
model.compile(loss='mse', optimizer='rmsprop')
print("compilation time: ", time.time - start)

#train the model
model.fit(
    X_train,
    Y_train,
    batch_size=512,
    nb_epoch=1,
    validation_split=0.05)

#predicting the prices
predictions = lstm.predict_sequences_multiple(model, X_test, 50, 50)
lstm.plot_results_multiple(predictions, Y_test, 50)

這是我遇到的錯誤:

ValueError: Error when checking target: expected activation_10 to have 2 dimensions, but got array with shape (118, 50, 1)

這是完整的圖像

我無法理解問題出在哪里。 請查看我鏈接的圖像以更好地理解。

當模型輸入形狀和數據傳遞形狀不同時,會發生此錯誤。

下面是一個示例,我使用了您的代碼但使用了不同的輸入文件(因為我無法import lstm )並進行了一些預處理以使用MinMaxScaler縮放輸入,將數據集拆分為XtrainYtrain ,最后將list轉換為np.array

我在代碼中添加了X_train = X_train[:,:,np.newaxis]以適應模型的X_train形狀。 如果沒有這一行,模型將拋出ValueError: Error when checking input: expected lstm_13_input to have 3 dimensions, but got array with shape (1975, 50)

完整代碼 -

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from keras.layers.core import Dense, Activation, Dropout
from keras.layers.recurrent import LSTM
from keras.models import Sequential
import time

url = 'https://raw.githubusercontent.com/mwitiderrick/stockprice/master/NSE-TATAGLOBAL.csv'
dataset_train = pd.read_csv(url)
training_set = dataset_train.iloc[:, 1:2].values

dataset_train.head()

from sklearn.preprocessing import MinMaxScaler
sc = MinMaxScaler(feature_range=(0,1))
training_set_scaled = sc.fit_transform(training_set)

X_train = []
y_train = []
for i in range(60, 2035):
  X_train.append(training_set_scaled[i-50:i, 0])
  y_train.append(training_set_scaled[i, 0])

X_train, Y_train = np.array(X_train), np.array(y_train)
X_train = X_train[:,:,np.newaxis]

#build model
model = Sequential()

model.add(LSTM(
    input_dim=1,
    output_dim=50,
    return_sequences=True))
model.add(Dropout(0.2))

model.add(LSTM(
    100,
    return_sequences=False))
model.add(Dropout(0.2))

model.add(Dense(
    output_dim=1,))
model.add(Activation('linear'))

#model.summary()

start = time.time()
model.compile(loss='mse', optimizer='rmsprop')
print("compilation time: ", time.time() - start)

#train the model
model.fit(
    X_train,
    Y_train,
    batch_size=512,
    nb_epoch=1,
    validation_split=0.05)

輸出 -

/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:34: UserWarning: The `input_dim` and `input_length` arguments in recurrent layers are deprecated. Use `input_shape` instead.
/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:34: UserWarning: Update your `LSTM` call to the Keras 2 API: `LSTM(return_sequences=True, input_shape=(None, 1), units=50)`
/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:43: UserWarning: Update your `Dense` call to the Keras 2 API: `Dense(units=1)`
/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:58: UserWarning: The `nb_epoch` argument in `fit` has been renamed `epochs`.
compilation time:  0.021114110946655273
Train on 1876 samples, validate on 99 samples
Epoch 1/1
1876/1876 [==============================] - 3s 1ms/step - loss: 0.0468 - val_loss: 0.0067
<keras.callbacks.callbacks.History at 0x7fa58e0efd30>

希望這能回答你的問題。 謝謝你。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM