Keras убедить предсказания только один класс? - PullRequest
0 голосов
/ 01 ноября 2018

Итак, я строю сверточную нейронную сеть. Я пытаюсь предсказать, приведет ли состояние настольной игры (матрица 10x10) к победе (двоичный 0 или 1) или нет.

У меня есть шесть миллионов примеров, которых, как вы думаете, было бы достаточно, но явно нет, поскольку моя сеть предсказывает все об одном классе ...

Есть ли что-то очевидное, что мне не хватает? Я попытался дать ему даже 10 примеров, и он все еще предсказывает их как один и тот же класс.

Матрицы ввода составляют 10x10 целых чисел.

Изменение формы ввода:

x_train = x_train.reshape(len(x_train),10,10,1)

Фактическая модель здания:

model = Sequential()
model.add(Conv2D(3, kernel_size=(1, 1), strides=(1, 1), activation='relu', input_shape=(10,10,1)))
model.add(MaxPooling2D(pool_size=(2, 2), strides=(1, 1)))
model.add(keras.layers.Flatten())
model.add(keras.layers.Dense(500, activation='tanh'))
model.add(Dropout(0.5))
model.add(keras.layers.Dense(75, activation='relu'))
model.add(BatchNormalization())
model.add(keras.layers.Dense(10, activation='sigmoid'))
model.add(keras.layers.Dense(1,kernel_initializer='normal',activation='sigmoid'))
optimizerr = keras.optimizers.SGD(lr=0.001, momentum=0.9, decay=0.01, nesterov=True)
model.compile(optimizer=optimizerr, loss='binary_crossentropy', metrics=[metrics.binary_accuracy])

model.fit(x_train, y_train,epochs = 100, batch_size = 128, verbose=1)

Я пытался изменить скорость обучения, импульс, затухание, размеры ядра, типы слоев, размеры ... Я проверил на умирающий результат, и это не было проблемой. Удаление выпадающих / пакетных слоев нормализации (или различных случайных слоев) также ничего не сделало.

Данные разделены по меткам примерно на 53/47%, так что это не так.

Я больше сбит с толку, потому что даже когда я прошу его предсказать набор поездов, он ПО-НАСТОЯЩЕМУ настаивает на том, чтобы маркировать вещи только одним классом, даже если есть только ~ 20 образцов или меньше.

...