【发布时间】:2021-10-07 22:32:36
【问题描述】:
如果我运行以下代码,我将获得相同值的数组(预测),如您在此处看到的:
基本上,我对回归器的输入是数字 0、1、2、... 99 的数组,我希望输出为 100。 正如您在代码中看到的那样,我按顺序(多次)执行此操作。 此代码应该是可运行的。我做错了什么,为什么预期的结果和结果不同?
代码:
import numpy as np
import pandas as pd
import tensorflow as tf
import matplotlib.pyplot as plt
from keras.layers import Dense
from keras.layers import LSTM
from keras.models import Sequential
from keras.layers import Dropout
from sklearn.preprocessing import MinMaxScaler
from datetime import datetime
from datetime import timedelta
from time import mktime
my_data = []
for i in range(0, 1000):
my_data.append(i)
X_train = []
y_train = []
np_data = np.array(my_data)
for i in range(0, np_data.size - 100 ):
X_train.append(np_data[i : i+100])
y_train.append(np_data[i+100])
X_train, y_train = np.array(X_train), np.array(y_train)
X_train = np.reshape(X_train, [X_train.shape[0], X_train.shape[1], 1])
regressor = Sequential()
regressor.add(LSTM(units=50, return_sequences=True, input_shape=(X_train.shape[1], 1)))
regressor.add(Dropout(0.2))
regressor.add(LSTM(units=50, return_sequences=True))
regressor.add(Dropout(0.2))
regressor.add(LSTM(units=50, return_sequences=True))
regressor.add(Dropout(0.2))
regressor.add(LSTM(units=50, return_sequences=True))
regressor.add(Dropout(0.2))
regressor.add(LSTM(units=50))
regressor.add(Dropout(0.2))
regressor.add(Dense(units=1))
regressor.compile(optimizer='adam', loss='mean_squared_error')
regressor.fit(X_train, y_train, epochs=5, batch_size=32)
X_test = []
y_test = []
my_data = []
for i in range(1000, 1500):
my_data.append(i)
np_data = np.array(my_data)
for i in range(0, np_data.size - 100 ):
X_test.append(np_data[i : i+100])
y_test.append(np_data[i+100])
X_test = np.array(X_test)
X_test = np.reshape(X_test, [X_test.shape[0], X_test.shape[1], 1])
predicted = regressor.predict(X_test)
plt.plot(y_test, color = '#ffd700', label = "Real Data")
plt.plot(predicted, color = '#1fb864', label = "Predicted Data")
plt.title(" Price Prediction")
plt.xlabel("X axis")
plt.ylabel("Y axis")
plt.legend()
plt.show()
【问题讨论】:
-
我认为这仅仅是因为模型太复杂而无法学习,这只是一个简单的线性预测任务,单个 Dense 层就足够了。
-
嗨@seermer,你能推荐一个工作代码吗?
-
看下面的答案,我修改为按预期工作的代码
标签: tensorflow machine-learning keras neural-network lstm