TensorFlow2.0学习笔记2-tf2.0两种方式搭建神经网络
目录
一,TensorFlow2.0搭建神经网络八股
1)import 【引入相关模块】
2)train,test 【告知喂入网络的训练集测试集以及相应的标签】
3)model=tf.keras.models.Sequential 【在Sequential中搭建网络结构,相当于走一遍前向传播】
4)model.compile 【告知训练时选择哪种优化器,选择哪个损失函数,选择哪种评测指标】
5)model.fit 【在fit()中执行训练过程,告知训练集合测试集的输入特征和标签,告知batch大小,告知要迭代多少次数据集】
6)model.summary 【打印网络结构和参数统计】
二,用TensorFlow2.0实现iris分类
1)使用keras的Sequential方式实现
2)使用keras的class类搭建神经网络结构
三,用TensorFlow2.0训练MNIST数据集
1)使用keras的Sequential方式实现
2)使用keras的class类搭建神经网络结构
四,用TensorFlow2.0训练Fashion数据集
1)使用keras的Sequential方式实现
2)使用keras的class类搭建神经网络结构
一,TensorFlow2.0搭建神经网络八股
六步法:
1)import 【引入相关模块】
2)train,test 【告知喂入网络的训练集测试集以及相应的标签】
3)model=tf.keras.models.Sequential 【在Sequential中搭建网络结构,相当于走一遍前向传播】
- model=tf.keras.models.Sequential([]网络结构) # 描述各层网络结构,网络结构举例:
- 拉直层:tf.keras.layers.Flatten()
- 全连接层:tf.keras.layers.Dense(神经元个数,activation=“激活函数”,kernal_regularizer=哪种正则化), activation(字 符串给出),可选 relu、softmax、sigmoid、tanh; kernel_regularizer,可选tf.keras.regularizers.l1()、 tf.keras.regularizers.l2()
- 卷积层:tf.keras.layers.Conv2D(flters=卷积核个数,kernel_size=卷积核尺寸,strides=卷积步长,padding="valid" or "same")
- LSTM层:tf.keras.layers.LSTM()
4)model.compile 【告知训练时选择哪种优化器,选择哪个损失函数,选择哪种评测指标】
- model.compile(optimizer=优化器,loss=损失函数,metrics=【“准确率”】)
- Optimizer可选:
‘sgd’ or 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.losser.MeanSquareeError()
'sparse_categorical_crossentropy' or tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False)
- 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_=[0,1,0], y=[0.256,0.695,0.048]
5)model.fit 【在fit()中执行训练过程,告知训练集合测试集的输入特征和标签,告知batch大小,告知要迭代多少次数据集】
model.fit(训练集的输入特征,训练集的标签,
batch_size=,epochs=,
validation_data=(测试集的输入特征,测试集的标签),
validation_split=从测试集划分多少比例给测试集,
validation_freq=多少次epoch测试一次)
6)model.summary 【打印网络结构和参数统计】
二,用TensorFlow2.0实现iris分类
1)使用keras的Sequential方式实现
# 1)import 【引入相关模块】
import tensorflow as tf
from sklearn import datasets
import numpy as np# 2)train,test 【告知喂入网络的训练集测试集以及相应的标签】
x_train = datasets.load_iris().data
y_train = datasets.load_iris().targetnp.random.seed(116)
np.random.shuffle(x_train)
np.random.seed(116)
np.random.shuffle(y_train)
tf.random.set_seed(116)# 3)model=tf.keras.models.Sequential 【在Sequential中搭建网络结构,相当于走一遍前向传播】
model = tf.keras.models.Sequential([tf.keras.layers.Dense(3, activation='softmax', kernel_regularizer=tf.keras.regularizers.l2())
])# 4)model.compile 【告知训练时选择哪种优化器,选择哪个损失函数,选择哪种评测指标】
model.compile(optimizer=tf.keras.optimizers.SGD(lr=0.1),loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False),metrics=['sparse_categorical_accuracy'])# 5)model.fit 【在fit()中执行训练过程,告知训练集合测试集的输入特征和标签,告知batch大小,告知要迭代多少次数据集】
model.fit(x_train, y_train, batch_size=32, epochs=500, validation_split=0.2, validation_freq=20)# 6)model.summary 【打印网络结构和参数统计】
model.summary()
代码执行结果:
2)使用keras的class类搭建神经网络结构
class类模板:
#class MyModel(Model) model=MyModelclass MyModel(Model):def __init__(self):super(MyModel,self).__init__()定义网络结构块def call(self,x):调用网络结构块,实现前向传播return ymodel=MyModel()
Iris实例:
#class MyModel(Model) model=MyModelclass IrisModel(Model):def __init__(self):super(IrisModel,self).__init__()self.dl=Dense(3)def call(self,x):y=self.dl(x) # 输入特征4,直接采用1层网络结构return ymodel=IrisModel()
实际整体代码:
# 1)import 【引入相关模块】
import tensorflow as tf
from tensorflow.keras.layers import Dense
from tensorflow.keras import Model
from sklearn import datasets
import numpy as np# 2)train,test 【告知喂入网络的训练集测试集以及相应的标签】
x_train = datasets.load_iris().data
y_train = datasets.load_iris().targetnp.random.seed(116)
np.random.shuffle(x_train)
np.random.seed(116)
np.random.shuffle(y_train)
tf.random.set_seed(116)# 3) class MyModel()
class IrisModel(Model):def __init__(self):super(IrisModel, self).__init__()self.d1 = Dense(3, activation='sigmoid', kernel_regularizer=tf.keras.regularizers.l2())def call(self, x):y = self.d1(x)return ymodel = IrisModel()# 4)model.compile 【告知训练时选择哪种优化器,选择哪个损失函数,选择哪种评测指标】
model.compile(optimizer=tf.keras.optimizers.SGD(lr=0.1),loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False),metrics=['sparse_categorical_accuracy'])# 5)model.fit 【在fit()中执行训练过程,告知训练集合测试集的输入特征和标签,告知batch大小,告知要迭代多少次数据集】
model.fit(x_train, y_train, batch_size=32, epochs=500, validation_split=0.2, validation_freq=20)# 6)model.summary 【打印网络结构和参数统计】
model.summary()
运行结果和上面的类似:
三,用TensorFlow2.0训练MNIST数据集
1)使用keras的Sequential方式实现
# 1)import 【引入相关模块】
import tensorflow as tf# 2)train,test 【告知喂入网络的训练集测试集以及相应的标签】
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.models.Sequential 【在Sequential中搭建网络结构,相当于走一遍前向传播】
model = tf.keras.models.Sequential([tf.keras.layers.Flatten(),tf.keras.layers.Dense(128, 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 【在fit()中执行训练过程,告知训练集合测试集的输入特征和标签,告知batch大小,告知要迭代多少次数据集】
model.fit(x_train, y_train, batch_size=32, epochs=5, validation_data=(x_test, y_test), validation_freq=1)# 6)model.summary 【打印网络结构和参数统计】
model.summary()
代码执行结果:
2)使用keras的class类搭建神经网络结构
# 1)import 【引入相关模块】
import tensorflow as tf
from tensorflow.keras.layers import Dense, Flatten
from tensorflow.keras import Model# 2)train,test 【告知喂入网络的训练集测试集以及相应的标签】
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) class MyModel()
class MnistModel(Model):def __init__(self):super(MnistModel, self).__init__()self.flatten = Flatten()self.d1 = Dense(128, activation='relu')self.d2 = Dense(10, activation='softmax')def call(self, x):x = self.flatten(x)x = self.d1(x)y = self.d2(x)return ymodel = MnistModel()# 4)model.compile 【告知训练时选择哪种优化器,选择哪个损失函数,选择哪种评测指标】
model.compile(optimizer='adam',loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False),metrics=['sparse_categorical_accuracy'])# 5)model.fit 【在fit()中执行训练过程,告知训练集合测试集的输入特征和标签,告知batch大小,告知要迭代多少次数据集】
model.fit(x_train, y_train, batch_size=32, epochs=5, validation_data=(x_test, y_test), validation_freq=1)# 6)model.summary 【打印网络结构和参数统计】
model.summary()
执行结果:
四,用TensorFlow2.0训练Fashion数据集
另一个版本的TensorFlow2.0训练Fashion数据集:Fashion MNIST实战
1)使用keras的Sequential方式实现
# 1)import 【引入相关模块】
import tensorflow as tf# 2)train,test 【告知喂入网络的训练集测试集以及相应的标签】
fashion = tf.keras.datasets.fashion_mnist
(x_train, y_train),(x_test, y_test) = fashion.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0# 3)model=tf.keras.models.Sequential 【在Sequential中搭建网络结构,相当于走一遍前向传播】
model = tf.keras.models.Sequential([tf.keras.layers.Flatten(),tf.keras.layers.Dense(128, 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 【在fit()中执行训练过程,告知训练集合测试集的输入特征和标签,告知batch大小,告知要迭代多少次数据集】
model.fit(x_train, y_train, batch_size=32, epochs=5, validation_data=(x_test, y_test), validation_freq=1)# 6)model.summary 【打印网络结构和参数统计】
model.summary()
执行结果:
2)使用keras的class类搭建神经网络结构
# 1)import 【引入相关模块】
import tensorflow as tf
from tensorflow.keras.layers import Dense, Flatten
from tensorflow.keras import Model# 2)train,test 【告知喂入网络的训练集测试集以及相应的标签】
fashion = tf.keras.datasets.fashion_mnist
(x_train, y_train),(x_test, y_test) = fashion.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0# 3) class MyModel()
class MnistModel(Model):def __init__(self):super(MnistModel, self).__init__()self.flatten = Flatten()self.d1 = Dense(128, activation='relu')self.d2 = Dense(10, activation='softmax')def call(self, x):x = self.flatten(x)x = self.d1(x)y = self.d2(x)return ymodel = MnistModel()# 4)model.compile 【告知训练时选择哪种优化器,选择哪个损失函数,选择哪种评测指标】
model.compile(optimizer='adam',loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False),metrics=['sparse_categorical_accuracy'])# 5)model.fit 【在fit()中执行训练过程,告知训练集合测试集的输入特征和标签,告知batch大小,告知要迭代多少次数据集】
model.fit(x_train, y_train, batch_size=32, epochs=5, validation_data=(x_test, y_test), validation_freq=1)# 6)model.summary 【打印网络结构和参数统计】
model.summary()
执行结果:
TensorFlow2.0学习笔记2-tf2.0两种方式搭建神经网络相关推荐
- 5G NR - RACH学习笔记3 - RACH的两种接入类型
CBRA(Contention Based - 基于竞争的随机接入) 基于竞争的RACH过程如下: 1) UE --> NW : MSG1(RACH Preamble, RA-RNTI-) 2) ...
- 开关电源环路学习笔记(4)-两种误差放大器的传递函数
前面几节我们已经说明白了,在满足一定条件的时候,Buck开关电源可以看成是线性系统,并且可以是划分为4级的反馈控制系统. 1.反馈级:H(s) 2.放大和补偿级:Gc(s) 3.PWM调制级:Gpwm ...
- ActiViz学习点滴(四)——显示圆柱(两种方式构建圆柱体)
程序修改如下: vtkSphereSource sphere = vtkSphereSource.New(); sphere.SetCenter(5, 5, 5); vtkCylinderSource ...
- Android学习笔记之Fragment的两种使用方法
一.第一种方法: (1)Fragment的第一种使用方法是使用fragment加载单独的布局文件:(也就是xml的方式实现) 结构如下: activity_main.xml主要是在一个线性布局中添加两 ...
- mybatis学习笔记(2)两种配置实现增删改查
第二天学习mybatis,发现框架的存在确实是省了我们很多时间,我们完全可以把一些操作简化,或者实现简单的封装提供我们使用.昨天是跟着教程云里雾里的实现了配置,今天再次使用就方便很多. String ...
- openvc学习笔记(4)——两种方法在没有环境下运行程序
参考博客:http://blog.csdn.net/xiaowei_cqu/article/details/8066329 OpenCV的安装总结 我们下载的OpenCV安装包一般包括源码,示例,文档 ...
- WebStorm学习笔记001---webstorm-删除项目 两种方法
webstorm上删除项目,竟然浪费了我十几分钟时间,这让我不得不很气愤的记录下来,以防像我一样的悲催男在webstorm js开发神器上删除项目都找不到. webstorm,首先关闭项目,然后移动到 ...
- Java学习笔记——显示当前日期的三种方式
一.Date类:这是一种过时的表达方式 import java.util.Date; Date date = new Date();System.out.println((1900+date.getY ...
- java如何显示当天世界_Java学习笔记——显示当前日期的三种方式
一.Date类:这是一种过时的表达方式 import java.util.Date;Date date = new Date(); System.out.println((1900+date.getY ...
最新文章
- python 写cs程序_Python cs.cmdutils包_程序模块 - PyPI - Python中文网
- Learn Python The Hard Way(20)
- HBuilderX 连接电脑的模拟器问题
- Android中Activity和task,活动亲和力,启动模式,活动状态以及生命周期,激活钝化
- css 中的伪类选择器before 与after
- 四叶草引导windows和linux,Windows环境下使用Clover四叶草引导双硬盘安装OSX 10.11.5原版镜像...
- MySQL数据库设置主从同步
- css设置自适应屏幕高度
- HTML教程(完整版).pdf,HTML教程详解(完整版).pdf
- Vue中自定义指令directive的使用
- 怎么拼魔方6个面方法_怎么拼齐魔方6个面
- 星际争霸1,如何有效提高apm和hotkey
- 利用VRRP功能实现简单的路由器备份(图)
- C语言的发展及其特点
- vue 默认加载某一子路由
- qs计算机专业排名2017,2017年qs计算机专业大学排名
- 学生管理系统(大数据实验室)
- 服务器的原点和限位信号,CANopen--基于DS402协议的伺服电机原点回零模式实现
- h5 微信公众号获取当前位置
- Autofac的基本使用
热门文章
- Win10开机取消微软登录密码
- word柱状图垂直轴数值设定_Excel图表中设置坐标轴的字体、图案格式、刻度格式和数字格式的方法...
- 如何实现多源异构系统数据整合?
- Chrome DevTools 通过 cdp 调节 CPU Throttling
- 怎样做好路演PPT/keynote
- 几何画板用迭代法作图的技巧
- Java使用opencv调用微信扫描二维码引擎,附带windows和linux需要的动态库文件
- 阿里云服务器购买及使用流程(新手入门图文教程)
- 制造业干货,只需3步,快速提高产品良率!
- ZOJ Yukari's Birthday