【问题标题】:Keras Softmax issuesKeras Softmax 问题
【发布时间】:2019-12-03 02:30:12
【问题描述】:

我是 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。我认为这是因为该模型从一开始就是 hardmaxing:

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。

任何帮助将不胜感激。重新表述这个问题,我很困惑为什么模型是hardmaxing而不是softmazing。

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

当前的问题是它会收敛到始终对所有选项具有相同的权重:

【问题讨论】:

  • train_object和test object是什么样子的?
  • 只是一个迭代器数据类型形式的表格数据集:
  • 会添加一个 Softmax 层而不是使用激活函数,我不太确定,但该轴可能会导致一些意想不到的结果,例如在批量轴而不是行维度上进行 softmaxing
  • 请将您的问题标题edit 改为更具描述性的内容。如果您删除标签信息的无用重复,它会留下 Issues 作为标题,显然没有提供任何信息。您的标题应该以对正在扫描搜索结果列表的本网站的未来用户有用的方式描述您遇到的问题或您提出的问题。谢谢。

标签: keras softmax


【解决方案1】:

什么是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)

【讨论】:

    猜你喜欢
    • 2023-04-10
    • 2019-07-20
    • 2019-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-25
    • 2020-05-29
    相关资源
    最近更新 更多