检查目标时出错:预期density_34具有2维,但数组的形状为(64,10,2)

时间:2019-11-24 23:49:03

标签: keras conv-neural-network data-augmentation

我看到已经回答了类似的问题,这使我意识到输入不是模型期望的结果,但是我无处找不到如何纠正这个问题。

我的问题是为什么期望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)

1 个答案:

答案 0 :(得分:1)

这是一个多类分类问题,因此您的输出层应使用softmax而不是Sigmoid。尝试将输出图层上的activation='sigmoid'更改为activation='softmax'

请查看here,以获取有关多类与多标签分类及其对应的激活和丢失功能的更多信息。

您还通过除以255以及在rescale=1./255中设置ImageDataGenerator来缩放数据两次。您应该只能重新缩放。

数据重塑不正确。像这样

train_images.reshape(-1,img_width, img_height,img_channels) 应该可以使用img_width和img_height为28,img_channels为1的地方。