当前位置: 首页 > 知识库问答 >
问题:

Keras input shape抛出值错误,预计为4d,但得到了一个形状为(60000,28,28)的数组

邹铭
2023-03-14
(x_train, y_train), (x_test, y_test) = tf.keras.datasets.fashion_mnist.load_data()
x_train = x_train.astype('float32') / 255
x_test = x_test.astype('float32') / 255

x_train.shape #Shape is (60000, 28, 28)

然后模型确定输入形状为28,28,1,因为60k是样本。

model2 = tf.keras.Sequential()
# Must define the input shape in the first layer of the neural network
model2.add(tf.keras.layers.Conv2D(filters=64, kernel_size=2, padding='same', activation='relu', input_shape=(28,28,1))) 
model2.add(tf.keras.layers.MaxPooling2D(pool_size=2))
model2.add(tf.keras.layers.Dropout(0.3))
model2.add(tf.keras.layers.Conv2D(filters=32, kernel_size=2, padding='same', activation='relu'))
model2.add(tf.keras.layers.MaxPooling2D(pool_size=2))
model2.add(tf.keras.layers.Dropout(0.3))
model2.add(tf.keras.layers.Flatten())
model2.add(tf.keras.layers.Dense(256, activation='relu'))
model2.add(tf.keras.layers.Dropout(0.5))
model2.add(tf.keras.layers.Dense(10, activation='softmax'))
model2.compile(loss='categorical_crossentropy',
             optimizer='adam',
             metrics=['accuracy'])
model2.fit(x_train,
         y_train,
         batch_size=64,
         epochs=25,)

我得到错误:值错误:检查输入时的错误:预期conv2d_19_input有4个维度,但得到了具有形状(60000, 28, 28)的数组

就像每次我试图理解输入形状时一样,我会更加困惑。就像我现在对conv2d和dense的输入形状感到困惑一样。无论如何,为什么这是错误的?

共有2个答案

吉毅
2023-03-14

缺少通道维度(值为1),可以通过重塑阵列来轻松更正:

x_train = x_train.reshape((-1, 28, 28, 1))
x_test = x_test.reshape((-1, 28, 28, 1))
商正诚
2023-03-14

是的,这是正确的。参数input\u shape准备取3个值。但是,函数Conv2D需要4D数组作为输入,包括:

  1. 样本数量

而函数load_data()是一个由宽度、高度和样本数组成的3D数组。

您可以期望通过简单的重塑来解决问题:

train_X = train_X.reshape(-1, 28,28, 1)
test_X = test_X.reshape(-1, 28,28, 1)

keras文件中更好的定义:

输入形状:具有形状的4D张量:(批次、通道、行、通道)如果data_format是“channels_first”,或具有形状的4D张量:(批次、行、通道)如果data_format是“channels_last”。

 类似资料:
  • 我得到这个错误: ValueError:检查输入时出错:预期序列有3个维度,但得到了形状为(500400)的数组 以下是我正在使用的代码。 输出(这里每行有500行): 代码: 有什么见解吗?

  • 问题内容: 我正在尝试使用学习的.h5文件进行预测。学习模型如下。 我将输入的形式编写如下。 我以为形状正确,但是发生以下错误。 ValueError:检查时出错:预期density_1_input的形状为(3,),但数组的形状为(1,) 的形状显然是,但上述错误并没有消失(数据来自的CSV文件)。 我怎么解决这个问题? 问题答案: x的形状显然是,但上述误差仍在继续。 您是对的,但这 不是 ke

  • 我正在运行一个CNN,检查图像,但不分类。事实上,输出层是一个密集层,其参数为1d中标签中图像的大小。 如下面的代码所示,我使用model.fit_generator()而不是model.fit,当开始训练模型时,会出现以下错误: 为什么这是一个错误?我的密度的输出是一个19316元素的数组,为什么它期望它有一个(1,)的形状? 此处还附上了模型的摘要: conv2d_28(Conv2D)(无,2

  • 我想基于使用TfidfVectorizer的矢量化单词进行多标签分类(20个不同的输出标签)。我已经设置了39974行,每行包含2739个项目(0或1)。 我想使用Keras模型对这些数据进行分类,该模型将包含1个隐藏层(~ 20个节点,激活='relu'),输出层等于20个可能的输出值(激活='softmax'以选择最佳拟合)。 以下是我目前的代码: 但有错误: ValueError:检查输入时

  • 嗨,我是改装2.0库的新手,我在解析一些json时遇到了问题。我在Stackoverflow上看了一些其他的解决方案,但我的问题运气不佳。我试图用改装2.0从Android系统调用一个api。但它抛出了预期的错误BEGIN_ARRAY但BEGIN_OBJECT。 我对web api的回应是: 这就是我的模型类: 这是我的界面: 这就是我打电话的方式:

  • 问题内容: JSON对象示例如下所示: 假设通过链接www.domain.com访问上述对象,并​​且我有以下用于表示数据的类 并且地址类如下: 当我尝试跑步时 我收到以下错误: 预期为BEGIN_ARRAY,但在上述代码行中为字符串。我不确定我设置班级的方式是否有问题。注意:我正在使用一个数组(LocationData []数据),因为该服务返回了多个位置,尽管我刚刚在上面显示的示例中包括了一个