import pandas as pd import numpy as np import matplotlib.pyplot as plt import tensorflow as tf from tensorflow.keras.models import Sequential from tensorflow.keras.layers import LSTM, Dense data = pd.read_csv('车辆:274序:4结果数据.csv') x = data[['车头间距', '原车道前车速度']].values y = data['本车速度'].values train_size = int(len(x) * 0.7) test_size = len(x) - train_size x_train, x_test = x[0:train_size,:], x[train_size:len(x),:] y_train, y_test = y[0:train_size], y[train_size:len(y)] from sklearn.preprocessing import MinMaxScaler scaler = MinMaxScaler(feature_range=(0, 1)) x_train = scaler.fit_transform(x_train) x_test = scaler.transform(x_test) model = Sequential() model.add(LSTM(50, input_shape=(2, 1))) model.add(Dense(1)) model.compile(loss='mean_squared_error', optimizer='adam') history = model.fit(x_train.reshape(-1, 2, 1), y_train, epochs=100, batch_size=32, validation_data=(x_test.reshape(-1, 2, 1), y_test)) plt.plot(history.history['loss']) plt.plot(history.history['val_loss']) plt.title('Model loss') plt.ylabel('Loss') plt.xlabel('Epoch') plt.legend(['Train', 'Test'], loc='upper right') plt.show() train_predict = model.predict(x_train.reshape(-1, 2, 1)) test_predict = model.predict(x_test.reshape(-1, 2, 1)) train_predict = scaler.inverse_transform(train_predict) train_predict = train_predict.reshape(-1, 1) y_train = scaler.inverse_transform([y_train]) test_predict = scaler.inverse_transform(test_predict) y_test = scaler.inverse_transform([y_test]) plt.plot(y_train[0], label='train') plt.plot(train_predict[:,0], label='train predict') plt.plot(y_test[0], label='test') plt.plot(test_predict[:,0], label='test predict') plt.legend() plt.show()报错Traceback (most recent call last): File "C:\Users\马斌\Desktop\NGSIM_data_processing\80s\lstmtest.py", line 42, in <module> train_predict = scaler.inverse_transform(train_predict) File "D:\python\python3.9.5\pythonProject\venv\lib\site-packages\sklearn\preprocessing\_data.py", line 541, in inverse_transform X -= self.min_ ValueError: non-broadcastable output operand with shape (611,1) doesn't match the broadcast shape (611,2)
时间: 2023-12-24 09:06:44 浏览: 162
这个错误提示是因为在使用 `scaler.inverse_transform()` 函数时,输入的 `train_predict` 和 `y_train` 的维度不匹配,导致无法进行运算。具体来说,`train_predict` 是一个形状为 `(611, 1)` 的二维数组,而 `y_train` 是一个形状为 `(1, 611)` 的二维数组,因此无法直接进行运算。
你可以尝试使用以下代码将 `y_train` 转换为一维数组,再进行运算:
```
train_predict = scaler.inverse_transform(train_predict)
train_predict = train_predict.reshape(-1) # 将结果变为一维数组
y_train = scaler.inverse_transform(y_train.reshape(-1, 1)).reshape(-1) # 将结果变为一维数组
```
同样的,你也需要将 `y_test` 转换为一维数组,再进行相应的操作。
相关问题
import pandas as pd import numpy as np import tushare as ts from sklearn.preprocessing import MinMaxScaler import matplotlib.pyplot as plt import mplfinance as mpf from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense, LSTM
这是一段 Python 代码,导入了一些常用的数据分析和机器学习库,包括 Pandas、NumPy、Tushare、Sklearn、Matplotlib、mplfinance 和 TensorFlow。其中,Pandas 用于数据处理和分析,NumPy 用于科学计算,Tushare 用于获取股票数据,Sklearn 用于数据预处理,Matplotlib 和 mplfinance 用于数据可视化,TensorFlow 用于机器学习建模。这段代码还定义了一个 Sequential 模型,并导入了 Dense 和 LSTM 层,用于搭建神经网络模型。
import numpy import matplotlib.pyplot as plt from keras.models import Sequential from keras.layers import Dense from keras.layers import LSTM import pandas as pd import os from keras.models import Sequential, load_model
您好!感谢您的提问。我是 C知道,一个基于 CSDN 开发的 AI。很高兴能回答您的问题。
根据您的代码,您导入了一些常用的 Python 库和模块,包括 numpy、matplotlib、pandas 和 keras。您还导入了一些特定的类和函数,例如 Sequential、Dense、LSTM 和 load_model。
导入 numpy 库是为了在 Python 中进行数值计算和数组操作。matplotlib 库用于绘制图表和可视化数据。pandas 库提供了用于数据分析和处理的数据结构和函数。而 keras 则是一个流行的深度学习库,用于构建和训练神经网络模型。
在您的代码中,您创建了一个 Sequential 模型,并添加了一些层,如 Dense 和 LSTM。Sequential 模型是 keras 中的一种简单的线性堆叠模型,可以按顺序添加各个层。Dense 层是全连接层,用于构建神经网络的隐藏层和输出层。LSTM 层则是一种循环神经网络层,用于处理序列数据。
最后,您还导入了 load_model 函数,该函数用于从磁盘加载已经保存的模型。
希望能对您有所帮助!如果您有任何其他问题,请随时提问。
阅读全文