Python I';我试图将cnn lstm的例子改编为一个单变量时间序列,从教程博客到用lstm编写的航空乘客问题

Python I';我试图将cnn lstm的例子改编为一个单变量时间序列,从教程博客到用lstm编写的航空乘客问题,python,numpy,tensorflow,keras,lstm,Python,Numpy,Tensorflow,Keras,Lstm,我在另一个博客中尝试将cnn lstm的例子改编为一个单变量时间序列,从到用lstm编写的航空公司乘客问题,但收到以下错误 这是接收到的全部代码和错误消息 # LSTM for international airline passengers problem with window regression framing import numpy import matplotlib.pyplot as plt import pandas import math from keras.models

我在另一个博客中尝试将cnn lstm的例子改编为一个单变量时间序列,从到用lstm编写的航空公司乘客问题,但收到以下错误

这是接收到的全部代码和错误消息

# LSTM for international airline passengers problem with window regression framing
import numpy
import matplotlib.pyplot as plt
import pandas
import math
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import LSTM
from keras.layers import Flatten
from keras.layers import TimeDistributed
from keras.layers.convolutional import Conv1D
from keras.layers.convolutional import MaxPooling1D
 
from sklearn.preprocessing import MinMaxScaler
from sklearn.metrics import mean_squared_error
# convert an array of values into a dataset matrix
def create_dataset(dataset, look_back=1):
    dataX, dataY = [], []
    for i in range(len(dataset)-look_back-1):
        a = dataset[i:(i+look_back), 0]
        dataX.append(a)
        dataY.append(dataset[i + look_back, 0])
    return numpy.array(dataX), numpy.array(dataY)
# fix random seed for reproducibility
numpy.random.seed(7)
# load the dataset
dataframe = pandas.read_csv('dummy_timeseries.csv' , usecols=[1],
engine= 'python' , skipfooter=3)
dataset = dataframe.values
dataset = dataset.astype('float32' )
# normalize the dataset
scaler = MinMaxScaler(feature_range=(0, 1))
dataset = scaler.fit_transform(dataset)
# split into train and test sets
train_size = int(len(dataset) * 0.67)
test_size = len(dataset) - train_size
train, test = dataset[0:train_size,:], dataset[train_size:len(dataset),:]
# reshape into X=t and Y=t+1
look_back = 3
trainX, trainY = create_dataset(train, look_back)
testX, testY = create_dataset(test, look_back)
# reshape input to be [samples, time steps, features]

n_features = 1
trainX = numpy.reshape(trainX, (trainX.shape[0], 1, trainX.shape[1]))
testX = numpy.reshape(testX, (testX.shape[0], 1, testX.shape[1]))
# define model
model = Sequential()
model.add(TimeDistributed(Conv1D(filters=64, kernel_size=1, activation='relu'),input_shape=(None,look_back, n_features)))
model.add(TimeDistributed(MaxPooling1D(pool_size=2)))
model.add(TimeDistributed(Flatten()))
model.add(LSTM(50, activation='relu'))
model.add(Dense(1))
model.compile(optimizer='adam', loss='mse')
model.fit(trainX, trainY, epochs=100, batch_size=1, verbose=2)
# make predictions
trainPredict = model.predict(trainX)
testPredict = model.predict(testX)
# invert predictions
trainPredict = scaler.inverse_transform(trainPredict)
trainY = scaler.inverse_transform([trainY])
testPredict = scaler.inverse_transform(testPredict)
testY = scaler.inverse_transform([testY])
# calculate root mean squared error
trainScore = math.sqrt(mean_squared_error(trainY[0], trainPredict[:,0]))
print( 'Train Score: %.2f RMSE' % (trainScore))
testScore = math.sqrt(mean_squared_error(testY[0], testPredict[:,0]))
print( 'Test Score: %.2f RMSE' % (testScore))
# shift train predictions for plotting
trainPredictPlot = numpy.empty_like(dataset)
trainPredictPlot[:, :] = numpy.nan
trainPredictPlot[look_back:len(trainPredict)+look_back, :] = trainPredict
# shift test predictions for plotting
testPredictPlot = numpy.empty_like(dataset)
testPredictPlot[:, :] = numpy.nan
testPredictPlot[len(trainPredict)+(look_back*2)+1:len(dataset)-1, :] = testPredict
# plot baseline and predictions
plt.plot(scaler.inverse_transform(dataset))
plt.plot(trainPredictPlot)
plt.plot(testPredictPlot)
plt.show()


                              Error Message
