VGG 16ではKerasを使用しています。 :ターゲットチェックするときターゲットをチェックするときにエラーが発生しました:dense_20がシェイプ(なし、3)を持つと予想されましたが、シェイプ(1200,1)の配列を持っていました
エラー:
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を(なし、3)が、(1 1200)
形状と 配列を持っていません私はコードにどのような変更を加えてそれを機能させるかを教えてくださいイオン。私はPython 3.5.2でAnacondaを使用していて、Windowsマシン上で動作しています。
その有益な返信に感謝します。ところで、私は問題の解決策を見つけました。ケラスを使ったマルチクラス分類に必要なラベルを分類するのを忘れてしまった。私がしたことは、トレーニングラベルとバリデーションラベルに "to_categorical"を使用することでした。 – shiva