我正在尝试将线性模型应用于MNIST数据集并且它可以工作,但它“不稳定”,即每次重新运行代码都会在准确性方面产生截然不同的结果。我知道NN以“随机”方式学习权重,也许解决方案会收敛到不同的局部最小值,但也许有某种方法可以让它更“稳定”?
这是我的模型定义:
def get_model():
w=28
h=28
input_shape = (w*h,)
model = Sequential()
model.add(Dense(n_classes, activation='linear', input_shape=input_shape))
model.add(Activation('softmax'))
model.compile(loss=keras.losses.categorical_crossentropy,
optimizer=keras.optimizers.Adadelta(),
metrics=['accuracy'])
print(model.summary())
return model
更新:似乎在准确性方面添加正则化是对解决方案不稳定性的初始问题的有效回答。
def get_model():
w=28
h=28
input_shape = (w*h,)
model = Sequential()
#v1 - Not valid, because applying softmax to one layer network is meaningless
#model.add(Dense(n_classes, init='uniform', activation='linear',
# kernel_regularizer=regularizers.l2(0.01),
# activity_regularizer=regularizers.l1(0.01),
# input_shape=input_shape))
#model.add(Dropout(0.2))
#model.add(Activation('softmax'))
#v2
model.add(Dense(n_classes, init='uniform', activation='softmax',
kernel_regularizer=regularizers.l2(0.01),
activity_regularizer=regularizers.l1(0.01),
input_shape=input_shape))
model.compile(loss=keras.losses.categorical_crossentropy,
optimizer=keras.optimizers.Adadelta(),
metrics=['accuracy'])
#print(model.summary())
return model
答案 0 :(得分:2)
L1 / L2正规化或丢失应该有助于稳定学习。