Epoch 1/100
Traceback (most recent call last):

  File "C:\Users\cisco4gud\Desktop\spider\LSTMwindowairline.py", line 62, in <module>
    model.fit(trainX, trainY, epochs=100, batch_size=1, verbose=2)

  File "C:\Users\cisco4gud\Anaconda31\lib\site-packages\tensorflow\python\keras\engine\training.py", line 108, in _method_wrapper
    return method(self, *args, **kwargs)

  File "C:\Users\cisco4gud\Anaconda31\lib\site-packages\tensorflow\python\keras\engine\training.py", line 1098, in fit
    tmp_logs = train_function(iterator)

  File "C:\Users\cisco4gud\Anaconda31\lib\site-packages\tensorflow\python\eager\def_function.py", line 780, in __call__
    result = self._call(*args, **kwds)

  File "C:\Users\cisco4gud\Anaconda31\lib\site-packages\tensorflow\python\eager\def_function.py", line 823, in _call
    self._initialize(args, kwds, add_initializers_to=initializers)

  File "C:\Users\cisco4gud\Anaconda31\lib\site-packages\tensorflow\python\eager\def_function.py", line 697, in _initialize
    *args, **kwds))

  File "C:\Users\cisco4gud\Anaconda31\lib\site-packages\tensorflow\python\eager\function.py", line 2855, in _get_concrete_function_internal_garbage_collected
    graph_function, _, _ = self._maybe_define_function(args, kwargs)

  File "C:\Users\cisco4gud\Anaconda31\lib\site-packages\tensorflow\python\eager\function.py", line 3213, in _maybe_define_function
    graph_function = self._create_graph_function(args, kwargs)

  File "C:\Users\cisco4gud\Anaconda31\lib\site-packages\tensorflow\python\eager\function.py", line 3075, in _create_graph_function
    capture_by_value=self._capture_by_value),

  File "C:\Users\cisco4gud\Anaconda31\lib\site-packages\tensorflow\python\framework\func_graph.py", line 986, in func_graph_from_py_func
    func_outputs = python_func(*func_args, **func_kwargs)

  File "C:\Users\cisco4gud\Anaconda31\lib\site-packages\tensorflow\python\eager\def_function.py", line 600, in wrapped_fn
    return weak_wrapped_fn().__wrapped__(*args, **kwds)

  File "C:\Users\cisco4gud\Anaconda31\lib\site-packages\tensorflow\python\framework\func_graph.py", line 973, in wrapper
    raise e.ag_error_metadata.to_exception(e)

