官方介绍:
Keras 是一个用 Python 编写的高级神经网络 API,它能够以 TensorFlow, CNTK, 或者 Theano 作为后端运行。Keras 的开发重点是支持快速的实验。能够以最小的时延把你的想法转换为实验结果,是做好研究的关键。
如果你在以下情况下需要深度学习库,请使用 Keras:
Keras 兼容的 Python 版本: Python 2.7-3.6。
并且,官方推荐tensorflow搭配keras一起使用。
讲完定义,下面来看看keras怎么在代码中运用。
分步介绍:
本次代码以简单识别鸢尾花数据集为例来讲解各步骤详细信息,中间部分是各部分代码具体实现,各参数讲解在文章末尾,还请各位小伙伴耐住性子往下看
1.import 导入相关库和数据集,例如
2.train,test 切分训练集和测试集,为了后面训练和测试用,切分办法常用两种,一种是用np.shuffle打乱并且设置随机数种子(前面几个文章有),另一种是用sklearn的库
from sklearn.model_selection import train_test_split
然后将data数据和target标签数据进行切分
# 导入数据
x= load_iris().data
y= load_iris().data
x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.2)
3.model 这一步是很关键的一步,利用keras.models.Sequential或者tf.keras.models.Sequential(这俩其实是一个东西,如果你导入的时候用的是from tensorflow import keras,那么就写第一个,如果只导入了tensorflow,就用第二个写法)构建训练模型,
最简单的加一个4个神经元的网络
model = tf.keras.models.Sequential([
keras.layers.Dense(4,activation=tf.nn.relu)
])
这些参数有什么含义会在下面讲解,各位小伙伴莫急,
4.model.compile model.compile()方法用于在配置训练方法时,告知训练时用的优化器、损失函数和准确率评测标准,这里我用的是
model.compile(optimizer='sgd',loss='mean_squared_error')
同样后面讲解参数
之后便是第五步,5.model.fit 拟合训练数据
model.fit(x_train,y_train,epochs=500)
6.model.summary
model.summary()
至此,利用keras搭建神经网络代码完结,下面看看完整代码和运行效果
import tensorflow as tf
from tensorflow import keras
from sklearn.datasets import load_iris
import numpy as np
from sklearn.model_selection import train_test_split
# 导入数据
x= load_iris().data
y= load_iris().data
x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.2)
model = tf.keras.models.Sequential([
keras.layers.Dense(4,activation=tf.nn.relu)
])
model.compile(optimizer='sgd',loss='mean_squared_error')
model.fit(x_train,y_train,epochs=500)
result = model.predict(x_test)
model.summary()
print(result)
下面我们来具体看看构建网络中的各参数选择:
首先第一步import不用过多解释,导入需要的数据集和,重点在第3,4,5步
拉直层:tf.keras.layers.Flatten()
Flatten代表拉直层,例如输入的数据是一个(28x28)个像素点的图片,那么在Flatten层中这个图片会被降维,变成(1,784)的数组,在图片处理中构建的网络结构中第一步一般都是用Flatten降维数据,再送入后面的神经元中.
全连接层:tf.keras.layers.Dense(神经元个数,activation="激活函数",kernel_regularizer=哪种正则化)
神经元个数代表该隐藏层中用于处理数据的神经元有几个,
activation(字符串给出)可选:relu,softmax,sigmoid,tanh kernel_regularizer可选:tf.keras.regularizers.l1(),tf.keras.regularizers.l2()
relu,softmax,sigmoid和tanh在前面文章中有讲到,忘记的小伙伴可以回去翻看前面的文章,或者去找找更详细的介绍,这里不多赘述。
正则化分为两种,L1正则和L2正则
卷积层:tf.keras.layers.Conv2D(filters=卷积核个数,kernel_size=卷积层尺寸,strides=卷积步长,padding="valid")
Conv2D代表卷积层,在后面讲解卷积神经网络的时候后用刀,这里先做了解,知道有这个东西
这一步是模型的一些参数,包括损失函数,优化器,准确率等等参数配置,
model.compile(optimizer=优化器,loss=损失函数,metrics=["准确率"])
优化器包括以下几种:
'sgd' or tf.keras.optimizers.SGD(lr=学习率,momentum=动量参数) 'adagrad' or tf.keras.optimizers.Adagrad(lr=学习率) 'adadelta' or tf.keras.optimizers.Adadelta(lr=学习率) 'adam' or tf.keras.optimizers.Adam(lr=学习率,beta_1=0.9,beta_2=0.999)
loss可选:
'mse' or tf.keras.losses.MeanSquaredError()
'sparse_categorical_crossentropy' or tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False)
from_logits: 为True时,会将y_pred转化为概率(用softmax),否则不进行转换,通常情况下用True结果更稳定
Metrics可选 :
'accuracy':y_和y都是数值
'categorical_accuracy':y_和y都是独热码(概率分布)
'sparse_categorical_accuracy':y_是数值,y是独热码
# model.fit(训练集的输入特征,训练集的标签,
# batch_size=,epochs=,
# validation_data=(测试集的输入特征,测试集的标签
# validation_split=从训练集划分多少比例给测试集)
# validation_freq=多少次epoch测试一次)
# model.summary()生成报告
在本次程序中,构建的是一个单层网络,只有四个神经元
单层网络中选择的激活函数为relu函数,compile中选择的损失函数为均方误差mean_squared_error,优化器选择sgd
fit中迭代次数为500,最后summary查看训练结果