【发布时间】:2017-10-22 16:12:50
【问题描述】:
通过使用 Keras 的 VGG 16,我正在尝试运行三类分类问题,代码如下:
import numpy as np
from keras.preprocessing.image import ImageDataGenerator
from keras.models import Sequential
from keras.layers import Dropout, Flatten, Dense
from keras import applications
from keras.optimizers import SGD
from keras import backend as K
K.set_image_dim_ordering('tf')
img_width, img_height = 48, 48
top_model_weights_path = 'vgg16_1.h5'
train_data_dir = 'data6/train'
validation_data_dir = 'data6/validation'
nb_train_samples = 400
nb_validation_samples = 100
epochs = 10
batch_size = 32
def save_bottlebeck_features():
datagen = ImageDataGenerator(rescale=1. / 255)
model = applications.VGG16(include_top=False, weights='imagenet', input_shape=(48, 48, 3))
generator = datagen.flow_from_directory(
train_data_dir,
target_size=(img_width, img_height),
batch_size=batch_size,
class_mode='categorical',
shuffle=False)
bottleneck_features_train = model.predict_generator(
generator, nb_train_samples // batch_size)
np.save(open('bottleneck_features_train', 'wb'),bottleneck_features_train)
generator = datagen.flow_from_directory(
validation_data_dir,
target_size=(img_width, img_height),
batch_size=batch_size,
class_mode='categorical',
shuffle=False)
bottleneck_features_validation = model.predict_generator(
generator, nb_validation_samples // batch_size)
np.save(open('bottleneck_features_validation', 'wb'),bottleneck_features_validation)
def train_top_model():
train_data = np.load(open('bottleneck_features_train', 'rb'))
train_labels = np.array(([0]*(nb_train_samples // 3) + [1]*(nb_train_samples // 3) +
[2]*(nb_train_samples // 3)))
validation_data = np.load(open('bottleneck_features_validation', 'rb'))
validation_labels = np.array([0]*(nb_validation_samples // 3) + [1]*(nb_validation_samples // 3) +
[2]*(nb_validation_samples // 3))
model = Sequential()
model.add(Flatten(input_shape=train_data.shape[1:]))
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(3, activation='softmax'))
sgd = SGD(lr=1e-2, decay=0.00371, momentum=0.9, nesterov=False)
model.compile(optimizer=sgd,
loss='categorical_crossentropy', metrics=['accuracy'])
model.fit(train_data, train_labels,
epochs=epochs,
batch_size=batch_size,
validation_data=(validation_data, validation_labels))
model.save_weights(top_model_weights_path)
save_bottlebeck_features()
train_top_model()
运行代码,我得到了错误:
检查目标时出错:预期 dense_20 具有形状 (None, 3) 但得到了 形状为 (1200, 1) 的数组
请告诉我我必须对代码进行哪些更改才能使其正常运行。我正在使用带有 Python 3.5.2 的 Anaconda,在 Windows 机器上运行。
【问题讨论】:
标签: python keras multiclass-classification