ValueError: in user code:

    C:\Users\cisco4gud\Anaconda31\lib\site-packages\tensorflow\python\keras\engine\training.py:806 train_function  *
        return step_function(self, iterator)
    C:\Users\cisco4gud\Anaconda31\lib\site-packages\tensorflow\python\keras\engine\training.py:796 step_function  **
        outputs = model.distribute_strategy.run(run_step, args=(data,))
    C:\Users\cisco4gud\Anaconda31\lib\site-packages\tensorflow\python\distribute\distribute_lib.py:1211 run
        return self._extended.call_for_each_replica(fn, args=args, kwargs=kwargs)
    C:\Users\cisco4gud\Anaconda31\lib\site-packages\tensorflow\python\distribute\distribute_lib.py:2585 call_for_each_replica
        return self._call_for_each_replica(fn, args, kwargs)
    C:\Users\cisco4gud\Anaconda31\lib\site-packages\tensorflow\python\distribute\distribute_lib.py:2945 _call_for_each_replica
        return fn(*args, **kwargs)
    C:\Users\cisco4gud\Anaconda31\lib\site-packages\tensorflow\python\keras\engine\training.py:789 run_step  **
        outputs = model.train_step(data)
    C:\Users\cisco4gud\Anaconda31\lib\site-packages\tensorflow\python\keras\engine\training.py:747 train_step
        y_pred = self(x, training=True)
    C:\Users\cisco4gud\Anaconda31\lib\site-packages\tensorflow\python\keras\engine\base_layer.py:976 __call__
        self.name)
    C:\Users\cisco4gud\Anaconda31\lib\site-packages\tensorflow\python\keras\engine\input_spec.py:180 assert_input_compatibility
        str(x.shape.as_list()))

    ValueError: Input 0 of layer sequential_46 is incompatible with the layer: expected ndim=4, found ndim=3. Full shape received: [1, 1, 3]
