首页 > 解决方案 > CLDNN 编译和训练问题

问题描述

我在 Python 3 中运行 CLDNN 模型时遇到问题。我运行了 model.summary(),但没有发现问题。我收到 Keras 和 Tensorflow 之间的大小/整形错误。

下面是带有输出错误的代码。任何输入都会非常有用。

更新:重新格式化代码并将输出作为文本提供。

def cldnn():
    model = Sequential()
    
    #input layer
    model.add(keras.layers.InputLayer(input_shape=(2, 128, 1)))

    #first layer
    model.add(Conv2D(256, (1, 3), activation='relu', use_bias=True))
    model.add(Dropout(0.2))

    #second layer
    model.add(Conv2D(256, (2, 3), activation='relu', use_bias=True))
    
    #third layer
    model.add(Conv2D(80, (1, 3), activation='relu', use_bias=True))
    model.add(Dropout(0.2))

    #fourth layer
    model.add(Conv2D(80, (1, 3), activation='relu', use_bias=True))
    
    #reshape data
    model.add(Reshape((120,80)))

    #fifth layer
    model.add(LSTM(50, activation='tanh', return_sequences=True))  

    #sixth layer
    model.add(Dense(128,
                    activation='relu',
                    use_bias=True,
                    kernel_initializer='normal'))

    #output layer
    model.add(Dense(10, activation='softmax', use_bias=True))
    
    model.summary()

    return model

    #Create instance of CNN model graph
    cldnn = cldnn()

    #Compile model using an appropriate loss and optimizer algorithm
    cldnn.compile(loss='categorical_crossentropy',
                  optimizer='adam',
                  metrics=['accuracy'])

    cldnn_mdata = cldnn.fit(data_train, labels_train,
                                    validation_data=(data_test, labels_test),
                                    epochs=15,
                                    batch_size=1024,
                                    shuffle=True)

    #Print accuracy of model on testing set after training 

    scores = cldnn.evaluate(data_test, labels_test)

    print("Accuracy: %.2f%%" %(scores[1]*100))

#OUTPUT

Model: "sequential_4"
_________________________________________________________________ 
Layer (type)                 Output Shape              Param #   =================================================================
conv2d_16 (Conv2D)           (None, 2, 126, 256)       1024      
_________________________________________________________________
dropout_8 (Dropout)          (None, 2, 126, 256)       0         
_________________________________________________________________
conv2d_17 (Conv2D)           (None, 1, 124, 256)       393472    
_________________________________________________________________
conv2d_18 (Conv2D)           (None, 1, 122, 80)        61520     
_________________________________________________________________
dropout_9 (Dropout)          (None, 1, 122, 80)        0         
_________________________________________________________________
conv2d_19 (Conv2D)           (None, 1, 120, 80)        19280     
_________________________________________________________________
reshape_3 (Reshape)          (None, 120, 80)           0         
_________________________________________________________________
lstm_3 (LSTM)                (None, 120, 50)           26200     
_________________________________________________________________
dense_6 (Dense)              (None, 120, 128)          6528      
_________________________________________________________________
dense_7 (Dense)              (None, 120, 10)           1290      
=================================================================
Total params: 509,314
Trainable params: 509,314
Non-trainable params: 0
  

_________________________________________________________________
Epoch 1/15
WARNING:tensorflow:Model was constructed with shape (None, 2, 128, 1) for input KerasTensor(type_spec=TensorSpec(shape=(None, 2, 128, 1), dtype=tf.float32, name='input_5'), name='input_5', description="created by layer 'input_5'"), but it was called on an input with incompatible shape (None, 28, 28, 1).
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-9-0e0ee3a37c65> in <module>()
     52                                     epochs=15,
     53                                     batch_size=1024,
---> 54                                     shuffle=True)
     55 
     56 #Print accuracy of model on testing set after training

9 frames
/usr/local/lib/python3.7/dist-packages/tensorflow/python/framework/func_graph.py in wrapper(*args, **kwargs)
    992           except Exception as e:  # pylint:disable=broad-except
    993             if hasattr(e, "ag_error_metadata"):
--> 994               raise e.ag_error_metadata.to_exception(e)
    995             else:
    996               raise

ValueError: in user code:

    /usr/local/lib/python3.7/dist-packages/keras/engine/training.py:853 train_function  *
        return step_function(self, iterator)
    /usr/local/lib/python3.7/dist-packages/keras/engine/training.py:842 step_function  **
        outputs = model.distribute_strategy.run(run_step, args=(data,))
    /usr/local/lib/python3.7/dist-packages/tensorflow/python/distribute/distribute_lib.py:1286 run
        return self._extended.call_for_each_replica(fn, args=args, kwargs=kwargs)
    /usr/local/lib/python3.7/dist-packages/tensorflow/python/distribute/distribute_lib.py:2849 call_for_each_replica
        return self._call_for_each_replica(fn, args, kwargs)
    /usr/local/lib/python3.7/dist-packages/tensorflow/python/distribute/distribute_lib.py:3632 _call_for_each_replica
        return fn(*args, **kwargs)
    /usr/local/lib/python3.7/dist-packages/keras/engine/training.py:835 run_step  **
        outputs = model.train_step(data)
    /usr/local/lib/python3.7/dist-packages/keras/engine/training.py:787 train_step
        y_pred = self(x, training=True)
    /usr/local/lib/python3.7/dist-packages/keras/engine/base_layer.py:1037 __call__
        outputs = call_fn(inputs, *args, **kwargs)
    /usr/local/lib/python3.7/dist-packages/keras/engine/sequential.py:369 call
        return super(Sequential, self).call(inputs, training=training, mask=mask)
    /usr/local/lib/python3.7/dist-packages/keras/engine/functional.py:415 call
        inputs, training=training, mask=mask)
    /usr/local/lib/python3.7/dist-packages/keras/engine/functional.py:550 _run_internal_graph
        outputs = node.layer(*args, **kwargs)
    /usr/local/lib/python3.7/dist-packages/keras/engine/base_layer.py:1037 __call__
        outputs = call_fn(inputs, *args, **kwargs)
    /usr/local/lib/python3.7/dist-packages/keras/layers/core.py:539 call
        result.set_shape(self.compute_output_shape(inputs.shape))
    /usr/local/lib/python3.7/dist-packages/keras/layers/core.py:530 compute_output_shape
        self.target_shape)
    /usr/local/lib/python3.7/dist-packages/keras/layers/core.py:518 _fix_unknown_dimension
        raise ValueError(msg)

    ValueError: total size of new array must be unchanged, input_shape = [27, 20, 80], output_shape = [120, 80]

标签: pythontensorflowkeras

解决方案


推荐阅读