Tensorflow2.0语法 - keras_API的使用(三)

转自 https://segmentfault.com/a/1190000021181739

前言

keras接口大都实现了 _call_ 方法。
母类 _call_ 调用了 call()。
因此下面说的几乎所有模型/网络层 都可以在定义后,直接像函数一样调用。
eg:

模型对象(参数)
网络层对象(参数)

我们还可以实现继承模板

导入

from tensorflow import keras

metrics (统计平均)

里面有各种度量值的接口
如:二分类、多分类交叉熵损失容器,MSE、MAE的损失值容器, Accuracy精确率容器等。
下面以Accuracy伪码为例:

acc_meter = keras.metrics.Accuracy() # 建立一个容器
for _ in epoches:
    for _ in batches:
        y = ...
        y_predict = ...
        acc_meter.update_state(y, y_predict) # 每次扔进去数据,容器都会自动计算accuracy,并储存

        if times % 100 == 0: # 一百次一输出, 设置一个阈值/阀门
            print(acc_meter.result().numpy())   # 取出容器内所有储存的数据的,均值准确率
    acc_meter。reset_states()    # 容器缓存清空, 下一epoch从头计数。

激活函数+损失函数+优化器

导入方式:

keras.activations.relu()    # 激活函数:以relu为例,还有很多
keras.losses.categorical_crossentropy() # 损失函数:以交叉熵为例,还有很多
keras.optimizers.SGD()      # 优化器:以随机梯度下降优化器为例
keras.callbacks.EarlyStopping()  # 回调函数: 以‘按指定条件提前暂停训练’回调为例

Sequential(继承自Model)属于模型

模型定义方式

定义方式1:

model = keras.models.Sequential( [首层网络,第二层网络。。。] )

定义方式1:

model = keras.models.Sequential()
model.add(首层网络)
model.add(第二层网络)

模型相关回调配置

logdir = ‘callbacks‘
if not os.path.exists(logdir):
    os.mkdir(logdir)
save_model_file = os.path.join(logdir, ‘mymodel.h5‘)

callbacks = [
    keras.callbacks.TensorBoard(logdir),    # 写入tensorboard
    keras.callbacks.ModelCheckpoint(output_model_file, save_best_only=True),  # 模型保存
    keras.callbacks.EarlyStopping(patience=5, min_delta=1e-3)  # 按条件终止模型训练
    # 验证集,每次都会提升,如果提升不动了,提升小于这个min_delta阈值,则会耐心等待5次。
    # 5次过后,要是还提升这么点。就提前结束。
]
# 代码写在这里,如何传递调用, 下面 “模型相关量度配置” 会提到

模型相关量度配置:((损失,优化器,准确率等)

说明,下面的各种量度属性,可通过字符串方式,也可通过上面讲的导入实例化对象方式。

model.compile(
    loss="sparse_categorical_crossentropy",    # 损失函数,这是字符串方式
    optimizer= keras.optimizers.SGD()          # 这是实例化对象的方式,这种方式可以传参
    metrics=[‘accuracy‘]  # 这项会在fit()时打印出来
)  # compile() 操作,没有真正的训练。
model.fit(
    x,y,
    epochs=10,                              # 反复训练 10 轮
    validation_data = (x_valid,y_valid),    # 把划分好的验证集放进来(fit时打印loss和val)
    validation_freq = 5,                    # 训练5次,验证一次。  可不传,默认为1。
    callbacks=callbacks,                    # 指定回调函数, 请衔接上面‘模型相关回调配置’

)   # fit()才是真正的训练 

模型 验证&测试

一般我们会把 数据先分成三部分(如果用相同的数据,起不到测试和验证效果,参考考试作弊思想):

  1. 训练集: (大批量,主体)
  2. 测试集: (模型所有训练结束后, 才用到)
  3. 验证集: (训练的过程种就用到)

说明1:(如何分离?)

1. 它们的分离是需要(x,y)组合在一起的,如果手动实现,需要随机打散、zip等操作。
2. 但我们可以通过 scikit-learn库,的 train_test_split() 方法来实现 (2次分隔)
3. 可以使用 tf.split()来手动实现

具体分离案例:参考上一篇文章: https://segmentfault.com/a/11...

说明2:(为什么我们有了测试集,还需要验证集?)

  1. 测试集是用来在最终,模型训练成型后(参数固定),进行测试,并且返回的是预测的结果值!!!!
  2. 验证集是伴随着模型训练过程中而验证)

代码如下:

loss, accuracy = model.evaluate( (x_test, y_test) ) # 度量, 注意,返回的是精度指标等
target = model.predict( (x_test, y_test) )          # 测试, 注意,返回的是 预测的结果!

可用参数

model.trainable_variables    # 返回模型中所有可训练的变量
# 使用场景: 就像我们之前说过的 gradient 中用到的 zip(求导结果, model.trainable_variables)

自定义Model

Model相当于母版, 你继承了它,并实现对应方法,同样也能简便实现模型的定义。

自定义Layer

同Model, Layer也相当于母版, 你继承了它,并实现对应方法,同样也能简便实现网络层的定义。

模型保存与加载

方法1:之前callback说的

方法2:只保存weight(模型不完全一致)

保存:

model = keras.Sequential([...])
...
model.fit()
model.save_weights(‘weights.ckpt‘)

加载:

假如在另一个文件中。(当然要把保存的权重要复制到本地目录)
model = keras.Sequential([...])    # 此模型构建必须和保存时候定义结构的一模一样的!
model.load_weights(‘weights.ckpt‘)
model.evaluate(...)
model.predict(...)

