keras - softmax

softmax:有人把它看作一个归一化的工具,通过概率来进行归一化中的值,反正比较简单,过几天再传解释,包括交叉熵。

keras:不熟悉的大家可以看中文文档讲得不错,恩恩。然后我的后端是theano。

结构,两层:6000,28*28的图片输入,通过第一层压缩为32维的输出,然后经过激励函数,这里选择sigmoid,你们也可以选择relu或者其他激活函数。

然后压缩为10层的输出,再通过softmax激励函数进行分类

code:

###
'''
手写数字
'''
###
import numpy as np
np.random.seed(1337)
from keras.datasets import mnist
from keras.utils import np_utils
from keras.models import Sequential
from keras.layers import Dense,Activation
from keras.optimizers import RMSprop

## load data
(X_train,Y_train),(X_test,Y_test) = mnist.load_data()

## normal
X_train = X_train.reshape(X_train.shape[0],-1)/255.
X_test = X_test.reshape(X_test.shape[0],-1)/255.
Y_train = np_utils.to_categorical(Y_train,10)
Y_test = np_utils.to_categorical(Y_test,10)

## build model
print ("Training.........\n")
model = Sequential()
model.add(Dense(32,input_dim=784))
model.add(Activation('sigmoid'))
model.add(Dense(10))
model.add(Activation('softmax'))

##compile
rmsprop = RMSprop(lr=0.01)
model.compile(optimizer = rmsprop,loss='categorical_crossentropy',metrics=['accuracy'])
##fit
model.fit(X_train,Y_train,epochs=10,batch_size = 128)

print ("Testing..........\n")
loss,accuracy = model.evaluate(X_test,Y_test,batch_size = 32)
print ("loss: %s,accurcay: %s"%(loss,accuracy))
            
其中很多API有很多意思,大家尽可能搞懂,这个博客只是作为我个人的笔记,所以没有详细。

这里的normal是把每个图片的像素点归一到0-1之间,因为像素点范围是0-255.Y_train or Y_test都代表的是标签,标签可能是字符串所以要进行one_hot

自己百度哦。。。因为有10类,所以one_hot的类数为10。

这里采用的是Sequential()序贯模型,大家也可以采用函数式模型都一样的。

这里的优化器是RMSprop 是和SGD,Adam同样的东西。我过几天统一上传

要考试了,,,得准备考试,所以很多笔记在我的有道云,但是没有上传上来。先传代码。
还是建议大家去通读算法,而不是这种API的实现


你可能感兴趣的:(keras - softmax)