Keras Softmax问题

问题描述 投票:0回答:1

我对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.02439439 ,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 = flo

这是所需的效果。知道为什么更大的网络会导致它达到hardmax吗?

PDATE 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

当前的问题是,它始终收敛于所有选项的权重相同:

我是Keras的新手,目前有点困惑:def get_compiled_model():model = tf.keras.Sequential([tf.keras.layers.Dense(1000,input_shape =(1000,),activation ='relu ',...

keras softmax
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.