我一直在尝试简单的mnist示例。很抱歉,这个问题是否很基本。
from keras.datasets import mnist
from keras.layers import Input, Conv2D, Dense
from keras.models import Sequential
from keras.utils import np_utils
def myModel():
model= Sequential()
layer1 = Dense(1024, input_shape=(784,), activation='relu')
layer2 = Dense(512, activation='relu')
layer3 = Dense(10, activation='softmax')
model.add (layer1)
model.add (layer2)
model.add(layer3)
model.compile(loss='categorical_crossentropy', optimizer='adam')
return model
if __name__ == '__main__':
print "Inside the main function "
model = myModel()
(trainX, trainY), (testX, testY) = mnist.load_data()
print ("TrainX shape is ", trainX.shape)
trainX = trainX.reshape(trainX.shape[0], trainX.shape[1] * trainX.shape[2])
trainY = np_utils.to_categorical(trainY, 10)
model.fit(trainX, trainY, batch_size=200, epochs=1)
print ("Let's predict now..")
print ("Shae of x and shape of 100" , trainX.shape, trainX[10].shape)
result = model.predict(trainX[100].reshape(1,784 ))
print result
import matplotlib.pyplot as plt
plt.subplot(2,2,1)
plt.imshow(trainX[1100].reshape(28,28))
plt.show()
最后一层的输出值为
[[0. 0. 0. 0. 0. 1. 0. 0. 0. 0.]]
我该如何解释这个结果?这不是结果的概率分布吗?如果没有,我怎么能得到相同的?
答案 0 :(得分:4)
理论上,对于newdf=df[~(df.B.ne(0)&df.A.isna())].copy()
newdf.A=newdf.A.fillna(0)
newdf
Out[566]:
B A
0 10 100.0
1 0 0.0
2 20 500.0
3 0 0.0
这样的概率分布,即所有其他[0. 0. 0. 0. 0. 1. 0. 0. 0. 0.]
的{{1}}和p[5]=1
,都应该没有什么奇怪的。 ..所有条目都在p[k]=0
中,它们总计为k
。
在实践中,您犯了一个错误,就是不对输入数据进行规范化[0, 1]
(此处Keras MNIST MLP example应该作为您的指南);添加
1.0
在拟合模型之前,我们得到了(请注意,与您自己的试验相比,拟合期间损耗会变小)
trainX
结果好吗?
trainX = trainX.astype('float32')
trainX /= 255
似乎确实是...
答案 1 :(得分:0)
有两个问题,一个是标题,另一个是身体。对于第一个,是的,softmax总是求和。回忆一下it is defined的方式:
exp(x)/ ∑ exp(x)
由于归一化,其总和为1。在训练开始时,输出应该是随机且大致均匀的,经过良好的训练后,您期望得到与您一样的输出;至少对于清晰的图像。对于其他图像,您可能会得到[0,0.3, 0.7, 0,…]
,其中一个图像可能会看到两个(或更多)标签。