神经网络搭建六步法

1.keras介绍

tf.keras 是 tensorflow2 引入的高封装度的框架,可以用于快速搭建神经网络模型,keras 为支持快速实验而生,能够把想法迅速转换为结果,是深度学习 框架之中最终易上手的一个,它提供了一致而简洁的API,能够极大地减少一般 应用下的工作量,提高代码地封装程度和复用性。

2.tf.keras 搭建神经网络六部法

第一步:import 相关模块,如 import tensorflow as tf。

第二步:指定输入网络的训练集和测试集,如指定训练集的输入 x_train 和标签 y_train,测试集的输入 x_test 和标签 y_test。

第三步:逐层搭建网络结构,model = tf.keras.models.Sequential()。

第四步:在 model.compile()中配置训练方法,选择训练时使用的优化器、损失 函数和最终评价指标。

第五步:在 model.fit()中执行训练过程,告知训练集和测试集的输入值和标签、 每个 batch 的大小(batchsize)和数据集的迭代次数(epoch)。

第六步:使用 model.summary()打印网络结构,统计参数数目。

下面对“六步法”中出现的函数做一些介绍

tf.keras.models.Sequential()

Sequential 函数是一个容器,描述了神经网络的网络结构,在Sequential函数的输入参数中描述从输入层到输出层的网络结构

例如

model=tf.keras.Sequential(layers=[tf.keras.layers.Dense(3,activation="relu"),                        tf.keras.layers.Dense(3,activation="softmax")])

常用的层有:

  • 拉直层 tf.keras.layers.Flatten():拉直层可以变换张量的尺寸,把输入特征拉直为一维数组,是不含计算参数的层。
  • 全连接层 tf.keras.layers.Dense(神经元个数,activation=”激活函数”, kernel_regularizer=”正则化方式”)。
  • 卷积层 tf.keras.layers.Conv2D(filter=卷积核个数,kernel_size = 卷积核尺寸, strides = 卷积步长, padding = “valid” or “same”)
  • LSTM 层 tf.keras.layers.LSTM()

其中activation(字符串给出)可选 relu、softmax、sigmoid、tanh等

kernel_regularizer 可选 tf.keras.regularizers.l1()、 tf.keras.regularizers.l2()

Model.compile()

Compile用于配置神经网络的训练方法,告知训练时使用的优化器损失函数准确率评测标准

Model.compile(optimizer = 优化器,loss = 损失函数,metrics = [“准确率”])

其中:

  • optimizer可以是字符串形式给出的优化器名字,也可以是函数形式,使用函数 形式可以设置学习率、动量和超参数。
优化器名字 函数形式
‘sgd’ tf.optimizers.SGD(lr=学习率,decay=学习率衰减率, momentum=动量参数)
‘adagrad’ tf.keras.optimizers.Adagrad(lr=学习率, decay=学习率衰减率)
‘adadelta’ tf.keras.optimizers.Adadelta(lr=学习率, decay=学习率衰减率)
‘adam’ tf.keras.optimizers.Adam (lr=学习率, decay=学习率衰减率)
  • Loss可以是字符串形式给出的损失函数的名字,也可以是函数形式。
损失函数名字 函数形式 备注
‘mse’ tf.keras.losses.MeanSquaredError()
‘sparse_categorical_crossentropy‘ tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False) 如果输出经过了softmax转化为概率,那么这选择False,如果没有选择为True
  • Metrics标注网络评测指标。
网络评测指标名字 备注
‘accuracy’ y_和 y 都是数值(标签类型),如 y_=[1] y=[1]。
‘categorical_accuracy’ y_和 y 是以独热码和概率分布表示。如 y_=[0, 1, 0], y=[0.256, 0.695, 0.048]。
‘sparse_ categorical_accuracy’ y_是以数值形式给出,y是以概率分布表示。如 y_=[1],y=[0.256, 0.695, 0.048]。

eg.

model.compile(optimizer=tf.keras.optimizers.Adam(),loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False),metrics=['sparse_categorical_accuracy']
)

model.fit()

model.fit的参数有:

  • 训练集的输入特征x_train,
  • 训练集的标签y_train,
  • batch_size,
  • epochs,
  • validation_data = (测试集的输入特征,测试集的标签),
  • validataion_split = 从测试集划分多少比例给训练集,
  • validation_freq = 测试的 epoch 间隔次数)

validation_data和validataion_split 两者选择一个使用即可。使用validation_data需要传递测试数据,而使用validataion_split不需要传递测试数据,测试数据从训练数据中划分出一部分。

