-1
x_train1, x_test, y_train1, y_test = train_test_split(images, labels,test_size=0.2,random_state=42)
x_train2, x_val,y_train2,y_val = train_test_split(x_train1, y_train1,test_size=0.05,random_state=42)

图层

model = Sequential()
model.add(Conv2D(32, (3, 3), activation = 'relu', input_shape=(128,128,1), kernel_regularizer=keras.regularizers.l2(0.005), padding ='same', name='Conv_1'))
model.add(MaxPooling2D((2,2),name='MaxPool_1'))
model.add(Conv2D(64, (3, 3), activation = 'relu',padding ='same', kernel_regularizer=keras.regularizers.l2(0.005), name='Conv_2'))
model.add(MaxPooling2D((2,2),name='MaxPool_2'))
model.add(Flatten(name='Flatten'))
model.add(Dropout(0.5,name='Dropout'))
model.add(Dense(64, kernel_initializer='normal', activation='relu', name='Dense_1'))
model.add(Dense(1, kernel_initializer='normal', activation='sigmoid', name='Dense_2'))
model.summary()

模型编译

model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
history = model.fit(x_train2, y_train2,validation_data=(x_test, y_test),batch_size=32, epochs=100 )

** 结果 ** 训练:准确度 = 0.939577;损失 = 0.134506 测试:准确度 = 0.767908 ;损失 = 0.8002433

4

1 回答 1

0

正则化不是一个神奇的选择,它只会缩小任何“权重”下训练和测试之间的差距。思考这个问题的一种方法是,当你利用正则化的强度时,一个系数 alpha(在你的情况下 = 0.005)然后将训练和测试之间的差距表示为它的函数,比如 f(x)(在你的如果 f(0.005) = 0.94-0.76 = 0.18),那么我们唯一知道的是 f(inf) = 0。换句话说,当你增加正则化强度时,差距就会消失(以训练分数下降为代价) )。没有一种神奇的正则化形式,也不能保证 L2 对您的问题有好处。您可以通过提高权重来使差距消失,但这可能会导致 bot trian 和 test 变得非常低。

于 2022-02-20T12:04:49.720 回答