µ±Ç°Î»ÖãºÊ×Ò³ > ÈçºÎÓþí»ýÉñ¾ÍøÂçCNNʶ±ðÊÖдÊý×Ö¼¯£¿
ÈçºÎÓþí»ýÉñ¾ÍøÂçCNNʶ±ðÊÖдÊý×Ö¼¯£¿
ǰ¼¸ÌìÓÃCNNʶ±ðÊÖдÊý×Ö¼¯£¬ºóÀ´¿´µ½kaggleÉÏÓÐÒ»¸ö±ÈÈüÊÇʶ±ðÊÖдÊý×Ö¼¯µÄ£¬ÒѾ½øÐÐÁËÒ»Äê¶àÁË£¬Ä¿Ç°ÓÐ1179¸öÓÐЧÌá½»£¬×î¸ßµÄÊÇ100%£¬ÎÒ×öÁËһϣ¬ÓÃkeras×öµÄ£¬Ò»¿ªÊ¼ÓÃ×î¼òµ¥µÄMLP£¬×¼È·ÂÊÖ»ÓÐ98.19%£¬È»ºó²»¶Ï¸Ä½ø£¬ÏÖÔÚÊÇ99.78%£¬È»¶øÎÒ¿´µ½ÅÅÃûµÚÒ»ÊÇ100%£¬ÐÄËé = =£¬ÓÚÊÇÓָĽøÁËÒ»°æ£¬ÏÖÔÚ°Ñ×îºÃµÄ½á¹û¼Ç¼һÏ£¬Èç¹ûÌáÉýÁËÔÙÀ´¸üС£
ÊÖдÊý×Ö¼¯ÏàÐÅ´ó¼ÒÓ¦¸ÃºÜÊìϤÁË£¬Õâ¸ö³ÌÐòÏ൱ÓÚѧһÃÅÐÂÓïÑԵġ°Hello World¡±£¬»òÕßmapreduceµÄ¡°WordCount¡±£º£©ÕâÀï¾Í²»¶à×ö½éÉÜÁË£¬¼òµ¥¸ø´ó¼Ò¿´Ò»Ï£º ¸´ÖÆ´úÂë
1 # Author£ºCharlotte 2 # Plot mnist dataset
3 from keras.datasets import mnist 4 import matplotlib.pyplot as plt 5 # load the MNIST dataset
6 (X_train, y_train), (X_test, y_test) = mnist.load_data() 7 # plot 4 images as gray scale 8 plt.subplot(221)
9 plt.imshow(X_train[0], cmap=plt.get_cmap('PuBuGn_r')) 10 plt.subplot(222)
11 plt.imshow(X_train[1], cmap=plt.get_cmap('PuBuGn_r')) 12 plt.subplot(223)
13 plt.imshow(X_train[2], cmap=plt.get_cmap('PuBuGn_r')) 14 plt.subplot(224)
15 plt.imshow(X_train[3], cmap=plt.get_cmap('PuBuGn_r')) 16 # show the plot 17 plt.show() ¸´ÖÆ´úÂë ͼ£º
1.BaseLine°æ±¾
Ò»¿ªÊ¼ÎÒûÓÐÏë¹ýÓÃCNN×ö£¬ÒòΪ±È½ÏºÄʱ£¬ËùÒÔÏë¿´¿´Ö±½ÓÓñȽϼòµ¥µÄËã·¨¿´Äܲ»Äܵõ½ºÜºÃµÄЧ¹û¡£Ö®Ç°Óùý»úÆ÷ѧϰËã·¨ÅܹýÒ»±é£¬×îºÃµÄЧ¹ûÊÇSVM£¬96.8%£¨Ä¬ÈϲÎÊý£¬Î´µ÷ÓÅ£©£¬ËùÒÔÕâ´Î×¼±¸ÓÃÉñ¾ÍøÂç×ö¡£BaseLine°æ±¾ÓõÄÊÇMultiLayer Percepton£¨¶à²ã¸ÐÖª»ú£©¡£Õâ¸öÍøÂç½á¹¹±È½Ï¼òµ¥£¬ÊäÈë--->Òþº¬--->Êä³ö¡£Òþº¬²ã²ÉÓõÄrectifier linear unit£¬Êä³öÖ±½ÓѡȡµÄsoftmax½øÐжà·ÖÀà¡£
ÍøÂç½á¹¹£º
´úÂ룺 ¸´ÖÆ´úÂë
1 # coding:utf-8
2 # Baseline MLP for MNIST dataset 3 import numpy
4 from keras.datasets import mnist 5 from keras.models import Sequential 6 from keras.layers import Dense 7 from keras.layers import Dropout 8 from keras.utils import np_utils 9 10 seed = 7
11 numpy.random.seed(seed) 12 #¼ÓÔØÊý¾Ý
13 (X_train, y_train), (X_test, y_test) = mnist.load_data() 14
15 num_pixels = X_train.shape[1] * X_train.shape[2]
16 X_train = X_train.reshape(X_train.shape[0], num_pixels).astype('float32') 17 X_test = X_test.reshape(X_test.shape[0], num_pixels).astype('float32') 18
19 X_train = X_train / 255 20 X_test = X_test / 255 21
22 # ¶ÔÊä³ö½øÐÐone hot±àÂë
23 y_train = np_utils.to_categorical(y_train) 24 y_test = np_utils.to_categorical(y_test) 25 num_classes = y_test.shape[1] 26
27 # MLPÄ£ÐÍ
28 def baseline_model(): 29 model = Sequential()
30 model.add(Dense(num_pixels, input_dim=num_pixels, init='normal', activation='relu')) 31 model.add(Dense(num_classes, init='normal', activation='softmax')) 32 model.summary()
33 model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) 34 return model 35
36 # ½¨Á¢Ä£ÐÍ
37 model = baseline_model() 38 39 # Fit
40 model.fit(X_train, y_train, validation_data=(X_test, y_test), nb_epoch=10, batch_size=200, verbose=2) 41
42 #Evaluation
43 scores = model.evaluate(X_test, y_test, verbose=0)
44 print(\Êä³ö´íÎóÂÊ ¸´ÖÆ´úÂë
½á¹û£º ¸´ÖÆ´úÂë
1 Layer (type) Output Shape Param # Connected to
2 ==================================================================================================== 3 dense_1 (Dense) (None, 784) 615440 dense_input_1[0][0]
4 ____________________________________________________________________________________________________ 5 dense_2 (Dense) (None, 10) 7850 dense_1[0][0]
6 ==================================================================================================== 7 Total params: 623290
8 ____________________________________________________________________________________________________ 9 Train on 60000 samples, validate on 10000 samples 10 Epoch 1/10
11 3s - loss: 0.2791 - acc: 0.9203 - val_loss: 0.1420 - val_acc: 0.9579 12 Epoch 2/10
13 3s - loss: 0.1122 - acc: 0.9679 - val_loss: 0.0992 - val_acc: 0.9699 14 Epoch 3/10
15 3s - loss: 0.0724 - acc: 0.9790 - val_loss: 0.0784 - val_acc: 0.9745 16 Epoch 4/10
17 3s - loss: 0.0509 - acc: 0.9853 - val_loss: 0.0774 - val_acc: 0.9773 18 Epoch 5/10
19 3s - loss: 0.0366 - acc: 0.9898 - val_loss: 0.0626 - val_acc: 0.9794 20 Epoch 6/10
21 3s - loss: 0.0265 - acc: 0.9930 - val_loss: 0.0639 - val_acc: 0.9797 22 Epoch 7/10
23 3s - loss: 0.0185 - acc: 0.9956 - val_loss: 0.0611 - val_acc: 0.9811 24 Epoch 8/10
25 3s - loss: 0.0150 - acc: 0.9967 - val_loss: 0.0616 - val_acc: 0.9816 26 Epoch 9/10
27 4s - loss: 0.0107 - acc: 0.9980 - val_loss: 0.0604 - val_acc: 0.9821 28 Epoch 10/10
29 4s - loss: 0.0073 - acc: 0.9988 - val_loss: 0.0611 - val_acc: 0.9819 30 Baseline Error: 1.81% ¸´ÖÆ´úÂë
¿ÉÒÔ¿´µ½½á¹û»¹ÊDz»´íµÄ£¬ÕýÈ·ÂÊ98.19%£¬´íÎóÂÊÖ»ÓÐ1.81%£¬¶øÇÒÖ»µü´úÊ®´ÎЧ¹ûÒ²²»´í¡£Õâ¸öʱºòÎÒ»¹ÊÇûÏ뵽ȥÓÃCNN£¬¶øÊÇÏëÈç¹ûµü´ú100´Î£¬»á²»»áЧ¹ûºÃÒ»µã£¿ÓÚÊÇÎÒµü´úÁË100´Î£¬½á¹ûÈçÏ£º
Epoch 100/100
8s - loss: 4.6181e-07 - acc: 1.0000 - val_loss: 0.0982 - val_acc: 0.9854 Baseline Error: 1.46%
´Ó½á¹ûÖпÉÒÔ¿´³ö£¬µü´ú100´ÎÒ²Ö»Ìá¸ßÁË0.35%£¬Ã»ÓÐÍ»ÆÆ99%£¬ËùÒԾͿ¼ÂÇÓÃCNNÀ´×ö¡£
2.¼òµ¥µÄCNNÍøÂç
kerasµÄCNNÄ£¿é»¹ÊǺÜÈ«µÄ£¬ÓÉÓÚÕâÀï×ÅÖØ½²CNNµÄ½á¹û£¬¶ÔÓÚCNNµÄ»ù±¾ÖªÊ¶¾Í²»Õ¹¿ª½²ÁË¡£
ÍøÂç½á¹¹£º
´úÂ룺 ¸´ÖÆ´úÂë 1 #coding: utf-8 2 #Simple CNN 3 import numpy
4 from keras.datasets import mnist 5 from keras.models import Sequential 6 from keras.layers import Dense 7 from keras.layers import Dropout 8 from keras.layers import Flatten
9 from keras.layers.convolutional import Convolution2D 10 from keras.layers.convolutional import MaxPooling2D 11 from keras.utils import np_utils 12 13 seed = 7
14 numpy.random.seed(seed) 15
16 #¼ÓÔØÊý¾Ý
17 (X_train, y_train), (X_test, y_test) = mnist.load_data() 18 # reshape to be [samples][channels][width][height]
19 X_train = X_train.reshape(X_train.shape[0], 1, 28, 28).astype('float32') 20 X_test = X_test.reshape(X_test.shape[0], 1, 28, 28).astype('float32') 21
22 # normalize inputs from 0-255 to 0-1 23 X_train = X_train / 255 24 X_test = X_test / 255 25
26 # one hot encode outputs
27 y_train = np_utils.to_categorical(y_train) 28 y_test = np_utils.to_categorical(y_test) 29 num_classes = y_test.shape[1] 30
31 # define a simple CNN model 32 def baseline_model(): 33 # create model 34 model = Sequential()
¹²·ÖÏí92ƪÏà¹ØÎĵµ