Tensorflow ';索引器:列表索引超出范围';使用Keras Time2D

Tensorflow ';索引器:列表索引超出范围';使用Keras Time2D,tensorflow,keras,conv-neural-network,lstm,recurrent-neural-network,Tensorflow,Keras,Conv Neural Network,Lstm,Recurrent Neural Network,我正在尝试建立一个CNN-LSTM模型。我的数据集由一组大小为(n_spot,n_meas)=(100102)的单通道图像组成。在这个小例子中,我只得到了n_sim=20图像,因此: print(X_train.shape) -> (12, 100, 102, 1) print(X_val.shape) -> (4, 100, 102, 1) print(X_test.shape) -> (4, 100, 102, 1) print(y_train.shape) ->

我正在尝试建立一个CNN-LSTM模型。我的数据集由一组大小为
(n_spot,n_meas)=(100102)
的单通道图像组成。在这个小例子中,我只得到了
n_sim=20
图像,因此:

print(X_train.shape) -> (12, 100, 102, 1)
print(X_val.shape)   -> (4, 100, 102, 1)
print(X_test.shape)  -> (4, 100, 102, 1)
print(y_train.shape) -> (12, 200)
print(y_val.shape)   -> (4, 200)
print(y_test.shape)  -> (4,200)
我的代码如下:

# create model
model = Sequential()

# add model layers
model.add(TimeDistributed(Conv2D(filters = 8, kernel_size=[3,3], padding = 'same',
                 activation='relu', input_shape=(None,n_spot,n_meas,1))))
model.add(TimeDistributed(MaxPool2D(pool_size=(3,3))))
model.add(TimeDistributed(Flatten()))

model.add(LSTM(20, return_sequences=False))

model.add(Dense(2*n_spot, activation = 'linear'))

#compile model using accuracy to measure model performance
model.compile(optimizer='adam', loss='mean_squared_error')
model.summary()
返回以下错误:

'This model has not yet been built. '

ValueError: This model has not yet been built. Build the model first by calling build() or calling fit() with some data. Or specify input_shape or batch_input_shape in the first layer for automatic build. 
而我每次尝试训练我的模特时都会得到这个

model.fit(X_train, y_train, validation_data=(X_val, y_val), epochs=30)

Using TensorFlow backend.
Traceback (most recent call last):

  File "<ipython-input-1-1109305aff30>", line 1, in <module>
    runfile('C:/Users/nle5266/Documents/positioning/reduced_data.py', wdir='C:/Users/nle5266/Documents/positioning')

  File "C:\Users\nle5266\AppData\Local\conda\conda\envs\tensorflow_env\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line 786, in runfile
    execfile(filename, namespace)

  File "C:\Users\nle5266\AppData\Local\conda\conda\envs\tensorflow_env\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line 110, in execfile
    exec(compile(f.read(), filename, 'exec'), namespace)

  File "C:/Users/nle5266/Documents/positioning/reduced_data.py", line 338, in <module>
    model.fit(X_train, y_train, validation_data=(X_val, y_val), epochs=30, callbacks=[tensorboard])

  File "C:\Users\nle5266\AppData\Local\conda\conda\envs\tensorflow_env\lib\site-packages\keras\engine\training.py", line 952, in fit
    batch_size=batch_size)

  File "C:\Users\nle5266\AppData\Local\conda\conda\envs\tensorflow_env\lib\site-packages\keras\engine\training.py", line 677, in _standardize_user_data
    self._set_inputs(x)

  File "C:\Users\nle5266\AppData\Local\conda\conda\envs\tensorflow_env\lib\site-packages\keras\engine\training.py", line 589, in _set_inputs
    self.build(input_shape=(None,) + inputs.shape[1:])

  File "C:\Users\nle5266\AppData\Local\conda\conda\envs\tensorflow_env\lib\site-packages\keras\engine\sequential.py", line 221, in build
    x = layer(x)

  File "C:\Users\nle5266\AppData\Local\conda\conda\envs\tensorflow_env\lib\site-packages\keras\engine\base_layer.py", line 457, in __call__
    output = self.call(inputs, **kwargs)

  File "C:\Users\nle5266\AppData\Local\conda\conda\envs\tensorflow_env\lib\site-packages\keras\layers\wrappers.py", line 248, in call
    y = self.layer.call(inputs, **kwargs)

  File "C:\Users\nle5266\AppData\Local\conda\conda\envs\tensorflow_env\lib\site-packages\keras\layers\convolutional.py", line 171, in call
    dilation_rate=self.dilation_rate)

  File "C:\Users\nle5266\AppData\Local\conda\conda\envs\tensorflow_env\lib\site-packages\keras\backend\tensorflow_backend.py", line 3650, in conv2d
    data_format=tf_data_format)

  File "C:\Users\nle5266\AppData\Local\conda\conda\envs\tensorflow_env\lib\site-packages\tensorflow\python\ops\nn_ops.py", line 779, in convolution
    data_format=data_format)

  File "C:\Users\nle5266\AppData\Local\conda\conda\envs\tensorflow_env\lib\site-packages\tensorflow\python\ops\nn_ops.py", line 828, in __init__
    input_channels_dim = input_shape[num_spatial_dims + 1]

  File "C:\Users\nle5266\AppData\Local\conda\conda\envs\tensorflow_env\lib\site-packages\tensorflow\python\framework\tensor_shape.py", line 616, in __getitem__
    return self._dims[key]

