Keras Softmax发行版

Keras Softmax发行版,keras,softmax,Keras,Softmax,我是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

我是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])
这种行为甚至在开始时就发生了,这让人感到困惑,因为我们期望的是小数,而不是所有的0和1

任何帮助都将不胜感激。为了重新表述这个问题,我对为什么模型是硬maxing而不是软mazing感到困惑

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)
这是理想的效果。知道为什么更大的网络会导致硬盘最大化吗

更新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\u对象?您可能忘记指定目标,例如,拟合函数的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)

train_对象和测试对象是什么样子的?只是一个迭代器数据类型形式的表格数据集:将添加一个Softmax层而不是使用激活函数,我不确定,但axis可能会导致一些意外的结果,例如,在batchsize轴上使用softmaxing代替行尺寸请将您的问题标题改为更具描述性的标题。如果删除标签信息的无用重复,它会将问题保留为标题,而标题显然不提供任何信息。你的标题应该描述你所遇到的问题或你所问的问题,这对将来浏览搜索结果列表的本网站用户很有用。谢谢
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)