方法3:保存整个模型(模型完全一致)

保存:

model = keras.Sequential([...])
...
model.fit()
model.save(‘model.h5‘)    # 注意 这里变了,是 save

加载:(直接加载即可,不需要重新复原建模过程)

假如在另一个文件中。(当然要把保存的模型要复制到本地目录)
model = keras.models.load_model(‘model.h5‘)  # load_model是在 keras.models下
model.evaluate(...)
model.predict(...)

方法4:导出可供其他语言使用(工业化)

保存: (使用tf.saved_model模块)

model = keras.Sequential([...])
...
model.fit()
tf.saved_model.save(model, ‘目录‘)

加载:(使用tf.saved_model模块)

model = tf.saved_model.load(‘目录‘)

原文地址:https://www.cnblogs.com/whw1314/p/12121908.html

时间: 2024-10-22 11:14:37

Tensorflow2.0语法 - keras_API的使用(三)的相关文章

C#4.0语法糖之第三篇: 参数默认值和命名参数 对象初始化器与集合初始化器

今天继续写上一篇文章C#4.0语法糖之第二篇,在开始今天的文章之前感谢各位园友的支持,通过昨天写的文章,今天有很多园友们也提出了文章中的一些不足,再次感谢这些关心我的园友,在以后些文章的过程中不断的完善以及自我提高,给各位园友们带来更好,更高效的文章. 废话就说到这里,下面正式进入我们的今天的C#4.0语法糖,今天给大家分享一下参数默认值.命名参数.对象初始化器和集合初始化器. 参数默认值和命名参数:方法的可选参数是.net 4.0最新提出的新的功能,对应简单的重载可以使用可选参数和命名参数混合

Tensorflow2.0语法 - 张量&基本函数(一)

转自 https://segmentfault.com/a/1190000020413887 前言 TF2.0 是之前学习的内容,当时是写在了私有的YNote中,重写于SF.TF2.0-GPU 安装教程传送门:https://segmentfault.com/a/11...之前接触过 TF1, 手动session机制,看着很是头疼. TF2.0不需要做这些TF2.0 理解起来更容易(逐渐 Pythonic and Numpic)TF2.0 后端采用keras接口 (构建网络层),更方便. TF2

Tensorflow2.0语法 - dataset数据封装+训测验切割(二)

转自 https://segmentfault.com/a/1190000020447666 训练集-测试集-验证集切割 方法1:(借用三方sklearn库) 因为sklearn的train_test_split只能切2份,所以我们需要切2次: from sklearn.model_selection import train_test_split x_train, x_test, y_train, y_test = train_test_split( x, y, # x,y是原始数据 test

tensorflow2.0 学习(三)

用tensorflow2.0 版回顾了一下mnist的学习 代码如下,感觉这个版本下的mnist学习更简洁,更方便 关于tensorflow的基础知识,这里就不更新了,用到什么就到网上取搜索相关的知识 # encoding: utf-8 import numpy as np import tensorflow as tf import matplotlib.pyplot as plt #加载下载好的mnist数据库 60000张训练 10000张测试 每一张维度(28,28) path = r'

【OC语法快览】三、创建实例对象

Creating Objects  创建对象 There are two main ways to create an object. The first is the one you saw before: 创建对象主要有两种方法.第一种如下: NSString* myString = [NSString string]; This is the more convenient automatic style. In this case, you are creating an autorel

7、Cocos2dx 3.0游戏开发找小三之3.0版本的代码风格

重开发者的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/27691337 Cocos2d-x代码风格 前面我们已经多次提到 Cocos2d-x 源自于 Cocos2d-iPhone.Cocos2d-iPhone 是一个十分出色的游戏引擎,许多优秀的 iOS平面游戏都基于 Cocos2d-iPhone 开发,而它的实现语言是 Objective-C.因此,Cocos2d-x 也就沿袭了 Objective-C 的

Object Pascal 语法之语言基础(三)

1.6 Object Pascal 的运算符 运算符是程序代码中对各种类型的数据进行计算的符号,通常分为算数运算符.逻辑运算符.比较运算符和按位运算符. 1.算术运算符Object Pascal 语言的算术运算符,如表1-9 所示.表1-9 Object Pascal 语言算术运算符 操作符 操作 操作数据类型 结果类型 + 加 整型.实型 整型.实型 - 减 整型.实型 整型.实型 * 乘 整型.实型 整型.实型 / 除 整型.实型 整型.实型 mod 取余 整型 整型 div 整除 整型 整

tensorflow2.0新特性

Tensorflow2.0相比于以往版本,有着极大的区别:最明显的区别可以用三字词来概括:更简单,更易用,更强大. 接下来让我们一起见证下不一样的地方吧! 一.使用tf.data加载数据 使用tf.data创建的输入管道读取训练数据:支持从内存(Numpy)方便地输入数据: 二.使用tf.keras构建,训练和验证模型,或使用Premade来验证模型 可以直接标准的打包模型(逻辑回归,随机森林),也可以直接使用(tf.estimator API) 如果不想从头训练模型,可以使用迁移学习来训练一个

tensorflow2.0 安装教程

一. 本机情况 windows 10 无GPU anaconda3 我的anaconda3自带的python是3.7的. 安装前:有2个环境,第一个环境base是默认环境(python版本3.7):第二个环境tensorflow是以前安装 tensorflow 1.14 的时候创建的环境(python版本3.7). 即将安装第三个环境,使用tensorflow2. 二. 安装步骤 打开Anaconda Prompt命令行,以下操作都在其中进行 1. 新建一个环境,命令 conda create