Модель Keras вываливается неизвестная ошибка | (IndexError: список индексов вне диапазона) - PullRequest
0 голосов
/ 04 мая 2018

Я создаю модель дискриминатора CNN для проверки звука для gan . Он берет выходной тензор из генераторной части ГАН. Но по какой-то причине я получаю эту странную ошибку, которая даже не указывает номер строки, при использовании скомпилированной модели с тензором звука из генератора.

Код:

def build_audio_discriminator(audio_shape, num_classes):

    model = Sequential()

    model.add(Conv1D(32, kernel_size=(2), padding="same", input_shape=audio_shape))
    model.add(MaxPooling1D(pool_size=(2)))
    model.add(Dropout(0.25))
    model.add(Dense(128, activation='relu'))
    model.add(Dropout(0.25))
    model.add(Dense(128))

    model.summary()

    audio_shape_ = (None, audio_shape[1])
    audio = Input(shape=audio_shape_)

    # Extract feature representation
    features = model(audio)

    # Determine validity and label of the image
    validity = Dense(1, activation="sigmoid")(features)
    label = Dense(num_classes+1, activation="softmax")(features)

    return Model(audio, [validity, label])


# Build and compile the discriminator
#audio_shape: (31, 214161), num_classes: 1
audio_discriminator = build_audio_discriminator(audio_shape, num_classes)
audio_discriminator.compile(loss=losses, optimizer=optimizer, metrics=['accuracy'])

# audio: Tensor("model_4/sequential_4/activation_4/Softmax:0", shape=(?, 214161), dtype=float32)
audio_valid, audio_target_label = audio_discriminator(audio)

Ошибка:

Traceback (most recent call last):
  File "main.py", line 103, in <module>
    main()
  File "main.py", line 91, in main
    audio_valid, audio_target_label = audio_discriminator(audio)
  File "C:\Users\MrGrimod\AppData\Local\Programs\Python\Python36\lib\site-packages\keras\engine\topology.py", line 603, in __call__
    output = self.call(inputs, **kwargs)
  File "C:\Users\MrGrimod\AppData\Local\Programs\Python\Python36\lib\site-packages\keras\engine\topology.py", line 2061, in call
    output_tensors, _, _ = self.run_internal_graph(inputs, masks)
  File "C:\Users\MrGrimod\AppData\Local\Programs\Python\Python36\lib\site-packages\keras\engine\topology.py", line 2212, in run_internal_graph
    output_tensors = _to_list(layer.call(computed_tensor, **kwargs))
  File "C:\Users\MrGrimod\AppData\Local\Programs\Python\Python36\lib\site-packages\keras\models.py", line 546, in call
    return self.model.call(inputs, mask)
  File "C:\Users\MrGrimod\AppData\Local\Programs\Python\Python36\lib\site-packages\keras\engine\topology.py", line 2061, in call
    output_tensors, _, _ = self.run_internal_graph(inputs, masks)
  File "C:\Users\MrGrimod\AppData\Local\Programs\Python\Python36\lib\site-packages\keras\engine\topology.py", line 2212, in run_internal_graph
    output_tensors = _to_list(layer.call(computed_tensor, **kwargs))
  File "C:\Users\MrGrimod\AppData\Local\Programs\Python\Python36\lib\site-packages\keras\layers\convolutional.py", line 156, in call
    dilation_rate=self.dilation_rate[0])
  File "C:\Users\MrGrimod\AppData\Local\Programs\Python\Python36\lib\site-packages\keras\backend\tensorflow_backend.py", line 3151, in conv1d
    data_format=tf_data_format)
  File "C:\Users\MrGrimod\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\ops\nn_ops.py", line 750, in convolution
    name=name, data_format=data_format)
  File "C:\Users\MrGrimod\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\ops\nn_ops.py", line 796, in __init__
    input_channels_dim = input_shape[num_spatial_dims + 1]
  File "C:\Users\MrGrimod\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\framework\tensor_shape.py", line 521, in __getitem__
    return self._dims[key]
IndexError: list index out of range

1 Ответ

0 голосов
/ 06 мая 2018

Решение состояло в том, чтобы преобразовать входной Тензор в правильную форму ввода Conv1D: (-1, 214161, 1)

audio = tf.reshape(audio, [-1, 214161, 1])

Решение, показанное выше, позволяет вам столкнуться с проблемой, поскольку объект, возвращаемый tf.reshape, является не тензором Кераса, а стандартным тензором без флага _keras_history . Я рекомендую добавить:

model.add(Reshape((214161, 1)))

вместо решения выше для вашей модели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...