Keras 模型溢出未知错误 |(索引错误:列出索引超出范围)



我正在创建一个CNN鉴别器模型来验证gan的音频。它从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:UsersMrGrimodAppDataLocalProgramsPythonPython36libsite-packageskerasenginetopology.py", line 603, in __call__
output = self.call(inputs, **kwargs)
File "C:UsersMrGrimodAppDataLocalProgramsPythonPython36libsite-packageskerasenginetopology.py", line 2061, in call
output_tensors, _, _ = self.run_internal_graph(inputs, masks)
File "C:UsersMrGrimodAppDataLocalProgramsPythonPython36libsite-packageskerasenginetopology.py", line 2212, in run_internal_graph
output_tensors = _to_list(layer.call(computed_tensor, **kwargs))
File "C:UsersMrGrimodAppDataLocalProgramsPythonPython36libsite-packageskerasmodels.py", line 546, in call
return self.model.call(inputs, mask)
File "C:UsersMrGrimodAppDataLocalProgramsPythonPython36libsite-packageskerasenginetopology.py", line 2061, in call
output_tensors, _, _ = self.run_internal_graph(inputs, masks)
File "C:UsersMrGrimodAppDataLocalProgramsPythonPython36libsite-packageskerasenginetopology.py", line 2212, in run_internal_graph
output_tensors = _to_list(layer.call(computed_tensor, **kwargs))
File "C:UsersMrGrimodAppDataLocalProgramsPythonPython36libsite-packageskeraslayersconvolutional.py", line 156, in call
dilation_rate=self.dilation_rate[0])
File "C:UsersMrGrimodAppDataLocalProgramsPythonPython36libsite-packageskerasbackendtensorflow_backend.py", line 3151, in conv1d
data_format=tf_data_format)
File "C:UsersMrGrimodAppDataLocalProgramsPythonPython36libsite-packagestensorflowpythonopsnn_ops.py", line 750, in convolution
name=name, data_format=data_format)
File "C:UsersMrGrimodAppDataLocalProgramsPythonPython36libsite-packagestensorflowpythonopsnn_ops.py", line 796, in __init__
input_channels_dim = input_shape[num_spatial_dims + 1]
File "C:UsersMrGrimodAppDataLocalProgramsPythonPython36libsite-packagestensorflowpythonframeworktensor_shape.py", line 521, in __getitem__
return self._dims[key]
IndexError: list index out of range

解决方案是将输入张量重塑为正确的 Conv1D 输入形状:(-1, 214161, 1(

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

上面显示的解决方案让你遇到一个问题,因为tf.reshape返回的对象不是Keras张量,而是没有_keras_history标志的标准张量。我的建议是补充:

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

而是将上面的解决方案应用于您的模型。