eg.

# 将训练数据的20%划分出来用于测试
model.fit(x_train,y_train,batch_size=32,epochs=500,validation_split=0.2,validation_freq=20)# 或# 指定测试数据
model.fit(x_train,y_train,batch_size=32,epochs=500,validation_data=(x_test,y_test),validation_freq=20)

model.summary()

summary 函数用于打印网络结构和参数统计。

3.MNIST数据集手写数字识别复现

# 1.import 相关模块
import tensorflow as tf
from tensorflow.keras.layers import Dense, Flatten# 2.指定输入网络的训练集和测试集
mnist=tf.keras.datasets.mnist
(x_train,y_train),(x_test,y_test)=mnist.load_data()
x_train,x_test=x_train/255.0,x_test/255.0# 3.逐层搭建网络结构
# 两个全连接层
model=tf.keras.Sequential([tf.keras.layers.Flatten(),tf.keras.layers.Dense(100,activation="relu"),tf.keras.layers.Dense(10,activation="softmax")
])# 4.在 model.compile()中配置训练方法
model.compile(optimizer="adam",loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False),metrics=['sparse_categorical_accuracy'])# 5.在 model.fit()中执行训练过程
model.fit(x_train,y_train,batch_size=100,epochs=5,validation_data=(x_test,y_test),validation_freq=1)# 6.使用 model.summary()打印网络结构
model.summary()

使用 class 来声明网络结构

在“六步法”的第三步 搭建网络结构 中,使用Sequential可以快速搭建网络结构,但是如果网络包含跳连等其他复杂网络结构,Sequential 就无法表示了

这就需要使用class来声明网络结构

简单来说就是我们需要声明一个类,这个类继承自tensorflow.keras.Model,把我们要搭建的网络结构和正向传播过程写在这个类里。看下面代码会很好理解:

class MyModel(Model):def __init__(self):super(MyModel, self).__init__()self.flatten=Flatten()self.d1=Dense(100,activation="relu")self.d2=Dense(10,activation="softmax")def call(self,x):y=self.flatten(x)y=self.d1(y)y=self.d2(y)return ymodel=MyModel()

"__init__”方法中设置网络的结构。

“call”方法接受输入的特征数据,然后数据逐层正向计算,返回输出。

使用class来声明网络结构只是改变了“六步法”中的第三步的具体操作,其他的步骤完全不会受到干扰

eg.

# 1.import 相关模块
import tensorflow as tf
from tensorflow.keras.layers import Dense, Flatten
from tensorflow.keras import Model# 2.指定输入网络的训练集和测试集
mnist=tf.keras.datasets.mnist
(x_train,y_train),(x_test,y_test)=mnist.load_data()
x_train,x_test=x_train/255.0,x_test/255.0# model=tf.keras.Sequential([
#     tf.keras.layers.Flatten(),
#     tf.keras.layers.Dense(100,activation="relu"),
#     tf.keras.layers.Dense(10,activation="softmax")
# ])# 3.逐层搭建网络结构
# 两个全连接层
class MyModel(Model):def __init__(self):super(MyModel, self).__init__()self.flatten=Flatten()self.d1=Dense(100,activation="relu")self.d2=Dense(10,activation="softmax")def call(self,x):y=self.flatten(x)y=self.d1(y)y=self.d2(y)return ymodel=MyModel()# 4.在 model.compile()中配置训练方法
model.compile(optimizer="adam",loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False),metrics=['sparse_categorical_accuracy'])# 5.在 model.fit()中执行训练过程
model.fit(x_train,y_train,batch_size=100,epochs=5,validation_data=(x_test,y_test),validation_freq=1)# 6.使用 model.summary()打印网络结构
model.summary()