IndexError: list index out of range
model.fit(X_序列,y_序列,验证数据=(X_val,y_val),年代=30)
使用TensorFlow后端。
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
runfile('C:/Users/nle5266/Documents/positioning/reduced_data.py',wdir='C:/Users/nle5266/Documents/positioning')
文件“C:\Users\nle5266\AppData\Local\conda\conda\envs\tensorflow\u env\lib\site packages\spyder\u kernels\customize\spyderrcustomize.py”,第786行,在runfile中
execfile(文件名、命名空间)
文件“C:\Users\nle5266\AppData\Local\conda\conda\envs\tensorflow\u env\lib\site packages\spyder\u kernels\customize\spyderrcustomize.py”,第110行,在execfile中
exec(编译(f.read(),文件名,'exec'),命名空间)
文件“C:/Users/nle5266/Documents/positioning/reduced_data.py”,第338行,在
model.fit(X_-train,y_-train,validation_-data=(X_-val,y_-val),epochs=30,回调=[tensorboard])
文件“C:\Users\nle5266\AppData\Local\conda\conda\envs\tensorflow\u env\lib\site packages\keras\engine\training.py”,第952行,格式为fit
批次大小=批次大小)
文件“C:\Users\nle5266\AppData\Local\conda\conda\envs\tensorflow\u env\lib\site packages\keras\engine\training.py”,第677行,在用户数据中
自设置输入(x)
文件“C:\Users\nle5266\AppData\Local\conda\conda\envs\tensorflow\u env\lib\site packages\keras\engine\training.py”,第589行,在集合输入中
self.build(input_shape=(None,)+inputs.shape[1:])
文件“C:\Users\nle5266\AppData\Local\conda\conda\envs\tensorflow\u env\lib\site packages\keras\engine\sequential.py”,第221行,内部版本
x=层(x)
文件“C:\Users\nle5266\AppData\Local\conda\conda\envs\tensorflow\u env\lib\site packages\keras\engine\base\u layer.py”,第457行,在调用中__
输出=自调用(输入,**kwargs)
文件“C:\Users\nle5266\AppData\Local\conda\conda\envs\tensorflow\u env\lib\site packages\keras\layers\wrappers.py”,第248行,在调用中
y=self.layer.call(输入,**kwargs)
调用中第171行的文件“C:\Users\nle5266\AppData\Local\conda\conda\envs\tensorflow\u env\lib\site packages\keras\layers\convolutional.py”
扩张率=自身扩张率)
conv2d中的文件“C:\Users\nle5266\AppData\Local\conda\conda\envs\tensorflow\u env\lib\site packages\keras\backend\tensorflow\u backend.py”第3650行
数据_格式=tf_数据_格式)
文件“C:\Users\nle5266\AppData\Local\conda\conda\envs\tensorflow\u env\lib\site packages\tensorflow\python\ops\nn\u ops.py”,第779行,卷积格式
数据格式=数据格式)
文件“C:\Users\nle5266\AppData\Local\conda\conda\envs\tensorflow\u env\lib\site packages\tensorflow\python\ops\nn\u ops.py”,第828行,在uu init中__
输入通道尺寸=输入形状[num\u空间尺寸+1]
文件“C:\Users\nle5266\AppData\Local\conda\conda\envs\tensorflow\u env\lib\site packages\tensorflow\python\framework\tensor\u shape.py”,第616行,在u getitem中__
返回自我。_变暗[键]
索引器:列表索引超出范围
通过谷歌搜索,我发现这类问题通常是由于时间分布的conv2D层的输入形状造成的,该层应该是一个4元组。我尝试了
(无,n_点,n_点,1)
,但没有成功

我在tensorflow 1.12.0中使用keras 2.2.4。我试图将tensorflow升级到昨晚,但没有解决问题