我为 MNIST 实现了一个非常基本的 CNN 分类器。 模型是这样的:
def defineModel():
reg=10000
global model
model = Sequential()
model.add(InputLayer(input_shape=input_shape))
model.add(layers.Conv2D(64, kernel_size=(5, 5), activation="relu",kernel_regularizer=l2(reg)))
model.add(layers.Conv2D(64, kernel_size=(5, 5), activation="relu",kernel_regularizer=l2(reg)))
model.add(layers.Flatten())
#model.add(layers.Dropout(0.25))
model.add(layers.Dense(128, activation="relu",kernel_regularizer=l2(reg)))
#model.add(layers.Dropout(0.5))
model.add(layers.Dense(num_classes, activation="softmax",kernel_regularizer=l2(reg)))
model.build()
如您所见,我使用了非常大的 l2 正则化,我希望这会破坏模型的准确性。但是对于一个时代,它不是:
def trainModel():
global model
model.compile(loss="categorical_crossentropy", optimizer="adam", metrics=["accuracy"])
model.fit(x_train, y_train, batch_size=batch_size, epochs=epochs, validation_split=0.1)
def evalModel():
score = model.evaluate(x_test, y_test, verbose=0)
print("Test loss:", score[0])
print("Test accuracy:", score[1])
和 evalModel()
打印:
Test loss: 0.034063227474689484
Test accuracy: 0.9898999929428101
我应该提一下,我已经在 CIFAR-10 分类器上使用了这种正则化,并且效果很好。不知道为什么它现在不起作用。
顺便说一句,对于图像 x
,当我将其输入模型时,有什么办法可以得到一些 categorical_crossentropy loss
和 regularization loss
原样用于 CNN 模型?
谢谢。