Keras搭建神经网络常用代码讲解
先啰嗦两句
Keras搭建神经网络真的已经算是很方便了。不信你对比一下tensorflow。。。但是根据本人的经验还是先学习Tensorflow再学习Keras。不过由于Keras比较简单我就在这里先对它做总结了。
本文有足够量的超链接足够读者学好Keras的基础!
有想要实际项目操作的代码有想要的同学在下方给我留言然后我会和你私信,同样是附带了在这些基础之上的解释!本文在最后给出了基础实战代码详解,只适合于新手小白!
按照顺序建立神经网络
from keras.models import Sequential
这个模块是要按照顺序建立神经网络
表示开始建立一个新的神经网络:
model = Sequential()
导入全连接层模块
from keras.layers import Dense
自动的从网上下载mnist自带的数据
from keras.datasets import mnist
举例说明:
(x_train, y_train), (x_test, y_test) = mnist.load_data()
转化成标签数据
from keras.utils import np_utils
举例说明:
y_train = np_utils.to_categorical(y_train, nb_classes = 10)
把标签变成长度为10的数据
若标签是3则在第3个数那里标上1 其他位置都是0
激励函数模块
from keras.layers import Activation
relu和softmax为两种激励函数
其中softmax广泛用于分类上
网友整理的常用激活函数及使用场合:
softmax: 在多分类中常用的激活函数,是基于逻辑回归的。
Softplus:softplus(x)=log(1+e^x),近似生物神经激活函数,最近出现的。
Relu:近似生物神经激活函数,最近出现的。
tanh:双曲正切激活函数,也是很常用的。
sigmoid:S型曲线激活函数,最常用的。
hard_sigmoid:基于S型激活函数。
linear:线性激活函数,最简单的。
model = Sequential([
Dense(32, input_dim = 784),
Activation('relu'),
Dense(10),
Activation('softmax')
# 进行分类的激励函数
])
导入优化器
from keras.optimizers import RMSprop Adam
from keras.layers import Dense, Activation, Convolution2D, MaxPooling2D, Flatten
简单概括如下:
-
sgd:随机梯度下降优化器(回归问题常用)。
-
RMSprop:通常是训练循环神经网络RNN的。
-
Adagrad:具有特定参数学习率的优化器,它根据参数在训练期间的更新频率进行自适应调整。参数接收的更新越多,更新越小。
-
Adam:常用于卷积神经网络
-
Nadam:Nadam 是采用 Nesterov momentum 版本的 Adam 优化器。
其中:
Convolution为卷积层
MaxPolling2D为池化层
Flatten将3维数据转换成1维 才能连接全连接层
增加卷积层
# 卷积层
model.add(Convolution2D(
nb_filter = 32,
# 滤波器有32个 每一个滤波器会产生一个特征值 每一个滤波器会生成一个图片
# 会有32个图片 最后生成的高度会为32层
nb_row = 5,
nb_col = 5,
border_mode = 'same'
# 过滤方式
input_shape = (1, 28, 28)
))
增加池化层
model.add(MaxPooling2D(
pool_size=(2, 2),
strides = (2, 2),
border_mode = 'same'
))
增加激励函数
model.add(Activation('relu'))
通过调用 compile 方法配置该模型的学习流程
model.compile(
optimizer = rmsporm,
loss = 'categorical_crossentropy'
metrics = ['accuracy']
)
对于compile和损失函数更详细地解释
fit()用于使用给定输入训练模型
model.fit(x_train, y_train, nb_epoch = 2, batch_size = 32)
evaluate()用于评估已经训练过的模型.返回损失值&模型的度量值
loss, accuracy = model.evaluate(x_test, y_test)
predict()用于实际预测.它为输入样本生成输出预测
Y_pred = model.predict(X_test)
照片随机处理模块
from keras.preprocessing.image import ImageDataGenerator
举例及解释:
aug = ImageDataGenerator(rotation_range=30, # 图片随机翻转角度
width_shift_range=0.1, # 图片水平偏移的幅度
height_shift_range=0.1, # 图片垂直偏移的幅度
shear_range=0.2, # 图片剪切强度
zoom_range=0.2, # 图片随机放大
horizontal_flip=True, # 开启随机水平翻转
fill_mode="nearest") # 当进行变换时超出边界的点将根据本参数给定的方法进行处理
将图片转化成数组
from keras.preprocessing.image import img_to_array
img_to_array 转换前后类型都是一样的,唯一区别是转换前元素类型是整型,转换后元素类型是浮点型
具体学习这个语句请看如下两个链接:
探讨了有无img_to_array的区别
直观地表达了这个函数的作用
注意!!!
本人提供了只对于新手小白的keras更详细的资料总结和代码详解,更详细的在文件的具体描述中:
更详细更系统的基础Keras代码实战详解而不是项目实战代码
如有问题欢迎留言或者私信!