在我的LSTM中遇到非广播错误

因此,我一直在尝试对这个CSV文件应用LSTM 我试图训练的CSV文件

然而,它似乎可以自我训练,但在训练之后,我的测试文件出现了问题,出现错误1,如果我稍微修改一下,就会得到另一个错误,显示“值错误:无法将大小为1047835的数组重塑为指定形状”。

这是我正在实现的代码:

import mathimport matplotlib.pyplot as pltimport kerasimport pandas as pdimport numpy as npimport osos.environ["CUDA_VISIBLE_DEVICES"] = "-1" #由于GPU能力为3.0,不得不使用CPUfrom keras.models import Sequentialfrom keras.layers import Densefrom keras.layers import LSTMfrom keras.layers import Dropoutfrom keras.layers import *from sklearn.preprocessing import MinMaxScalerfrom sklearn.metrics import mean_squared_errorfrom sklearn.metrics import mean_absolute_errorfrom sklearn.model_selection import train_test_splitfrom keras.callbacks import EarlyStopping   df=pd.read_csv(r'C:\Users\LambertThePrick\Desktop\Databysir\LSTM.csv')print(df.shape)print(df.head(5))#df.head(5)  TrainPart=df.iloc[:800,1:3].valuestest_set=df.iloc[800:,1:3].valuesscaler=MinMaxScaler(feature_range=(0,1))Trainpart_scaled=scaler.fit_transform(TrainPart)print(Trainpart_scaled) X_Train=[]Y_Train=[]for i in range(60,800):    X_Train.append(Trainpart_scaled[i-60:i,0])    Y_Train.append(Trainpart_scaled[i,0])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))# print(X_train = np.reshape(X_Train, (X_Train.shape[0], X_Train.shape[1], 1)))#(740, 60, 1) model = Sequential()#添加第一个LSTM层和一些Dropout正则化model.add(LSTM(units = 50, return_sequences = True, input_shape = (X_Train.shape[1], 1)))model.add(Dropout(0.2))# 添加第二个LSTM层和一些Dropout正则化model.add(LSTM(units = 50, return_sequences = True))model.add(Dropout(0.2))# 添加第三个LSTM层和一些Dropout正则化model.add(LSTM(units = 50, return_sequences = True))model.add(Dropout(0.2))# 添加第四个LSTM层和一些Dropout正则化model.add(LSTM(units = 50))model.add(Dropout(0.2))# 添加输出层model.add(Dense(units = 1))# 编译RNNmodel.compile(optimizer = 'adam', loss = 'mean_squared_error')# 将RNN拟合到训练集model.fit(X_Train, Y_Train, epochs = 100, batch_size = 32) #这是实验之后 dataset_train = df.iloc[:800, 1:3]dataset_test = df.iloc[800:, 1:3]dataset_total = pd.concat((dataset_train, dataset_test), axis = 0)inputs = dataset_total[len(dataset_total) - len(dataset_test) - 60:].valuesinputs = inputs.reshape(-1,1)inputs = scaler.transform(inputs)X_Test = []for i in range(60, 800):    X_Test.append(inputs[i-60:i, 0])X_Test = np.array(X_Test)X_Test = np.reshape(X_Test, (X_Test.shape[0], X_Test.shape[1], 1))print(X_Test.shape) predicted_stock_price = model.predict(X_Test)predicted_stock_price = scaler.inverse_transform(predicted_stock_price) plt.plot(df.loc[800:, 'Date'],dataset_test.values, color = 'red', label = '实际ASTL股票价格')plt.plot(df.loc[800:, 'Date'],predicted_stock_price, color = 'blue', label = '预测的ASTL股票价格')plt.xticks(np.arange(0,459,50))plt.title('ASTL股票价格预测')plt.xlabel('时间')plt.ylabel('ASTL股票价格')plt.legend()plt.show()

回答:

在你的重塑过程中,你会遇到非整数除法的情况。看这个例子:

import numpy as npdata = np.zeros(3936)out = data.reshape((-1,1,24,2)) 

因为3936/24/2的结果是一个整数82,所以运行得很好。

但在这个例子中

import numpy as npdata = np.zeros(34345)out = data.reshape((-1,1,24,2)) 

你会得到错误信息值错误:无法将大小为34345的数组重塑为形状(1,24,2),因为除法结果不是整数。

所以,像你这样循环操作肯定会导致这类问题。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注