首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Keras Softmax问题

Keras Softmax问题
EN

Stack Overflow用户
提问于 2019-12-03 10:30:12
回答 1查看 154关注 0票数 0

我是Keras的新手,目前有点困惑:

代码语言:javascript
复制
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

然后我调用我的模型,如下所示:

代码语言:javascript
复制
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。我认为这是因为模型从一开始就是硬最大化的:

代码语言:javascript
复制
for row in test_object.take(1):
    row
print(model.predict(row[0])[0])
代码语言:javascript
复制
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。

任何帮助都将不胜感激。换句话说,我很困惑为什么模型是硬模式化而不是软模型化。

更新:调整了模型的大小,减小了模型的大小:

代码语言:javascript
复制
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)

这就是想要的效果。你知道为什么更大的net会导致它的hardmax吗?

更新2:

代码语言:javascript
复制
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

当前的问题是,它总是收敛到所有选项的权重都相同:

EN

回答 1

Stack Overflow用户

发布于 2019-12-03 14:11:14

什么是train_object?您可能忘记了指定目标,例如,将y参数指定给fit函数。

代码语言:javascript
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59149391

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档