Какова лучшая архитектура нейронной сети для отображения одного входного изображения на два выходных? - PullRequest
0 голосов
/ 15 января 2020

Я сгенерировал набор данных, используя EMNIST, который имеет один символ на изображение или два символа на изображение. Размер изображения составляет 28x56 (hxw)

Я в основном хочу предсказать один или два символа в данное изображение. Я не уверен, на какой архитектуре следовать, чтобы реализовать это. Существует 62 класса символов.

пример: - один символ два символа

Для одного символа y = [23]

Для двух символов y = [35,11]

Я попробовал следующее.

  1. Я попытался реализовать этот полный CT C, но я застрял в бесконечной потере, которая Я не смог исправить.
  2. Заполнил единичные истинные символы с помощью 62, чтобы отметить пустой символ, и обучил CNN со следующими слоями.

print ()

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

y_train = sequence.pad_sequences(y_train, padding='post', value = 62)
y_test = sequence.pad_sequences(y_test,padding='post', value = 62)

X_train = X_train/255.0
X_test = X_test/255.0

input_shape = (28, 56, 1)
model = Sequential()

model.add(Conv2D(filters=72, kernel_size=(11,11), padding = 'same', activation='relu',input_shape=input_shape))
model.add(MaxPooling2D(pool_size=(2,2),strides=2))

model.add(Conv2D(filters=144, kernel_size=(7,7) , padding = 'same', activation='relu'))

model.add(Conv2D(filters=144, kernel_size=(3,3) , padding = 'same', activation='relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Flatten())
model.add(Dense(units=1024, activation='relu'))
model.add(Dropout(.5))
model.add(Dense(512, activation='relu'))
model.add(Dense(units=2, activation='relu'))

model.compile(loss='mse', optimizer='adam', metrics=['accuracy'])
model.summary()
batch_size = 128
steps = math.ceil(X_train.shape[0]/batch_size)

datagen = ImageDataGenerator(
        featurewise_center=False,  # set input mean to 0 over the dataset
        samplewise_center=False,  # set each sample mean to 0
        featurewise_std_normalization=False,  # divide inputs by std of the dataset
        samplewise_std_normalization=False,  # divide each input by its std
        zca_whitening=False,  # apply ZCA whitening
        rotation_range=0,  # randomly rotate images in the range (degrees, 0 to 180)
        zoom_range = 0.2, # Randomly zoom image
        width_shift_range=0.2,  # randomly shift images horizontally (fraction of total width)
        height_shift_range=0.1,  # randomly shift images vertically (fraction of total height)
        horizontal_flip=False,  # randomly flip images
        vertical_flip=False)

history = model.fit_generator(datagen.flow(X_train,y_train, batch_size=batch_size),
                              epochs = 6, validation_data = (X_test, y_test),
                              verbose = 1,steps_per_epoch=steps)

Мне удалось достичь точности около 90% для набора проверки. Однако, когда я передаю сгенерированное изображение, чтобы увидеть его прогноз, это несколько символов от правильной классификации. Что-то не так в том, как я создал модель или предварительно обработал данные?

1 Ответ

0 голосов
/ 28 января 2020

Я признал свою ошибку. Я попытался решить проблему с помощью метода регрессии, где проблема является проблемой классификации.

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