tensorflow2.0教程之Keras快速入门


Posted in Python onFebruary 20, 2021

Keras 是一个用于构建和训练深度学习模型的高阶 API。它可用于快速设计原型、高级研究和生产。 keras的3个优点:
方便用户使用、模块化和可组合、易于扩展

1.导入tf.keras

tensorflow2推荐使用keras构建网络,常见的神经网络都包含在keras.layer中(最新的tf.keras的版本可能和keras不同)

import tensorflow as tf
from tensorflow.keras import layers
print(tf.__version__)
print(tf.keras.__version__)

2.构建简单模型

2.1模型堆叠

最常见的模型类型是层的堆叠:tf.keras.Sequential 模型

model = tf.keras.Sequential()
model.add(layers.Dense(32, activation='relu'))
model.add(layers.Dense(32, activation='relu'))
model.add(layers.Dense(10, activation='softmax'))

2.2网络配置

tf.keras.layers中网络配置:

activation:设置层的激活函数。此参数由内置函数的名称指定,或指定为可调用对象。默认情况下,系统不会应用任何激活函数。

kernel_initializer 和 bias_initializer:创建层权重(核和偏差)的初始化方案。此参数是一个名称或可调用对象,默认为 “Glorot uniform” 初始化器。

kernel_regularizer 和 bias_regularizer:应用层权重(核和偏差)的正则化方案,例如 L1 或 L2 正则化。默认情况下,系统不会应用正则化函数。

layers.Dense(32, activation='sigmoid')
layers.Dense(32, activation=tf.sigmoid)
layers.Dense(32, kernel_initializer='orthogonal')
layers.Dense(32, kernel_initializer=tf.keras.initializers.glorot_normal)
layers.Dense(32, kernel_regularizer=tf.keras.regularizers.l2(0.01))
layers.Dense(32, kernel_regularizer=tf.keras.regularizers.l1(0.01))

3.训练和评估

3.1设置训练流程

构建好模型后,通过调用 compile 方法配置该模型的学习流程:

model = tf.keras.Sequential()
model.add(layers.Dense(32, activation='relu'))
model.add(layers.Dense(32, activation='relu'))
model.add(layers.Dense(10, activation='softmax'))
model.compile(optimizer=tf.keras.optimizers.Adam(0.001),
       loss=tf.keras.losses.categorical_crossentropy,
       metrics=[tf.keras.metrics.categorical_accuracy])

3.2输入Numpy数据

import numpy as np

train_x = np.random.random((1000, 72))
train_y = np.random.random((1000, 10))

val_x = np.random.random((200, 72))
val_y = np.random.random((200, 10))

model.fit(train_x, train_y, epochs=10, batch_size=100,
     validation_data=(val_x, val_y))

3.3tf.data输入数据

dataset = tf.data.Dataset.from_tensor_slices((train_x, train_y))
dataset = dataset.batch(32)
dataset = dataset.repeat()
val_dataset = tf.data.Dataset.from_tensor_slices((val_x, val_y))
val_dataset = val_dataset.batch(32)
val_dataset = val_dataset.repeat()

model.fit(dataset, epochs=10, steps_per_epoch=30,
     validation_data=val_dataset, validation_steps=3)

3.4评估与预测

test_x = np.random.random((1000, 72))
test_y = np.random.random((1000, 10))
model.evaluate(test_x, test_y, batch_size=32)
test_data = tf.data.Dataset.from_tensor_slices((test_x, test_y))
test_data = test_data.batch(32).repeat()
model.evaluate(test_data, steps=30)
# predict
result = model.predict(test_x, batch_size=32)
print(result)

4.构建高级模型

4.1函数式api

tf.keras.Sequential 模型是层的简单堆叠,无法表示任意模型。使用 Keras 函数式 API 可以构建复杂的模型拓扑,例如:

多输入模型,

多输出模型,

具有共享层的模型(同一层被调用多次),

具有非序列数据流的模型(例如,残差连接)。

使用函数式 API 构建的模型具有以下特征:

层实例可调用并返回张量。

输入张量和输出张量用于定义 tf.keras.Model 实例。

此模型的训练方式和 Sequential 模型一样。

input_x = tf.keras.Input(shape=(72,))
hidden1 = layers.Dense(32, activation='relu')(input_x)
hidden2 = layers.Dense(16, activation='relu')(hidden1)
pred = layers.Dense(10, activation='softmax')(hidden2)

model = tf.keras.Model(inputs=input_x, outputs=pred)
model.compile(optimizer=tf.keras.optimizers.Adam(0.001),
       loss=tf.keras.losses.categorical_crossentropy,
       metrics=['accuracy'])
