利用keras定义简单神经网络

我是一个python小白,最近在学习一些有关神经网络的知识:
偶然之间发现了一本有关keras的书还不错,有详细的代码,我也不知道该怎么学习keras,先从分析代码开始,内容会有点啰唆,大神轻喷。以下代码引自《keras深度学习实战》

from __future__ import print_function 
import numpy as np
from keras.datasets import mnist
from keras.models import Sequential
from keras.layers.core import Dense, Activation
from keras.optimizers import SGD
from keras.utils import np_utils

np.random.seed(1671)  # 重复性设置

# 网络和训练
NB_EPOCH = 200
BATCH_SIZE = 128
VERBOSE = 1
NB_CLASSES = 10   # 输出个数等于数字个数
OPTIMIZER = SGD() # SGD 优化器
N_HIDDEN = 128
VALIDATION_SPLIT=0.2 # 训练集中用作验证集的数据比例

#数据:混合并划分训练集和测试集
#
(X_train, y_train), (X_test, y_test) = mnist.load_data()

#X_train 是 60000 行 28x28 的数据 --> 变形为 60000 x 784
RESHAPED = 784
#
X_train = X_train.reshape(60000, RESHAPED)
X_test = X_test.reshape(10000, RESHAPED)
X_train = X_train.astype('float32')
X_test = X_test.astype('float32')

# 归一化处理
#
X_train /= 255
X_test /= 255
print(X_train.shape[0], 'train samples')
print(X_test.shape[0], 'test samples')

# 将类向量转换为二值类别矩阵
Y_train = np_utils.to_categorical(y_train, NB_CLASSES)
Y_test = np_utils.to_categorical(y_test, NB_CLASSES)

# 10个输出
# 最后是softmax激活函数

model = Sequential()
model.add(Dense(NB_CLASSES, input_shape=(RESHAPED,))) # 全连接层
model.add(Activation('softmax')) #激活层

model.summary()  #打印出模型概况,它实际调用的是keras.utils.print_summary

model.compile(loss='categorical_crossentropy',
              optimizer=OPTIMIZER,
              metrics=['accuracy'])

history = model.fit(X_train, Y_train,
                    batch_size=BATCH_SIZE, epochs=NB_EPOCH,
                    verbose=VERBOSE, validation_split=VALIDATION_SPLIT) #verbose 是日志显示
score = model.evaluate(X_test, Y_test, verbose=VERBOSE)
print("\nTest score:", score[0])
print('Test accuracy:', score[1])

上面的代码用Keras定义一个识别MNIST手写数字的网络,利用一个简单的神经网络最后训练出来的效果其实还挺好的。
利用keras定义简单神经网络_第1张图片
利用keras构建神经网络模型其实很简洁
1.模块导入

#
from __future__ import print_function 
import numpy as np
from keras.datasets import mnist
from keras.models import Sequential
from keras.layers.core import Dense, Activation
from keras.optimizers import SGD
from keras.utils import np_utils

咱们一行一行解释这些代码是干啥用的?

from __future__ import print_function

加上这句话后,即使在python2.X,使用print就得像python3.x那样加括号使用。python2.X中print不需要括号,而在python3.X中则需要。如果是python3.X版本,这句话加不加都没影响。

import numpy as np

导入numpy库,NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。

from keras.datasets import mnist
from keras.models import Sequential
from keras.layers.core import Dense, Activation
from keras.optimizers import SGD
from keras.utils import np_utils

第一行是从keras.datasets加载手写数字数据集,keras主要有7种,详细介绍可以参考这位大神写的博客 https://blog.csdn.net/weixin_41770169/article/details/80249986
第二行是从keras.models 中导入序贯(Sequential)模型,序贯模型是多个网络层的线性堆叠,也就是“一条路走到黑”。官方文档有具体解释: https://keras-cn.readthedocs.io/en/latest/getting_started/sequential_model/
第三行 layer是层,Dense是全连接层,Activation是激活层
第四行是优化器optimizer, 这个模型使用的是SGD随机梯度下降优化算法
第五行 这个的功能是实现编码输出标签。

你可能感兴趣的:(利用keras定义简单神经网络)