【发布时间】:2020-03-08 22:00:13
【问题描述】:
我正在实现一个具有数据增强功能的两类 cnn,但是除非输出层由单个神经元组成,否则网络总是会一直引发“预期形状错误”。这是我的代码。
from keras.models import Sequential
from keras.models import Model
from keras.layers import Dense, Activation
from keras.preprocessing.image import ImageDataGenerator
from keras.optimizers import Adam
from keras.layers import Dense, Conv2D, MaxPooling2D , Flatten, Dropout
import keras
from keras import losses
from keras import backend as K
from keras.utils import to_categorical
from matplotlib.pyplot import imread, imshow, subplots, show
import numpy as np
def my_model(input_shape, opt, no_of_class):
model = Sequential()
model.add(Conv2D(32, (3, 3), activation='relu', input_shape=input_shape))
model.add(Conv2D(32, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Flatten())
model.add(Dense(256, activation='relu'))
model.add(Dense(no_of_class, activation='softmax'))
model.compile(optimizer=opt, loss='binary_crossentropy', metrics=['accuracy'])
model.summary()
return model
PATH="C:\\Users\\****\\Desktop\\****\\****\\data\\poroxity\\"
train_data=PATH+'train'
validation_data=PATH+'validation'
no_of_class=2
training_samples=251
validation_samples=108
epochs=50
batch_size=16
img_width, img_height = 224, 224
opt = Adam(lr=0.001)
if K.image_data_format() == 'channels_first':
input_shape = (3, img_width, img_height)
else:
input_shape = (img_width, img_height, 3)
train_datagen=ImageDataGenerator(
rotation_range=90,
vertical_flip=True,
width_shift_range=0.3, fill_mode='wrap',
rescale=1./255,
shear_range=0.2,
horizontal_flip=True)
validation_datagen=ImageDataGenerator(rescale=1./255)
# validation and training iterators preparing loaded images from the directory
train_it = train_datagen.flow_from_directory(
train_data,
target_size=(img_height, img_width),
class_mode='binary',
batch_size=batch_size,
shuffle=True,
color_mode='rgb',
seed=42,
save_to_dir=PATH+'augmented',
save_prefix='poroxity_aug',
save_format='jpeg'
)
validation_it = validation_datagen.flow_from_directory(
validation_data,
target_size=(img_height, img_width),
class_mode='binary',
batch_size=1)
model=my_model(input_shape, opt, no_of_class)
model.fit_generator(
generator=train_it,
epochs=epochs,
verbose=1,
steps_per_epoch=train_it.n // train_it.batch_size,
validation_data=validation_it,
validation_steps=validation_it.n // validation_it.batch_size,
)
ValueError: 检查目标时出错:预期dense_2 的形状为(2,),但得到的数组的形状为(1,)
一些输出
找到属于 2 个类别的 251 张图片。 找到属于 2 个类别的 108 个图像。 训练批次形状:(16, 224, 224, 3) 标签批次形状:(16,) 批次中的标签:[0. 0. 0. 0. 0. 0. 0. 1. 0. 0. 0. 1. 1. 0. 0. 1.] 验证批次形状:(1, 224, 224, 3) 标签批次形状:(1,) 批次中的标签:[0.] 输入形状:(224, 224, 3)
【问题讨论】:
标签: python keras deep-learning