簡體   English   中英

Keras模型泄漏出未知錯誤| (IndexError:列表索引超出范圍)

[英]Keras model spills out unknown error | (IndexError: list index out of range)

我正在創建一個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:\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

解決方案是將輸入張量整形為適當的Conv1D輸入形狀:(-1,214161,1)

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

上面顯示的解決方案使您遇到問題,因為tf.reshape返回的對象不是Keras張量,而是沒有_keras_history標志的標准張量。 我的建議是添加:

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

而是上面模型的解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM