Попытка создать полностью подключенную нейронную сеть для CIFAR-10 - PullRequest
1 голос
/ 13 марта 2019

Я относительный новичок, когда дело доходит до машинного обучения.

Я играл с Keras с TensorFlow в качестве бэкэнда и по какой-то причине я не получаю хорошую точность, когда использую набор данных CIFAR-10.

Это мой код.

model = Sequential()

batch_size = 250

model.add(Dense(100, input_shape = (3072, ), activation='relu',
bias_initializer = 'RandomNormal',kernel_regularizer=regularizers.l2(.01)))


model.add(Dense(50))

model.add(Dense(10))

model.compile(optimizer=keras.optimizers.SGD(lr=0.004), 
loss='hinge', metrics=['categorical_accuracy'])

model.fit(x=X_train, y=utils.to_categorical(Y_Train, num_classes = 10), 
batch_size = batch_size, epochs = 100, validation_split = .4)

X_Train - это массив (50000, 3072) numpy, а Y_Train - (50000, 1) массив numpy.

РезультатЯ получил

потери: 1,1865

категорическая точность: 0,1696

val_loss: 1,1859

val_categorical_accuracy: 0,1668

в 100 эпохах.

Моя установка Ubuntu 18.04, Python 3.6, Numpy 1.16, Keras 2.2.4

Что-то не так в моем коде или тот факт, что полностью подключенная нейронная сеть - просто плохая настройкадля классификации изображений и нужно использовать сверточную нейронную сеть?

1 Ответ

1 голос
/ 13 марта 2019

Существует ряд проблем с вашей моделью:

  • Слои 2 и 3 не имеют активации и поэтому являются линейными (бесполезными для классификации, в данном случае)

  • В частности, вам нужно активировать softmax на вашем последнем слое.Потеря не будет знать, что делать с линейным выходом.

  • Вы используете hinge убыток, когда вы должны использовать что-то вроде categorical_crossentropy.

То, что Джибин сказал о том, что ваша полностью подключенная модель недостаточно сложна, не соответствует действительности, вам не нужно много сложности, чтобы получить приличную точность на CIFAR10.

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