import numpy as np
np.random.seed(1337)
# 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
from keras.utils import plot_model
f = np.load('data/mnist.npz')
X_train, Y_train = f['x_train'], f['y_train']
X_test, Y_test = f['x_test'], f['y_test']
f.close()
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)
model = Sequential()
model.add(Convolution2D(batch_input_shape=(None, 1, 28, 28), filters=32, kernel_size=5, strides=1, padding='same',
data_format='channels_first', activation='relu'))
model.add(MaxPooling2D(pool_size=2, strides=2, padding='same', data_format='channels_first'))
model.add(Convolution2D(filters=64, kernel_size=5, strides=1, padding='same',
data_format='channels_first', activation='relu'))
model.add(MaxPooling2D(pool_size=2, strides=2, padding='same', data_format='channels_first'))
model.add(Flatten())
model.add(Dense(1024))
model.add(Activation('relu'))
model.add(Dense(10))
model.add(Activation('softmax'))
plot_model(model, to_file='model1.png', show_shapes=True)
adam = Adam(lr=0.0001)
model.compile(optimizer=adam, loss='categorical_crossentropy', metrics=['accuracy'])
print('Training --------------')
model.fit(X_train, Y_train, epochs=1, batch_size=64)
print('Testing ---------------')
loss, accuracy = model.evaluate(X_test, Y_test)
print('loss: ', loss, '\naccuracy: ', accuracy)
就是通过:
plot(model, to_file='model1.png',show_shapes=True)
生成一个模型图,第一个参数为模型,第二个为要生成图片的路径及文件名,还可以指定两个参数:
show_shapes:指定是否显示输出数据的形状,默认为False
show_layer_names:指定是否显示层名称,默认为True
看一下生成的图: