как изменить форму fashion_mnist - PullRequest
1 голос
/ 08 ноября 2019

Я загрузил набор данных Fahion_Mnist через "fashion_mnist.load_data ()" и попытался обучить нейронную сеть ResNet50. Но я не знаю, как изменить форму набора данных из (28,28,1) в (224,224,3), как это необходимо для ввода в ResNet.

Я использую Python 3, Keras 2.2.4

Это мой код:

from __future__ import absolute_import, division, print_function
import tensorflow as tf
from tensorflow import keras# Helper libraries
import numpy as np
import matplotlib.pyplot as plt
import time
from tensorflow.python.keras import backend as K
from tensorflow.python.keras.models import Model
from tensorflow.python.keras.layers import Flatten, Dense, Dropout
from tensorflow.python.keras.applications.resnet50 import ResNet50, preprocess_input
from tensorflow.python.keras.optimizers import Adam
from tensorflow.python.keras.preprocessing.image import ImageDataGenerator
from tensorflow.python.keras.preprocessing import image
from PIL import Image

fashion_mnist = keras.datasets.fashion_mnist
(train_images, train_labels), (test_images, test_labels) = fashion_mnist.load_data()

class_names = ['T-shirt/top', 'Trouser', 'Pullover', 'Dress', 'Coat','Sandal', 'Shirt', 'Sneaker', 'Bag', 'Ankle boot']

IMAGE_SIZE    = (224,224)
NUM_CLASSES   = 10
BATCH_SIZE    = 8  # try reducing batch size or freeze more layers if your GPU runs out of memory
FREEZE_LAYERS = 2  # freeze the first this many layers for training
NUM_EPOCHS    = 20
WEIGHTS_FINAL = 'model_fashion_resnet.h5'

train_images = preprocess_input(train_images)
train_images = np.expand_dims(train_images, axis=0)

train_labels = preprocess_input(train_labels)
train_labels = np.expand_dims(train_labels, axis=0)

test_images = preprocess_input(test_images)
test_images = np.expand_dims(test_images, axis=0)

net = ResNet50(include_top=False, weights='imagenet', input_tensor=None,
           input_shape=(IMAGE_SIZE[0],IMAGE_SIZE[1],3))
x = net.output
x = Flatten()(x)
x = Dropout(0.5)(x)
output_layer = Dense(NUM_CLASSES, activation='softmax', name='softmax')(x)
model = Model(inputs=net.input, outputs=output_layer)
for layer in model.layers[:FREEZE_LAYERS]:
    layer.trainable = False
for layer in model.layers[FREEZE_LAYERS:]:
    layer.trainable = True
model.compile(optimizer=Adam(lr=1e-5), loss='categorical_crossentropy', metrics=['accuracy'])
print(model.summary())


inizio=time.time()


datagen = ImageDataGenerator(
    featurewise_center=True,
    featurewise_std_normalization=True,
    rotation_range=20,
    width_shift_range=0.2,
    height_shift_range=0.2,
    horizontal_flip=True)



model.fit_generator(datagen.flow(train_images, train_labels, batch_size=BATCH_SIZE),
                steps_per_epoch=len(train_images) / BATCH_SIZE, epochs=NUM_EPOCHS)

И это то, что я получаю после запуска:

ValueError: Error when checking input: expected input_1 to have shape (224, 224, 3) but got array with shape (60000, 28, 28)

Как изменить изображения MNIST, чтобы они могли вводиться в нейронный ResNet50сеть

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...