具有Keras的神经网络ValueError

时间:2018-05-28 07:58:48

标签: python-3.x keras convolutional-neural-network

我必须用keras训练一个神经网络。为此我使用了一些具有以下形状的测试数据:

class NeuralNetwork:
@staticmethod
def Build(Width, Depth, Classes, Drop = 0.5):
    Model = Sequential()
    Model.add(Conv1D(filters = 32, 
                    kernel_size = 5,
                    input_shape = (Width, Depth)
    ))

    Model.add(Activation("relu"))
    Model.add(MaxPooling1D(pool_size = 2,
                            strides = 2
    ))

    Model.add(Conv1D(filters = 64, 
                    kernel_size = 3
    ))
    Model.add(Activation("relu"))
    Model.add(MaxPooling1D(pool_size = 2,
                            strides = 2
    ))

    Model.add(Flatten())
    Model.add(Dense(1024))
    Model.add(Dropout(Drop))
    Model.add(Dense(Classes))
    Model.add(Activation("softmax"))

    return Model

这个网络架构:

ValueError: Error when checking target: expected activation_3 to have shape (12,) but got array with shape (1,)

但是当我尝试训练我的模型时,我遇到了这个错误:

print("[INFO] Train model...")
self.__Model = NeuralNetwork.Build(90, 561, 12)
plot_model(self.__Model, show_layer_names = True, show_shapes = True)
self.__Model.compile(loss = "binary_crossentropy", optimizer  = Adam(lr = self.__Learnrate), metrics = ["accuracy"])
self.__Model.fit(x_Train, 
                    y_Train, 
                    validation_data = (x_Test, y_Test), 
                    batch_size = self.__BatchSize,
                    epochs = self.__Epochs, 
                    verbose = 1
)

我使用此代码进行培训:

├── robot
│    ├── round
│    │       ├── asset-20@2x.png
│    │       ├── asset-30@2x.png
│    │       ├── asset-64@2x.png
│    │       └── asset-128@2x.png
│    └── square
│            ├── asset-20@2x.png
│            ├── asset-30@2x.png
│            ├── asset-64@2x.png
│            └── asset-128@2x.png
├── plane
│    ├── round
│    │       ├── asset-20@2x.png
│    │       ├── asset-30@2x.png
│    │       ├── asset-64@2x.png
│    │       └── asset-128@2x.png
│    └── square
│            ├── asset-20@2x.png
│            ├── asset-30@2x.png
│            ├── asset-64@2x.png
│            └── asset-128@2x.png

我没有得到此错误的来源。我用tensorflow测试整个代码,它工作正常。但是我对keras的重新设计做错了。

感谢您提示或其他...

1 个答案:

答案 0 :(得分:0)

看起来你混淆了目标和你的损失功能。我猜你的目标是你的班级y = [3, 5, 6, ...]的整数标签,你最多有12个班级。在这种情况下,您的损失应该是sparse_categorical_crossentropy,因为您想要预测12个互斥类中的1个。

错误表明您输出的分布超过12个类但只提供单个目标。像out = [0.2, 0.5, 0.1, ...]y = [2]之类的东西,这是(12,)和(1,)之间的形状不匹配。稀疏分类将目标标签转换为单热矢量,因此它变为y = [0,0,1,0,...]

相关问题