【问题标题】:Error when checking target: expected dense_18 to have shape (1,) but got array with shape (10,)检查目标时出错:预期 dense_18 的形状为 (1,) 但得到的数组的形状为 (10,)
【发布时间】:2019-10-16 13:49:49
【问题描述】:
  Y_train = to_categorical(Y_train, num_classes = 10)#
    random_seed = 2
    X_train,X_val,Y_train,Y_val = train_test_split(X_train, Y_train, test_size = 0.1, random_state=random_seed)
    Y_train.shape
    model = Sequential()

    model.add(Flatten())
    model.add(Dense(64, activation='relu'))
    model.add(Dense(128, activation='relu'))
    model.add(Dense(10, activation='softmax'))
    model.compile(optimizer = 'adam', loss = 'sparse_categorical_crossentropy',metrics=['accuracy'])

    model.fit(X_train, Y_train, batch_size = 86, epochs = 3,validation_data = (X_val, Y_val), verbose =2)

我必须将 MNIST 数据分为 10 个类别。我正在将 Y_train 转换为一个热编码数组。我已经经历了许多答案,但没有一个有帮助。请在这方面指导我,因为我是 ML 和神经网络的新手。

【问题讨论】:

    标签: tensorflow machine-learning neural-network


    【解决方案1】:

    似乎没有必要在第一层使用model.add(Flatten())。除了这样做,您可以使用具有特定输入大小的密集层,例如:model.add(Dense(64, input_shape=your_input_shape, activation="relu")

    为确保由于层而发生此问题,您可以检查 to_categorical() 函数是否单独与 jupyter notebook 一起使用。

    更新答案

    在模型之前,你应该重塑你的模型。在那种情况下,28*28 到 784。

    train_images = train_images.reshape((-1, 784))
    test_images = test_images.reshape((-1, 784))
    

    我还建议对可以通过简单地将图像划分为 255 来完成的数据进行归一化

    在这一步之后,您应该创建模型。

    model = Sequential([
    Dense(64, activation='relu', input_shape=(784,)),
    Dense(64, activation='relu'),
    Dense(10, activation='softmax'),
    ])
    

    你有没有注意到input_shape=(784,)这是你扁平化输入的形状。

    最后一步,编译和拟合。

    model.compile(
    optimizer='adam',
    loss='categorical_crossentropy',
    metrics=['accuracy'],
    )
    
    model.fit(
    train_images,
    train_labels,
    epochs=10,
    batch_size=16,
    )
    

    您所做的只是将输入层展平,而没有向网络提供输入。这就是您遇到问题的原因。关键是您应该手动重塑您的输入并使用参数input_shape 前馈到Dense()

    【讨论】:

    • 我尝试添加一个model.Dense,输入形状为(10,)但是我收到'检查输入时出错:预期dense_42_input有2维,但得到了形状为(34020、28、 28, 1) '
    • @shreyanshupadhyay,我会更新我的答案以更清楚。
    • 感谢您的深入解释
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-21
    • 1970-01-01
    • 2018-08-29
    • 2019-08-02
    • 2019-07-07
    • 2020-09-03
    • 2020-03-13
    相关资源
    最近更新 更多