IndexError: список индексов вне диапазона с Keras TimeDistributed Conv2D - PullRequest
0 голосов
/ 04 марта 2019

Я пытаюсь построить модель CNN-LSTM.Мой набор данных состоит из набора одноканальных изображений размером (n_spot, n_meas) = (100,102).В этом небольшом экземпляре у меня есть только 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

Погугливая, я понял, что такого рода проблемы обычно связаны с формой ввода распределенного временислой conv2D, который должен 4-кортеж.Я попытался с (None,n_spot,n_meas,1) безуспешно.

Я использую keras 2.2.4 с tenorflow 1.12.0.Я пытался обновить tenorflow до последней ночи, но это не решило проблему.

...