from keras.models import Sequential
from keras.layers import Dense
from keras.datasets import mnist
from keras.utils import np_utils
(X_train, y_train), (X_test, y_test) = mnist.load_data()
X_train = X_train.reshape(60000, 784)
X_test = X_test.reshape(10000, 784)
X_train = X_train.astype('float32')
X_test = X_test.astype('float32')
X_train /= 255
X_test /= 255
Y_Train = np_utils.to_categorical(y_train, 10)
Y_Test = np_utils.to_categorical(y_test, 10)
model = Sequential()
model.add(Dense(10, input_shape=X_train.shape[1:], activation='softmax'))
model.compile(optimizer='sgd', loss='categorical_crossentropy', metrics=['accuracy'])
model.summary()
model.fit(X_train, Y_Train, nb_epoch=100, batch_size=128, verbose=2)
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
dense_1 (Dense) (None, 10) 7850
=================================================================
Total params: 7,850
Trainable params: 7,850
Non-trainable params: 0
这次使用的数据集是MNIST数据集,是一个28*28像素的手写图片数据集,首先对训练集和测试集做一次预处理,因为数据集里面的类型是uint8,所以先用astype把数据类型转成了float32
,因为图片的像素是0-255,除255的原因是为了归一化。 keras里面有个很好用的工具类to_categorical
,可以帮我们把一个一维的分类数组转成类型是下标,对应下标类型是1,其余是0的这样一个格式
3
3
1
会被转换成 (第一行是下标)
0
1
2
3
0
0
0
1
0
0
0
1
0
1
0
0
然后把处理好的数据传给第一层全连接层,输出的形状是(None, 10),因为MNIST数据集有0-9个种类的数字。这次选用的激活函数是softmax,softmax的特点是假如a>b,那么a取到的概率会比b大,但是偶尔又能取到b compile函数里面出现了一种新的损失函数,叫categorical_crossentropy
,多类的对数损失,它是一个多分类损失函数,可以配合着softmax一起使用。 代码逻辑看完了,说好的logistics回归呢??
由于logistics回归很像S型,所以又被称为了sigmod曲线.....