Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么softmax总是提供1.0的概率?_Python_Machine Learning_Keras_Neural Network_Mnist - Fatal编程技术网

Python 为什么softmax总是提供1.0的概率?

Python 为什么softmax总是提供1.0的概率?,python,machine-learning,keras,neural-network,mnist,Python,Machine Learning,Keras,Neural Network,Mnist,我一直在尝试简单的mnist示例。对不起,如果问题是最基本的 从keras.datasets导入mnist 从keras.layers导入输入,Conv2D,稠密 从keras.models导入顺序 从keras.utils导入np_utils def myModel(): 模型=顺序() layer1=密集(1024,输入_形状=(784,),激活='relu') 第2层=密集(512,激活='relu') 第3层=密集(10层,激活='softmax') model.add(第1层) mod

我一直在尝试简单的mnist示例。对不起,如果问题是最基本的

从keras.datasets导入mnist
从keras.layers导入输入,Conv2D,稠密
从keras.models导入顺序
从keras.utils导入np_utils
def myModel():
模型=顺序()
layer1=密集(1024,输入_形状=(784,),激活='relu')
第2层=密集(512,激活='relu')
第3层=密集(10层,激活='softmax')
model.add(第1层)
model.add(第2层)
模型。添加(第3层)
compile(loss='classifical\u crossentropy',optimizer='adam')
回归模型
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
打印“主功能内部”
model=myModel()
(trainX,trainY),(testX,testY)=mnist.load_data()
打印(“TrainX形状为”,TrainX.shape)
trainX=trainX.重塑(trainX.形状[0],trainX.形状[1]*trainX.形状[2])
trainY=np实用到范畴(trainY,10)
模型拟合(X列,Y列,批量尺寸=200,历次=1)
打印(“让我们现在预测…”
打印(“x的形状和100的形状”,trainX.shape,trainX[10].shape)
结果=模型。预测(trainX[100]。重塑(1784))
打印结果
将matplotlib.pyplot作为plt导入
plt.子地块(2,2,1)
plt.imshow(列车[1100]。重塑(28,28))
plt.show()
最后一层的输出值为

[[0.0.0.0.0.1.0.0.0.0.0.]]
我该如何解释这个结果?。这不是结果的概率分布吗?。如果不是,我如何得到相同的结果?

理论上,对于所有其他
k
,概率分布应该没有什么奇怪的,比如
[0.0.0.0.1.0.0.0.0.]
,即
p[5]=1
p[k]=0
。。。所有条目都在
[0,1]
中,它们的总和为
1.0

实际上,您犯了一个错误,没有规范化您的输入数据
trainX
(这里应该是您的指南);添加

trainX=trainX.astype('float32')
列车X/=255
在安装模型之前,我们得到(请注意,与您自己的试验相比,安装过程中的损失要小得多):

result=model.predict(trainX[100]。重塑(1784))
#结果:
阵列([[6.99907425e-04、7.85773620e-04、1.73144764e-03、9.31426825e-04、,
5.75593032e-04、9.49266493e-01、1.22108115e-02、1.03891856e-04、,
3.18745896e-02,1.82012399e-03]],数据类型=32)
这是一个好结果吗

np.argmax(结果)
# 5
np.argmax(Trany[100])#真实标签
# 5
看起来它确实是…

理论上,对于所有其他的
k
来说,概率分布像
[0.0.0.0.1.0.0.0.0.]
,也就是
p[5]=1
p[k]=0
,应该没有什么奇怪的。。。所有条目都在
[0,1]
中,它们的总和为
1.0

实际上,您犯了一个错误,没有规范化您的输入数据
trainX
(这里应该是您的指南);添加

trainX=trainX.astype('float32')
列车X/=255
在安装模型之前,我们得到(请注意,与您自己的试验相比,安装过程中的损失要小得多):

result=model.predict(trainX[100]。重塑(1784))
#结果:
阵列([[6.99907425e-04、7.85773620e-04、1.73144764e-03、9.31426825e-04、,
5.75593032e-04、9.49266493e-01、1.22108115e-02、1.03891856e-04、,
3.18745896e-02,1.82012399e-03]],数据类型=32)
这是一个好结果吗

np.argmax(结果)
# 5
np.argmax(Trany[100])#真实标签
# 5

看来真的是…

有两个问题,一个在标题中,一个在正文中。对于第一个,是的,softmax总是和一相加。回想一下:

特急(x)/∑ exp(x)


由于标准化,其总和始终为1。在培训开始时,输出应该是随机的、大致一致的,经过良好的培训后,您期望得到与您一样的输出;至少对于清晰的图像。对于其他图像,您可能会看到
[0,0.3,0.7,0,…]
,其中一个图像可能有两个(或更多)标签。

有两个问题,一个在标题中,一个在正文中。对于第一个,是的,softmax总是和一相加。回想一下:

特急(x)/∑ exp(x)


由于标准化,其总和始终为1。在培训开始时,输出应该是随机的、大致一致的,经过良好的培训后,您期望得到与您一样的输出;至少对于清晰的图像。对于其他图像,您可能会得到
[0,0.3,0.7,0,…]
,其中一个图像可能有两个(或更多)标签。

StackOverflow肯定需要像您这样的作者。Gr8帮助。谢谢。@Whoami非常欢迎你;愿意接受这个答案吗?StackOverflow肯定需要像你这样的作者。Gr8帮助。谢谢。@Whoami非常欢迎你;愿意接受这个答案吗?