tensorflow.nn.softmax() 正在从模型内部生成错误的值
tensorflow.nn.softmax() is producing wrong values from inside the model
为什么 tf.nn.softmax() 从模型内部给出了错误的值?但是当我在返回的 logits 上从模型外部手动执行 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, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02,
0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02,
0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02,
0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02,
0.02, 0.02, 0.02, 0.02, 0.02, 0.02], dtype=float32)
probabilities
array([0.03125 , 0.03125 , 0.03125 , 0.03125 , 0.03125 ,
0.03125 , 0.03125 , 0.03125 , 0.03125 , 0.03125 ,
0.03125 , 0.03125 , 0.03125 , 0.03125 , 0.03125 ,
0.03125 , 0.03125 , 0.03125 , 0.03125 , 0.03125 ,
0.03125 , 0.03125 , 0.03125 , 0.03125 , 0.03125 ,
0.03125 , 0.03125 , 0.03125 , 0.03125 , 0.03125 ,
0.03125 , 0.03125 , 0.05555556, 0.05555556, 0.05555556,
0.05555556, 0.05555556, 0.05555556, 0.05555556, 0.05555556,
0.05555556, 0.05555556, 0.05555556, 0.05555556, 0.05555556,
0.05555556, 0.05555556, 0.05555556, 0.05555556, 0.05555556],
dtype=float32)
logits, probabilities = model.predict(valX, batch_size=50), 将解决问题。
inputs.shape[0] == 50 在这种情况下,softmax 在原始轴 = 0 上计算,跨输入样本数。
为什么 tf.nn.softmax() 从模型内部给出了错误的值?但是当我在返回的 logits 上从模型外部手动执行 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, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02,
0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02,
0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02,
0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02,
0.02, 0.02, 0.02, 0.02, 0.02, 0.02], dtype=float32)
probabilities
array([0.03125 , 0.03125 , 0.03125 , 0.03125 , 0.03125 ,
0.03125 , 0.03125 , 0.03125 , 0.03125 , 0.03125 ,
0.03125 , 0.03125 , 0.03125 , 0.03125 , 0.03125 ,
0.03125 , 0.03125 , 0.03125 , 0.03125 , 0.03125 ,
0.03125 , 0.03125 , 0.03125 , 0.03125 , 0.03125 ,
0.03125 , 0.03125 , 0.03125 , 0.03125 , 0.03125 ,
0.03125 , 0.03125 , 0.05555556, 0.05555556, 0.05555556,
0.05555556, 0.05555556, 0.05555556, 0.05555556, 0.05555556,
0.05555556, 0.05555556, 0.05555556, 0.05555556, 0.05555556,
0.05555556, 0.05555556, 0.05555556, 0.05555556, 0.05555556],
dtype=float32)
logits, probabilities = model.predict(valX, batch_size=50), 将解决问题。 inputs.shape[0] == 50 在这种情况下,softmax 在原始轴 = 0 上计算,跨输入样本数。