#国际航空公司乘客问题的LSTM窗口回归框架
进口numpy
将matplotlib.pyplot作为plt导入
进口大熊猫
输入数学
从keras.models导入顺序
从keras.layers导入稠密
从keras.layers导入LSTM
从keras.layers导入展平
从keras.layers导入TimeDistributed
从keras.layers.voluminal导入Conv1D
从keras.layers.voluminal导入MaxPoolg1d
从sklearn.preprocessing导入MinMaxScaler
从sklearn.metrics导入均方误差
#将值数组转换为数据集矩阵
def create_数据集(数据集,回望=1):
dataX,dataY=[],[]
对于范围内的i(len(数据集)-向后看-1):
a=数据集[i:(i+回顾),0]
dataX.append(a)
追加(数据集[i+回望,0])
返回numpy.array(dataX),numpy.array(dataY)
#固定随机种子的重复性
随机种子(7)
#加载数据集
dataframe=pandas.read\u csv('dummy\u timeseries.csv',usecols=[1],
引擎='python',skipfooter=3)
dataset=dataframe.values
dataset=dataset.astype('float32')
#规范化数据集
scaler=MinMaxScaler(功能范围=(0,1))
dataset=scaler.fit_变换(dataset)
#分为训练集和测试集
列车尺寸=整数(长度(数据集)*0.67)
测试尺寸=长度(数据集)-序列尺寸
列车,测试=数据集[0:列车大小,:],数据集[列车大小:长度(数据集),:]
#重塑为X=t和Y=t+1
回头看
trainX,trainY=创建数据集(train,look\u back)
testX,testY=创建数据集(测试,回顾)
#将输入重塑为[样本、时间步、特征]
n_特征=1
trainX=numpy.重塑(trainX,(trainX.形状[0],1,trainX.形状[1]))
testX=numpy.reformate(testX,(testX.shape[0],1,testX.shape[1]))
#定义模型
模型=顺序()
add(TimeDistributed(Conv1D(filters=64,kernel\u size=1,activation='relu'),input\u shape=(None,look\u back,n\u features)))
添加(时间分布(MaxPoolg1d(池大小=2)))
model.add(TimeDistributed(flatte()))
model.add(LSTM(50,activation='relu'))
模型.添加(密度(1))
compile(优化器='adam',loss='mse')
模型拟合(trainX、trainY、epochs=100、批次尺寸=1、详细度=2)
#预测
trainPredict=模型预测(trainX)
testPredict=model.predict(testX)
#颠倒预测
trainPredict=定标器逆变换(trainPredict)
trainY=scaler.逆_变换([trainY])
testPredict=scaler.逆变换(testPredict)
testY=scaler.inverse_变换([testY])
#计算均方根误差
trainScore=math.sqrt(均方误差(trainY[0],trainPredict[:,0]))
打印('Train Score:%.2f RMSE'(Train Score))
testScore=math.sqrt(均方误差(testY[0],testPredict[:,0]))
打印('测试分数:%.2f RMSE'(测试分数))
#用于绘图的轮班列车预测
trainPredictPlot=numpy.empty_like(数据集)
trainPredictPlot[:,:]=numpy.nan
trainPredictPlot[look_-back:len(trainPredict)+look_-back,:]=trainPredict
#用于绘图的移位测试预测
testPredictPlot=numpy.empty_like(数据集)
testPredictPlot[:,:]=numpy.nan
testPredictPlot[len(trainPredict)+(look_back*2)+1:len(dataset)-1,:]=testPredict
#绘制基线和预测
plt.plot(scaler.reverse_transform(数据集))
plt.plot(列车预测图)
plt.plot(testPredictPlot)
plt.show()
错误消息
纪元1/100
回溯(最近一次呼叫最后一次):
文件“C:\Users\cisco4gud\Desktop\spider\LSTMwindowairline.py”,第62行,在
模型拟合(trainX、trainY、epochs=100、批次尺寸=1、详细度=2)
文件“C:\Users\cisco4gud\Anaconda31\lib\site packages\tensorflow\python\keras\engine\training.py”,第108行,在方法包装中
返回方法(self、*args、**kwargs)
文件“C:\Users\cisco4gud\Anaconda31\lib\site packages\tensorflow\python\keras\engine\training.py”,第1098行
tmp_logs=训练函数(迭代器)
文件“C:\Users\cisco4gud\Anaconda31\lib\site packages\tensorflow\python\eager\def_function.py”,第780行,在调用中__
结果=自身调用(*args,**kwds)
文件“C:\Users\cisco4gud\Anaconda31\lib\site packages\tensorflow\python\eager\def\u function.py”,第823行,在调用中
self.\u初始化(参数、KWD、添加初始值设定项到=初始值设定项)
文件“C:\Users\cisco4gud\Anaconda31\lib\site packages\tensorflow\python\eager\def_function.py”,第697行,在_initialize中
*args,**科威特第纳尔)
文件“C:\Users\cisco4gud\Anaconda31\lib\site packages\tensorflow\python\eager\function.py”,第2855行,位于“获取”\u具体”\u函数\u内部\u垃圾收集
图函数,自我,可能定义函数(args,kwargs)
文件“C:\Users\cisco4gud\Anaconda31\lib\site packages\tensorflow\python\eager\function.py”,第3213行,在函数定义中
graph\u function=self.\u create\u graph\u function(args,kwargs)
文件“C:\Users\cisco4gud\Anaconda31\lib\site packages\tensorflow\python\eager\function.py”,第3075行,在创建图形函数中
按值捕获=自身。_按值捕获),
文件“C:\Users\cisco4gud\Anaconda31\lib\site packages\tensorflow\python\framework\func_graph.py”,第986行,位于_py_func的func_图中
func_outputs=python_func(*func_args,**func_kwargs)
文件“C:\Users\cisco4gud\Anaconda31\lib\site packages\tensorflow\python\eager\def_function.py”,第600行,包装为\u fn
返回弱_-wrapped_-fn()
包装器中的文件“C:\Users\cisco4gud\Anaconda31\lib\site packages\tensorflow\python\framework\func_graph.py”,第973行
将e.ag\u错误\u元数据引发到\u异常(e)
ValueError:在用户代码中:
C:\Users\cisco4gud\Anaconda31\lib\site packages\tensorflow\python\keras\engine\training.py:806 train\u函数*
返回步骤f
model.add(TimeDistributed(Conv1D(filters=64, kernel_size=1, activation='relu'), input_shape=(look_back, n_features)))
I changed the  reshape input from [samples, time steps, features] to  [samples,subsequence, time steps, features] and the code for that section changes to 


n_features = 1
n_seq = 1
n_steps = 3
trainX = trainX.reshape((trainX.shape[0], n_seq, n_steps, n_features))
testX = testX.reshape((testX.shape[0], n_seq, n_steps, n_features))