1from keras.models import Sequential 2from keras.layers import Dense 3from keras.datasets import mnist 4from keras.utils import np_utils 5 6(X_train, y_train), (X_test, y_test) = mnist.load_data() 7 8X_train = X_train.reshape(60000, 784) 9X_test = X_test.reshape(10000, 784) 10X_train = X_train.astype('float32') 11X_test = X_test.astype('float32') 12X_train /= 255 13X_test /= 255 14 15Y_Train = np_utils.to_categorical(y_train, 10) 16Y_Test = np_utils.to_categorical(y_test, 10) 17 18model = Sequential() 19model.add(Dense(10, input_shape=X_train.shape[1:], activation='softmax')) 20model.compile(optimizer='sgd', loss='categorical_crossentropy', metrics=['accuracy']) 21 22model.summary() 23 24model.fit(X_train, Y_Train, nb_epoch=100, batch_size=128, verbose=2) 25 26 27_________________________________________________________________ 28Layer (type) Output Shape Param # 29================================================================= 30dense_1 (Dense) (None, 10) 7850 31================================================================= 32Total params: 7,850 33Trainable params: 7,850 34Non-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曲线.....