Keras: можно ли использовать слой Flatten в качестве входных данных для многослойной модели персептрона - PullRequest
0 голосов
/ 02 ноября 2018

Я пытаюсь использовать MLP для классификации изображений в Керасе. Мои коды:

from keras.preprocessing import sequence
from keras.models import Sequential
from keras.layers import Dense, Conv2D, MaxPooling2D, Dropout, Flatten
from keras.preprocessing.image import ImageDataGenerator

# Prepare data generators for train and test
SIZE = 32
train_datagen = ImageDataGenerator(
    rescale=1./255,
    shear_range=0.2,
    zoom_range=0.2,
    horizontal_flip=True,
    validation_split=0.2)

test_datagen = ImageDataGenerator(rescale=1./255)

train_generator = train_datagen.flow_from_directory(
    'train',
    target_size=(SIZE, SIZE),
    class_mode='categorical',
    batch_size=32,
    subset='training')

val_generator = train_datagen.flow_from_directory(
    'train',
    target_size=(SIZE, SIZE),
    class_mode='categorical',
    batch_size=32,
    subset='validation')

test_generator = test_datagen.flow_from_directory(
    'test',
    target_size=(SIZE, SIZE),
    class_mode='categorical',
    batch_size=32)

model_mlp = Sequential()
model_mlp.add(Flatten(input_shape=(32,32, 3)))
model_mlp.add(Dense(256, activation='relu'))
model_mlp.add(Dropout(0.5))
model_mlp.add(Dense(128, activation='relu'))
model_mlp.add(Dropout(0.5))
model_mlp.add(Dense(68, activation='softmax'))

# Compile
model_mlp.compile(optimizer='rmsprop',  # other choices: adam or SGD
              loss='categorical_crossentropy',
              metrics=['accuracy'])

print(model_mlp.summary())

history = model_mlp.fit_generator(
    train_generator,
    steps_per_epoch=100,
    epochs=100,
    validation_data=val_generator,
    validation_steps=100)

# Showing
show(history, model_mlp)

Можно ли использовать слой Flatten в качестве входных данных для многослойной модели персептрона, чтобы преобразовать изображение 32 * 32 * 3 в вектор, как указано выше? Спасибо

Есть проблемы с моими кодами? потому что accuracy меньше 5%, что слишком мало.

...