tensorflow.nn.softmax从模型内部产生错误的值

问题描述

为什么tf.nn.softmax()从模型内部给出错误的值?但是,当我从模型外部在返回的logit上手动执行softmax时,它会按预期运行。

beta = np.random.random((4,1))
inputs = tf.keras.Input(shape=(4,),dtype="float32")
beta = tf.constant(beta,dtype="float32")
utility = tf.matmul(inputs,beta)
logits = tf.reshape(utility,[-1])
probabilities = tf.nn.softmax(logits)
model = tf.keras.Model(inputs=inputs,outputs=[logits,probabilities],name="Test")

valX = np.ones((50,4))
logits,probabilities = model.predict(valX)

tf.nn.softmax(logits).numpy()
array([0.02,0.02,0.02],dtype=float32)

probabilities
array([0.03125,0.03125,0.05555556,0.05555556],dtype=float32)

解决方法

登录,概率= model.predict(valX,batch_size = 50),将解决此问题。 在这种情况下,inputs.shape [0] == 50,并且在输入样本的数量上,softmax是在原始轴= 0上计算的。