Как правильно настроить нейронную сеть для раскрашивания изображений в градациях серого? - PullRequest
1 голос
/ 16 апреля 2019

Я пытаюсь раскрасить изображения птиц из набора данных CIFAR-10. Постановка проблемы: X: (5000,32,32,1), где каждая запись представляет собой версию изображений птиц в оттенках серого Y: (5000,4096), который является одним массивом горячего кодирования. например, первый пиксель будет иметь [0,0,1,0], где 1 означает, какой цвет будет использоваться. Y - это просто свернутая версия всей горячей кодировки для каждого изображения.

Я следил за многими статьями, в которых реализована окраска серых изображений, но моя потеря / точность остается высокой / низкой.

model = Sequential()
model.add(Convolution2D(32, (5, 5), strides=(1,1), input_shape=(32,32,1),padding='same', activation='relu'))
model.add(Dropout(0.2))

model.add(Convolution2D(32, (5, 5),activation='relu', padding='same' ))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Convolution2D(64, (5, 5), activation='relu', padding='same' ))
model.add(Flatten())

model.add(Dense(128))

model.add(Dense(4096, activation='softmax'))



# Compile model
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])

model.fit(Xtrain, Ytrain, validation_data=(val_data,Ytest),epochs=5, batch_size=32)

Я ожидаю, что точность будет улучшаться по мере прохождения эпох, но она продолжает ухудшаться.

1 Ответ

0 голосов
/ 17 апреля 2019

Вам нужно будет немного поработать над архитектурой (о чем вы, похоже, думали), но чтобы просто поставить ее в черный ящик, вы можете добавить серые изображения и нарисовать цветные изображения. Почему нет?

Используйте model.summary (), чтобы убедиться, что ваши фигуры вам по вкусу. (См. Ниже)

Я не тестировал этот код, но он должен быть довольно близко ...

model = Sequential()

model.add(InputLayer(input_shape=(32,32,1)))

model.add(Conv2D(32,(5,5),strides=(1,1), activation='relu', padding='same'))
model.add(SpatialDropout2D(rate=0.2)) # holla at this layer
model.add(Conv2D(32,(5,5), activation='relu', padding='same'))
model.add(MaxPool2D((2,2)))
model.add(Conv2D(64,(5,5),activation='relu',padding='same'))
model.add(Dense(128))

# have to upsample to get your height/width back from max pooling!
model.add(UpSampling2D((2,2)))

model.add(Conv2D(3,(2,2),activation='relu',padding='same'))
model.add(Activation('softmax'))


model.compile(optimizer='adam',loss='mse')
model.summary()

Вот вывод model.summary(). Выходной слой (32,32,3); 32 высота, 32 ширина, каналы. model summary [1] * * 1 010

Теперь просто тренируйте его с оттенками серого, как X, и оригиналами цвета, как Y. И опубликуйте результаты для любопытных!

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