检查目标时出错:预期 dense_34 有 2 个维度,但得到形状为 (64, 10, 2) 的数组
Error when checking target: expected dense_34 to have 2 dimensions, but got array with shape (64, 10, 2)
我看到类似的问题得到了回答,这帮助我意识到输入不是模型所期望的,但我无法找到如何纠正这个问题。
我的问题是为什么它需要 2 个维度,我可以对我的代码做些什么来使这项工作分类为 10 个不同的 类?
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
Import Libraries Section
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
from keras.datasets import fashion_mnist
from keras import models
from keras import layers
from keras.utils import to_categorical
from keras.preprocessing.image import ImageDataGenerator
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
Load Data Section
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
(train_images, train_labels), (test_images, test_labels) = fashion_mnist.load_data()
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
Parameters Section
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
train_number_images = train_images.shape[0]
test_number_images = test_images.shape[0]
train_x_image_size = train_images.shape[1]
train_y_image_size = train_images.shape[2]
test_x_image_size = test_images.shape[1]
test_y_image_size = test_images.shape[2]
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
Pretreat Data Section
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
train_images = train_images.reshape((train_number_images, train_x_image_size , train_y_image_size, 1))
train_images = train_images.astype('float32') / 255
test_images = test_images.reshape((test_number_images, test_x_image_size , test_y_image_size, 1))
test_images = test_images.astype('float32') / 255
train_labels = to_categorical(train_labels)
test_labels = to_categorical(test_labels)
gen = ImageDataGenerator(
rescale=1./255,
rotation_range=40,
width_shift_range=0.2,
height_shift_range=0.2,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True)
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
Define Model Section
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
model2 = models.Sequential()
model2.add(layers.Conv2D(32, (3,3), activation='relu', input_shape=(28, 28, 1)))
model2.add(layers.MaxPooling2D((2,2)))
model2.add(layers.Conv2D(64, (3,3), activation='relu'))
model2.add(layers.MaxPooling2D((2,2)))
model2.add(layers.Conv2D(64, (3,3), activation='relu'))
model2.add(layers.MaxPooling2D((2,2)))
model2.add(layers.Flatten())
model2.add(layers.Dense(64, activation='relu'))
model2.add(layers.Dense(10, activation='sigmoid'))
model2.compile(optimizer='adam',
loss='categorical_crossentropy',
metrics=['accuracy'])
history2 = model2.fit_generator(gen.flow(train_images, train_labels, 64), epochs=15,
steps_per_epoch=len(train_images) // 64)
这是一个多class class化问题,因此您的输出层应该使用 softmax 而不是 sigmoid。尝试将输出层上的 activation='sigmoid'
更改为 activation='softmax'
。
查看 here 了解有关多class 与多标签 class 化及其相应的激活函数和损失函数的更多信息。
您还通过除以 255 以及在 ImageDataGenerator
中设置 rescale=1./255
来将数据缩放两倍。你应该只重新缩放那些。
数据整形不正确。像这样
train_images.reshape(-1,img_width, img_height,img_channels)
其中 img_width 和 img_height 是 28,而 img_channels 是 1 应该可以。
我看到类似的问题得到了回答,这帮助我意识到输入不是模型所期望的,但我无法找到如何纠正这个问题。
我的问题是为什么它需要 2 个维度,我可以对我的代码做些什么来使这项工作分类为 10 个不同的 类?
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
Import Libraries Section
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
from keras.datasets import fashion_mnist
from keras import models
from keras import layers
from keras.utils import to_categorical
from keras.preprocessing.image import ImageDataGenerator
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
Load Data Section
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
(train_images, train_labels), (test_images, test_labels) = fashion_mnist.load_data()
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
Parameters Section
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
train_number_images = train_images.shape[0]
test_number_images = test_images.shape[0]
train_x_image_size = train_images.shape[1]
train_y_image_size = train_images.shape[2]
test_x_image_size = test_images.shape[1]
test_y_image_size = test_images.shape[2]
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
Pretreat Data Section
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
train_images = train_images.reshape((train_number_images, train_x_image_size , train_y_image_size, 1))
train_images = train_images.astype('float32') / 255
test_images = test_images.reshape((test_number_images, test_x_image_size , test_y_image_size, 1))
test_images = test_images.astype('float32') / 255
train_labels = to_categorical(train_labels)
test_labels = to_categorical(test_labels)
gen = ImageDataGenerator(
rescale=1./255,
rotation_range=40,
width_shift_range=0.2,
height_shift_range=0.2,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True)
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
Define Model Section
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
model2 = models.Sequential()
model2.add(layers.Conv2D(32, (3,3), activation='relu', input_shape=(28, 28, 1)))
model2.add(layers.MaxPooling2D((2,2)))
model2.add(layers.Conv2D(64, (3,3), activation='relu'))
model2.add(layers.MaxPooling2D((2,2)))
model2.add(layers.Conv2D(64, (3,3), activation='relu'))
model2.add(layers.MaxPooling2D((2,2)))
model2.add(layers.Flatten())
model2.add(layers.Dense(64, activation='relu'))
model2.add(layers.Dense(10, activation='sigmoid'))
model2.compile(optimizer='adam',
loss='categorical_crossentropy',
metrics=['accuracy'])
history2 = model2.fit_generator(gen.flow(train_images, train_labels, 64), epochs=15,
steps_per_epoch=len(train_images) // 64)
这是一个多class class化问题,因此您的输出层应该使用 softmax 而不是 sigmoid。尝试将输出层上的 activation='sigmoid'
更改为 activation='softmax'
。
查看 here 了解有关多class 与多标签 class 化及其相应的激活函数和损失函数的更多信息。
您还通过除以 255 以及在 ImageDataGenerator
中设置 rescale=1./255
来将数据缩放两倍。你应该只重新缩放那些。
数据整形不正确。像这样
train_images.reshape(-1,img_width, img_height,img_channels)
其中 img_width 和 img_height 是 28,而 img_channels 是 1 应该可以。