| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- """
- To know more or get code samples, please visit my website:
- https://mofanpy.com/tutorials/
- Or search: 莫烦Python
- Thank you for supporting!
- """
- # please note, all tutorial code are running under python3.5.
- # If you use the version like python2.7, please modify the code accordingly
- # 6 - CNN example
- # to try tensorflow, un-comment following two lines
- # import os
- # os.environ['KERAS_BACKEND']='tensorflow'
- import numpy as np
- np.random.seed(1337) # for reproducibility
- from keras.datasets import mnist
- from keras.utils import np_utils
- from keras.models import Sequential
- from keras.layers import Dense, Activation, Convolution2D, MaxPooling2D, Flatten
- from keras.optimizers import Adam
- # download the mnist to the path '~/.keras/datasets/' if it is the first time to be called
- # training X shape (60000, 28x28), Y shape (60000, ). test X shape (10000, 28x28), Y shape (10000, )
- (X_train, y_train), (X_test, y_test) = mnist.load_data()
- # data pre-processing
- X_train = X_train.reshape(-1, 1,28, 28)/255.
- X_test = X_test.reshape(-1, 1,28, 28)/255.
- y_train = np_utils.to_categorical(y_train, num_classes=10)
- y_test = np_utils.to_categorical(y_test, num_classes=10)
- # Another way to build your CNN
- model = Sequential()
- # Conv layer 1 output shape (32, 28, 28)
- model.add(Convolution2D(
- batch_input_shape=(None, 1, 28, 28),
- filters=32,
- kernel_size=5,
- strides=1,
- padding='same', # Padding method
- data_format='channels_first',
- ))
- model.add(Activation('relu'))
- # Pooling layer 1 (max pooling) output shape (32, 14, 14)
- model.add(MaxPooling2D(
- pool_size=2,
- strides=2,
- padding='same', # Padding method
- data_format='channels_first',
- ))
- # Conv layer 2 output shape (64, 14, 14)
- model.add(Convolution2D(64, 5, strides=1, padding='same', data_format='channels_first'))
- model.add(Activation('relu'))
- # Pooling layer 2 (max pooling) output shape (64, 7, 7)
- model.add(MaxPooling2D(2, 2, 'same', data_format='channels_first'))
- # Fully connected layer 1 input shape (64 * 7 * 7) = (3136), output shape (1024)
- model.add(Flatten())
- model.add(Dense(1024))
- model.add(Activation('relu'))
- # Fully connected layer 2 to shape (10) for 10 classes
- model.add(Dense(10))
- model.add(Activation('softmax'))
- # Another way to define your optimizer
- adam = Adam(lr=1e-4)
- # We add metrics to get more results you want to see
- model.compile(optimizer=adam,
- loss='categorical_crossentropy',
- metrics=['accuracy'])
- print('Training ------------')
- # Another way to train the model
- model.fit(X_train, y_train, epochs=1, batch_size=64,)
- print('\nTesting ------------')
- # Evaluate the model with the metrics we defined earlier
- loss, accuracy = model.evaluate(X_test, y_test)
- print('\ntest loss: ', loss)
- print('\ntest accuracy: ', accuracy)
|