Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import pandas
- import numpy
- from keras.models import Sequential
- from keras.layers import Dense
- from keras.layers import Dropout
- from keras.layers import Flatten
- from keras.layers.convolutional import Convolution2D
- from keras.layers.convolutional import MaxPooling2D
- from keras.utils import np_utils
- from keras import backend as K
- K.set_image_dim_ordering('th')
- # Constants
- IMG_ROWS = IMG_COLUMNS = 28
- NUM_EPOCHS = 250
- DROPOUT = 0.2
- BATCH_SIZE = 50
- SEED = 0
- numpy.random.seed(SEED);
- # Load data
- train = pandas.read_csv("../input/train.csv").values
- test = pandas.read_csv("../input/test.csv").values
- # Data prep
- # Separate data into pixels (X) and class (Y)
- trainX = train[:, 1:].reshape(train.shape[0], 1, IMG_ROWS, IMG_COLUMNS)
- trainX = trainX.astype(float)
- testX = test.reshape(test.shape[0], 1, IMG_ROWS, IMG_COLUMNS)
- testX = testX.astype(float)
- # Normalise pixel data
- trainX /= 255.0
- testX /= 255.0
- # One hot encode outputs
- trainY = np_utils.to_categorical(train[:,0])
- numClasses = trainY.shape[1]
- # Build model
- model = Sequential()
- model.add(Convolution2D(32, 3, 3, activation='relu', border_mode='same',
- input_shape=(1, IMG_ROWS, IMG_COLUMNS)))
- model.add(Convolution2D(32, 3, 3, activation='relu', border_mode='same'))
- model.add(MaxPooling2D(strides=(2, 2)))
- model.add(Convolution2D(64, 1, 3, activation='relu', border_mode='same'))
- model.add(Convolution2D(64, 3, 1, activation='relu', border_mode='same'))
- model.add(MaxPooling2D(strides=(2, 2)))
- model.add(Convolution2D(128, 1, 1, activation='relu', border_mode='same'))
- model.add(Convolution2D(128, 1, 1, activation='relu', border_mode='same'))
- model.add(MaxPooling2D(strides=(2, 2)))
- model.add(Flatten())
- model.add(Dropout(0.2))
- model.add(Dense(256, activation='relu'))
- model.add(Dense(numClasses, activation='softmax'))
- model.summary()
- # Compile model
- model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
- # Fit model
- model.fit(trainX, trainY, nb_epoch=NUM_EPOCHS, batch_size=BATCH_SIZE, verbose=2)
- # Evaluate
- yPred = cnn.predict_classes(testX)
- print(yPred)
- # Save
- numpy.savetxt('mnist-cnn.csv', numpy.c_[range(1,len(yPred)+1),yPred], delimiter=',', header = 'ImageId,Label', comments = '', fmt='%d')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement