代码之家  ›  专栏  ›  技术社区  ›  Kampi

Keras神经网络值错误

  •  0
  • Kampi  · 技术社区  · 6 年前

    我得用角膜训练神经网络。为此,我使用以下形状的一些测试数据:

     print("     Training data: {}".format(x_Train.shape))
     print("     Training data: {}".format(y_Train.shape))
     print("     Test data: {}".format(x_Test.shape))
     print("     Test data: {}".format(y_Test.shape))
    
     ....
    
     Training data: (128, 90, 561)
     Training data: (128,)
     Test data: (43, 90, 561)
     Test data: (43,)
    

    这种网络架构:

    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
    )
    

    我不知道这个错误的来源。我用TensorFlow测试了整个代码,它工作得很好。但是我做了一些错误的重新设计与喀拉斯。

    谢谢你的提示或其他什么…

    1 回复  |  直到 6 年前
        1
  •  0
  •   nuric    6 年前

    看起来你混淆了目标和你的损失函数。我猜你的目标是你班的整数标签 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,...]