model.fit(train_x, train_y, batch_size=32, epochs=5)

4.2模型子类化

通过对 tf.keras.Model 进行子类化并定义您自己的前向传播来构建完全可自定义的模型。在 init 方法中创建层并将它们设置为类实例的属性。在 call 方法中定义前向传播

class MyModel(tf.keras.Model):
  def __init__(self, num_classes=10):
    super(MyModel, self).__init__(name='my_model')
    self.num_classes = num_classes
    self.layer1 = layers.Dense(32, activation='relu')
    self.layer2 = layers.Dense(num_classes, activation='softmax')
  def call(self, inputs):
    h1 = self.layer1(inputs)
    out = self.layer2(h1)
    return out
  
  def compute_output_shape(self, input_shape):
    shape = tf.TensorShapej(input_shape).as_list()
    shape[-1] = self.num_classes
    return tf.TensorShape(shape)

model = MyModel(num_classes=10)
model.compile(optimizer=tf.keras.optimizers.RMSprop(0.001),
       loss=tf.keras.losses.categorical_crossentropy,
       metrics=['accuracy'])

model.fit(train_x, train_y, batch_size=16, epochs=5)

4.3自定义层

通过对 tf.keras.layers.Layer 进行子类化并实现以下方法来创建自定义层:

build:创建层的权重。使用 add_weight 方法添加权重。

call:定义前向传播。

compute_output_shape:指定在给定输入形状的情况下如何计算层的输出形状。
或者,可以通过实现 get_config 方法和 from_config 类方法序列化层。

class MyLayer(layers.Layer):
  def __init__(self, output_dim, **kwargs):
    self.output_dim = output_dim
    super(MyLayer, self).__init__(**kwargs)
  
  def build(self, input_shape):
    shape = tf.TensorShape((input_shape[1], self.output_dim))
    self.kernel = self.add_weight(name='kernel1', shape=shape,
                  initializer='uniform', trainable=True)
    super(MyLayer, self).build(input_shape)
  
  def call(self, inputs):
    return tf.matmul(inputs, self.kernel)

  def compute_output_shape(self, input_shape):
    shape = tf.TensorShape(input_shape).as_list()
    shape[-1] = self.output_dim
    return tf.TensorShape(shape)

  def get_config(self):
    base_config = super(MyLayer, self).get_config()
    base_config['output_dim'] = self.output_dim
    return base_config

  @classmethod
  def from_config(cls, config):
    return cls(**config)
  
model = tf.keras.Sequential(
[
  MyLayer(10),
  layers.Activation('softmax')
])


model.compile(optimizer=tf.keras.optimizers.RMSprop(0.001),
       loss=tf.keras.losses.categorical_crossentropy,
       metrics=['accuracy'])

model.fit(train_x, train_y, batch_size=16, epochs=5)

4.3回调

callbacks = [
  tf.keras.callbacks.EarlyStopping(patience=2, monitor='val_loss'),
  tf.keras.callbacks.TensorBoard(log_dir='./logs')
]
model.fit(train_x, train_y, batch_size=16, epochs=5,
     callbacks=callbacks, validation_data=(val_x, val_y))

5保持和恢复

5.1权重保存

model = tf.keras.Sequential([
layers.Dense(64, activation='relu'),
layers.Dense(10, activation='softmax')])

model.compile(optimizer=tf.keras.optimizers.Adam(0.001),
       loss='categorical_crossentropy',
       metrics=['accuracy'])

model.save_weights('./weights/model')
model.load_weights('./weights/model')
model.save_weights('./model.h5')
model.load_weights('./model.h5')

5.2保存网络结构

# 序列化成json
import json
import pprint
json_str = model.to_json()
pprint.pprint(json.loads(json_str))
fresh_model = tf.keras.models.model_from_json(json_str)


# 保持为yaml格式 #需要提前安装pyyaml

yaml_str = model.to_yaml()
print(yaml_str)
fresh_model = tf.keras.models.model_from_yaml(yaml_str)

5.3保存整个模型

model = tf.keras.Sequential([
 layers.Dense(10, activation='softmax', input_shape=(72,)),
 layers.Dense(10, activation='softmax')
])
model.compile(optimizer='rmsprop',
       loss='categorical_crossentropy',
       metrics=['accuracy'])
model.fit(train_x, train_y, batch_size=32, epochs=5)
model.save('all_model.h5')
model = tf.keras.models.load_model('all_model.h5')

6.将keras用于Estimator

Estimator API 用于针对分布式环境训练模型。它适用于一些行业使用场景,例如用大型数据集进行分布式训练并导出模型以用于生产

