我是Keras的新手,此刻有点困惑:
def get_compiled_model():
model = tf.keras.Sequential([
tf.keras.layers.Dense(1000, input_shape = (1000,), activation='relu', kernel_initializer = 'glorot_uniform'),
tf.keras.layers.Dense(1000, activation='relu', kernel_initializer = 'glorot_uniform'),
tf.keras.layers.Dense(41, activation='softmax', kernel_initializer = 'glorot_uniform')
])
model.compile(optimizer='SGD', loss='categorical_crossentropy', metrics=['accuracy'])
return model
然后我按如下方式调用模型:
model = get_compiled_model()
for i in range(10):
model.fit(train_object, epochs=10)
test_loss, test_acc = model.evaluate(test_object, verbose=2)
即使经过大量培训,我仍然保持0精度。我认为这是因为该模型从一开始就在努力实现最大化:
for row in test_object.take(1):
row
print(model.predict(row[0])[0])
array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0.], dtype=float32)
即使在开始时也会发生此行为,这很令人困惑,因为我们期望的是带有小数的东西,而不是全0和1。
任何帮助将不胜感激。为了重新表述这个问题,我对为什么模型采用硬最大化而不是软化感到困惑。
0
更新:弄乱了模型的大小,减小模型的大小给了我们
array([0.02439025, 0.02439031, 0.02439018, 0.02439029, 0.02439014, 0.02438815, 0.02439025, 0.02439022, 0.02439038, 0.02439022, 0.02439025, 0.02439038, 0.0243915 , 0.02439023, 0.02439109, 0.02438496, 0.02439068, 0.02439134, 0.02439025, 0.02439033, 0.02438724, 0.02439025, 0.02439067, 0.02439027, 0.02439025, 0.02439088, 0.02439021, 0.02439019, 0.02439023, 0.02439035, 0.02439059, 0.02439025, 0.02439438, 0.02439116, 0.02439019, 0.02439001, 0.02439013, 0.02439059, 0.02439025, 0.02439023, 0.02439026], dtype=float32)
这是理想的效果。知道为什么更大的网会导致它达到hardmax吗?
更新2:
def get_compiled_model():
model = tf.keras.Sequential([
tf.keras.layers.Dense(124, input_shape = (1000,), activation='relu',
kernel_initializer = 'glorot_uniform'),
tf.keras.layers.Dropout(0.8),
tf.keras.layers.Dense(256, input_shape = (1000,), activation='relu', kernel_initializer = 'glorot_uniform'),
tf.keras.layers.Dropout(0.8),
tf.keras.layers.Dense(41, activation='relu', kernel_initializer = 'glorot_uniform'),
tf.keras.layers.Softmax(-1)
])
model.compile(optimizer='Adam',
loss='categorical_crossentropy',
metrics=['categorical_accuracy'])
return model
当前的问题是,它始终收敛于所有选项的权重相同:
答案 0 :(得分:0)
什么是train_object?您可能忘记了指定目标,例如fit函数的y参数。
fit(x=None, y=None, batch_size=None, epochs=1, verbose=1, callbacks=None, validation_split=0.0, validation_data=None, shuffle=True, class_weight=None, sample_weight=None, initial_epoch=0, steps_per_epoch=None, validation_steps=None, validation_freq=1, max_queue_size=10, workers=1, use_multiprocessing=False)