import numpy as np
import pandas as pd
%matplotlib inline
import matplotlib.pyplot as plt
import matplotlib.cm as cm
from lasagne.layers import Conv2DLayer
from lasagne.layers import MaxPool2DLayer
from lasagne.layers import InputLayer
from lasagne.layers import DenseLayer
from lasagne.layers import DropoutLayer
from lasagne.nonlinearities import softmax
from lasagne.layers import get_all_params
from lasagne.updates import adam
from nolearn.lasagne import NeuralNet
from nolearn.lasagne import TrainSplit
from nolearn.lasagne import objective
from nolearn.lasagne import PrintLayerInfo
data_set=pd.read_csv('./input/train.csv')
test_set=pd.read_csv('./input/test.csv')
data_set.info()
data_set.head()
label | pixel0 | pixel1 | pixel2 | pixel3 | pixel4 | pixel5 | pixel6 | pixel7 | pixel8 | … | pixel774 | pixel775 | pixel776 | pixel777 | pixel778 | pixel779 | pixel780 | pixel781 | pixel782 | pixel783 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | … | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | … | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
2 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | … | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
3 | 4 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | … | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
4 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | … | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
5 rows × 785 columns
train_y=data_set[[0]]#get the training target
train_y.head()
train_target=train_y.values
train_target=train_target.ravel()
train_target.shape
(42000,)
train_input=data_set.iloc[:,1:].values#get the training input
train_input.shape
(42000, 784)
figs,axes=plt.subplots(4,4,figsize=(6,6))#show the first sixteen images and their labels
for i in range(4):
for j in range(4):
axes[i,j].imshow(-train_input[i*4+j].reshape(28,28),cmap='gray')
axes[i,j].set_xticks([])
axes[i,j].set_yticks([])
axes[i,j].set_title("label:{}".format(train_target[i*4+j]))
#change the shape of train_input
train_input=train_input.reshape([-1,1,28,28])
train_input.shape
(42000, 1, 28, 28)
#set the layers of neuralnetwork
layers0=[
(InputLayer,{'shape':(None,train_input.shape[1],train_input.shape[2],train_input.shape[3])}),
(Conv2DLayer,{'num_filters':32,'filter_size':[3,3]}),
(Conv2DLayer,{'num_filters':32,'filter_size':[3,3]}),
(MaxPool2DLayer,{'pool_size':[2,2]}),
(DenseLayer,{'num_units':100}),
(DropoutLayer,{'p':0.2}),
(DenseLayer,{'num_units':10,'nonlinearity':softmax})
]
net0=NeuralNet(layers=layers0,
update_learning_rate=0.002,
max_epochs=10,
update=adam,
objective_l2=0.0025,
train_split=TrainSplit(eval_size=0.01)
)
train_target=np.array(train_target,np.int64)
train_target.shape
(42000,)
train_target.dtype
train_target=train_target.astype(np.int32)
train_target.dtype
dtype('int32')
net0.fit(train_input,train_target)
test_set.shape
(28000, 784)
test_x=test_set.values
test_x=test_x.reshape(-1,1,28,28)
test_x.shape
(28000, 1, 28, 28)
test_y=net0.predict(test_x)
test_y=test_y.astype(np.int32)
test_y.dtype
dtype('int32')
figs1,axes1=plt.subplots(4,4,figsize=(6,6))
for i in range(4):
for j in range(4):
axes1[i,j].imshow(-test_x[i*4+j].reshape(28,28),cmap='gray')
axes1[i,j].set_xticks([])
axes1[i,j].set_yticks([])
axes1[i,j].set_title('predict: {}'.format(test_y[i*4+j]))
len(test_y)
28000
np.savetxt('submission_cnn.csv', np.c_[range(1,len(test_y)+1),test_y], delimiter=',', header = 'ImageId,Label', comments = '', fmt='%d')
from nolearn.lasagne.visualize import draw_to_notebook
from nolearn.lasagne.visualize import plot_loss
from nolearn.lasagne.visualize import plot_conv_weights
from nolearn.lasagne.visualize import plot_conv_activity
from nolearn.lasagne.visualize import plot_occlusion
from nolearn.lasagne.visualize import plot_saliency
draw_to_notebook(net0)
plot_loss(net0)
<module 'matplotlib.pyplot' from '/usr/lib/python3/dist-packages/matplotlib/pyplot.py'>
plot_occlusion(net0,train_input[:10],train_target[:10])
<module 'matplotlib.pyplot' from '/usr/lib/python3/dist-packages/matplotlib/pyplot.py'>
plot_saliency(net0,train_input[:5])
<module 'matplotlib.pyplot' from '/usr/lib/python3/dist-packages/matplotlib/pyplot.py'>
train