因此,我一直在构建卷积神经网络。我正在尝试预测棋盘游戏状态(10x10矩阵)是否会导致胜利(二进制0或1)。
我有600万个示例,您认为这足够了,但显然不行,因为我的网络正在预测所有一个类...
我明显缺少什么吗?我尝试给它甚至提供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)
我尝试修改学习速率,动量,衰减,kernel_sizes,图层类型,尺寸...我检查了垂死的relu,但这似乎不是问题所在。删除掉落/批处理规范化层(或各种随机层)也没有任何作用。
数据在标签之间的分布大致为53/47%,所以也不是。
我感到更加困惑,因为即使我要求它预测列车的运行状况,它仍然坚持只将一个类标记为事物,即使只有约20个样本或更少。