model = tf.keras.Sequential([layers.Dense(10,activation='softmax'),
             layers.Dense(10,activation='softmax')])

model.compile(optimizer=tf.keras.optimizers.RMSprop(0.001),
       loss='categorical_crossentropy',
       metrics=['accuracy'])

estimator = tf.keras.estimator.model_to_estimator(model)

到此这篇关于tensorflow2.0教程之Keras快速入门的文章就介绍到这了,更多相关Keras快速入门内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python简单程序读取串口信息的方法
Mar 13 Python
python2.7+selenium2实现淘宝滑块自动认证功能
Feb 24 Python
详解Python基础random模块随机数的生成
Mar 23 Python
Python批量生成幻影坦克图片实例代码
Jun 04 Python
python代码编写计算器小程序
Mar 30 Python
如何使用python进行pdf文件分割
Nov 11 Python
python 计算概率密度、累计分布、逆函数的例子
Feb 25 Python
python tkinter之 复选、文本、下拉的实现
Mar 04 Python
pycharm部署、配置anaconda环境的教程
Mar 24 Python
python zip,lambda,map函数代码实例
Apr 04 Python
Django {{ MEDIA_URL }}无法显示图片的解决方式
Apr 07 Python
python3实现简单飞机大战
Nov 29 Python
在Pycharm中安装Pandas库方法(简单易懂)
Feb 20 #Python
Python3爬虫RedisDump的安装步骤
Feb 20 #Python
python爬取2021猫眼票房字体加密实例
Feb 19 #Python
Python之Sklearn使用入门教程
Feb 19 #Python
Python爬虫UA伪装爬取的实例讲解
Feb 19 #Python
Pycharm制作搞怪弹窗的实现代码
Feb 19 #Python
python 高阶函数简单介绍
Feb 19 #Python
You might like
玩家交还《星际争霸》原始码光盘 暴雪报以厚礼
2017/05/05 星际争霸
很让人受教的 提高php代码质量36计
2012/09/05 PHP
php结合redis高并发下发帖、发微博的实现方法
2016/12/15 PHP
基于CI(CodeIgniter)框架实现购物车功能的方法
2018/04/09 PHP
PHP中的empty、isset、isnull的区别与使用实例
2019/03/22 PHP
Yii框架的路由配置方法分析
2019/09/09 PHP
显示js对象所有属性和方法的函数
2009/10/16 Javascript
js实现兼容IE6与IE7的DIV高度
2010/05/13 Javascript
关于js中window.location.href,location.href,parent.location.href,top.location.href的用法与区别
2010/10/18 Javascript
jQuery创建插件的代码分析
2011/04/14 Javascript
实现局部遮罩与关闭原理及代码
2013/02/04 Javascript
jquery 属性选择器(匹配具有指定属性的元素)
2016/09/06 Javascript
jquery获取table指定行和列的数据方法(当前选中行、列)
2016/11/07 Javascript
性能优化之代码优化页面加载速度
2017/03/01 Javascript
js/jq仿window文件夹框选操作插件
2017/03/08 Javascript
jQuery实现 RadioButton做必选校验功能
2017/06/15 jQuery
浅谈关于angularJs中使用$.ajax的注意点
2017/08/12 Javascript
详解webpack-dev-server使用http-proxy解决跨域问题
2018/01/13 Javascript
Vue自定义指令上报Google Analytics事件统计的方法
2019/02/25 Javascript
基于javascript实现日历功能原理及代码实例
2020/05/07 Javascript
vue使用axios实现excel文件下载的功能
2020/07/16 Javascript
微信小程序实现首页弹出广告
2020/12/03 Javascript
[16:19]教你分分钟做大人——风暴之灵
2015/03/11 DOTA
使用Python的判断语句模拟三目运算
2015/04/24 Python
python学习入门细节知识点
2018/03/29 Python
python pandas中对Series数据进行轴向连接的实例
2018/06/08 Python
Python脚本操作Excel实现批量替换功能
2019/11/20 Python
基于pycharm实现批量修改变量名
2020/06/02 Python
温泉秘密:Onsen Secret
2020/07/06 全球购物
出国留学自荐信
2013/10/25 职场文书
任命书格式
2014/06/05 职场文书
管理岗位竞聘演讲稿
2014/08/18 职场文书
2014大学生中国梦主题教育学习思想汇报
2014/09/10 职场文书
2015新年联欢晚会开场白
2014/12/14 职场文书
教师读书笔记
2015/06/29 职场文书
Python Pandas 删除列操作
2022/03/16 Python