私は線形モデルをMNISTデータセットに適用しようとしていますが、動作しますが、「不安定」です。つまり、コードの再実行ごとに精度が大幅に異なります。 NNは「確率的」な方法で重みを学習し、解は異なる局所最小値に収束することを理解していますが、それをより安定させるための方法があるかもしれません。ここでKeras:線形モデルが不安定な結果
は私のモデル定義です:
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
アクティベーションが線形であるのはなぜですか? –
あなたのモデルに正規化がありません –
@ColdspeedはSoftmaxの前に 'Relu'を 'Relu'で置き換えることができないのかどうかわかりません、とにかく 'model.add(密度(n_classes、activation = 'softmax'、input_shape = input_shape)類似。 – mrgloom