keras神经网络搭建六步法相关推荐

  1. 【Tensorflow学习三】神经网络搭建八股“六步法”编写手写数字识别训练模型

    神经网络搭建八股"六步法"编写手写数字识别训练模型 Sequential用法 model.compile(optimizer=优化器,loss=损失函数,metrics=[&quo ...

  2. [Python人工智能] 十六.Keras环境搭建、入门基础及回归神经网络案例

    从本专栏开始,作者正式研究Python深度学习.神经网络及人工智能相关知识.前一篇文章详细讲解了无监督学习Autoencoder的原理知识,然后用MNIST手写数字案例进行对比实验及聚类分析.这篇文章 ...

  3. Ch2r_ood_understanding 本文档为论文限定领域口语对话系统中超出领域话语的对话行为识别的部分实验代码。代码基于Python,需要用到的外部库有: Keras(搭建神经网络) S

    Ch2r_ood_understanding 本文档为论文限定领域口语对话系统中超出领域话语的对话行为识别的部分实验代码.代码基于Python,需要用到的外部库有: Keras(搭建神经网络) Sci ...

  4. keras神经网络回归预测_如何使用Keras建立您的第一个神经网络来预测房价

    keras神经网络回归预测 by Joseph Lee Wei En 通过李维恩 一步一步的完整的初学者指南,可使用像Deep Learning专业版这样的几行代码来构建您的第一个神经网络! (A s ...

  5. Python预测基金净值:keras神经网络

    Python预测基金净值:keras神经网络 如何搭建神经网络预测基金净值 一.时间窗口 二.爬基金数据,准备作为训练集.验证集.测试集 三.建模,读入数据,训练,验证 四.看图 总结 如何搭建神经网 ...

  6. GitChat · 人工智能 | 如何零基础用 Keras 快速搭建实用深度学习模型

    GitChat 作者:谢梁 原文: 如何零基础用 Keras 快速搭建实用深度学习模型 关注微信公众号:GitChat 技术杂谈 ,一本正经的讲技术 [不要错过文末活动] 前言 在这篇小文章中,我们将 ...

  7. 双分支CNN卷积神经网络搭建 TensorFlow

    在掌握了简单CNN卷积网络的搭建方法后,我们来了解一下双分支CNN卷积网络的搭建基本方法. 下面我们来用代码构建一个如下结构的网络: 现在网络上面关于传统神经网络搭建的讲解有很多,但是对于多分支网络的 ...

  8. Keras神经网络的学习与使用(1)

    Keras神经网络层学习与使用 Keras的简单介绍 Keras框架中的方法介绍 Compile()方法 fit()方法 summary()方法 evaluate()方法 perdict()方法 Ke ...

  9. Excel数据分析学习笔记(一)数据分析六步法和重要分析模型

    第一章 数据分析类型: 描述性统计分析,概括表述事物关系 探索性数据分析,发现数据的新特征 验证性数据分析,对假设进行证伪或证实 数据分析六步法 1.确定目标(这个很重要,在实践当中是比技术还要重要的 ...

  10. PYTHON链家租房数据分析:岭回归、LASSO、随机森林、XGBOOST、KERAS神经网络、KMEANS聚类、地理可视化...

    全文下载链接:http://tecdat.cn/?p=29480 作者:Xingsheng Yang 1 利用 python 爬取链家网公开的租房数据: 2 对租房信息进行分析,主要对房租相关特征进行 ...

最新文章

  1. 计算机网络中路由器,浅析计算机网络中的路由器
  2. Treelabeling 异或性质,位运算,染色法,二分图(2100)
  3. php rss xml,php 一个完全面向对象的RSS/XML类的简单示例
  4. SQL SERVER 2016研究三
  5. 第 1-7 课:数组和排序算法 + 面试题
  6. Linux 守护进程创建原理及简易方法
  7. JS 中的事件冒泡与捕获
  8. AI科学计算领域的再突破,昇思MindSpore做“基石”的决心有多强?
  9. MDT2012+ADK8.0+WDS部署Windows客户端(一)部署概念和方法论
  10. LeetCode刷题——63. 不同路径 II
  11. pytorch自定义初始化权重
  12. Java 线程死锁初理解
  13. c语言实验报告1答案,郑州大学C语言实验报告答案
  14. ttest函数使用方法_TTEST 函数的学习方法(Excel)
  15. Matlab矩阵操作
  16. phpcms修改了配置文件之后出现Warning: date() expects parameter 2 to be long..错误
  17. 如何高效开展测试用例评审?附用例评审检查清单及用例评审报告模板
  18. 拷贝出师表到另一个文件,恢复顺序
  19. C中输入半径计算球体的体积
  20. android刷机工具mac版,Android刷机教程(mac系统)

热门文章

  1. 京东php乱码,浏览器打开京东商城网页显示乱码该怎么办?
  2. C#实现的简单的随机抽号器
  3. 配置中文XeLaTex环境
  4. 威联通Nas进阶配置
  5. C语言九九乘法表的代码(含注释)
  6. 最新!谷歌浏览器去除CSDN广告插件
  7. 笔记本win10 1709 安装 v4w的教程
  8. java排查full gc_一次full gc的排查经历
  9. pytorch(8)-- resnet101 迁移学习记录
  10. 烽火携手中航信斩获“十佳上云”优秀案例大奖