• 售前

  • 售后

热门帖子
入门百科

tensorflow2.0教程之Keras快速入门

[复制链接]
123457500 显示全部楼层 发表于 2021-10-25 19:21:33 |阅读模式 打印 上一主题 下一主题
目录


  • 1.导入tf.keras
  • 2.构建简朴模型

    • 2.1模型堆叠
    • 2.2网络配置

  • 3.训练和评估

    • 3.1设置训练流程
    • 3.2输入Numpy数据
    • 3.3tf.data输入数据
    • 3.4评估与预测

  • 4.构建高级模型

    • 4.1函数式api
    • 4.2模型子类化
    • 4.3自定义层
    • 4.3回调

  • 5保持和恢复

    • 5.1权重生存
    • 5.2生存网络结构
    • 5.3生存整个模型

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

1.导入tf.keras


tensorflow2保举使用keras构建网络,常见的神经网络都包含在keras.layer中(最新的tf.keras的版本大概和keras差异)
  1. import tensorflow as tf
  2. from tensorflow.keras import layers
  3. print(tf.__version__)
  4. print(tf.keras.__version__)
复制代码
2.构建简朴模型



2.1模型堆叠


最常见的模型类型是层的堆叠:tf.keras.Sequential 模型
  1. model = tf.keras.Sequential()
  2. model.add(layers.Dense(32, activation='relu'))
  3. model.add(layers.Dense(32, activation='relu'))
  4. 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 正则化。默认情况下,体系不会应用正则化函数。
  1. layers.Dense(32, activation='sigmoid')
  2. layers.Dense(32, activation=tf.sigmoid)
  3. layers.Dense(32, kernel_initializer='orthogonal')
  4. layers.Dense(32, kernel_initializer=tf.keras.initializers.glorot_normal)
  5. layers.Dense(32, kernel_regularizer=tf.keras.regularizers.l2(0.01))
  6. layers.Dense(32, kernel_regularizer=tf.keras.regularizers.l1(0.01))
复制代码
3.训练和评估



3.1设置训练流程


构建好模型后,通过调用 compile 方法配置该模型的学习流程:
  1. model = tf.keras.Sequential()
  2. model.add(layers.Dense(32, activation='relu'))
  3. model.add(layers.Dense(32, activation='relu'))
  4. 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数据

  1. import numpy as np
  2. train_x = np.random.random((1000, 72))
  3. train_y = np.random.random((1000, 10))
  4. val_x = np.random.random((200, 72))
  5. val_y = np.random.random((200, 10))
  6. model.fit(train_x, train_y, epochs=10, batch_size=100,
  7.      validation_data=(val_x, val_y))
复制代码
3.3tf.data输入数据

  1. dataset = tf.data.Dataset.from_tensor_slices((train_x, train_y))
  2. dataset = dataset.batch(32)
  3. dataset = dataset.repeat()
  4. val_dataset = tf.data.Dataset.from_tensor_slices((val_x, val_y))
  5. val_dataset = val_dataset.batch(32)
  6. val_dataset = val_dataset.repeat()
  7. model.fit(dataset, epochs=10, steps_per_epoch=30,
  8.      validation_data=val_dataset, validation_steps=3)
复制代码
3.4评估与预测

  1. test_x = np.random.random((1000, 72))
  2. test_y = np.random.random((1000, 10))
  3. model.evaluate(test_x, test_y, batch_size=32)
  4. test_data = tf.data.Dataset.from_tensor_slices((test_x, test_y))
  5. test_data = test_data.batch(32).repeat()
  6. model.evaluate(test_data, steps=30)
复制代码
  1. # predict
  2. result = model.predict(test_x, batch_size=32)
  3. print(result)
复制代码
4.构建高级模型



4.1函数式api


tf.keras.Sequential 模型是层的简朴堆叠,无法表示任意模型。使用 Keras 函数式 API 可以构建复杂的模型拓扑,比方:
多输入模型,
多输出模型,
具有共享层的模型(同一层被调用多次),
具有非序列数据流的模型(比方,残差连接)。
使用函数式 API 构建的模型具有以下特性:
层实例可调用并返回张量。

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

此模型的训练方式和 Sequential 模型一样。
  1. input_x = tf.keras.Input(shape=(72,))
  2. hidden1 = layers.Dense(32, activation='relu')(input_x)
  3. hidden2 = layers.Dense(16, activation='relu')(hidden1)
  4. pred = layers.Dense(10, activation='softmax')(hidden2)
  5. model = tf.keras.Model(inputs=input_x, outputs=pred)
  6. model.compile(optimizer=tf.keras.optimizers.Adam(0.001),
  7.        loss=tf.keras.losses.categorical_crossentropy,
  8.        metrics=['accuracy'])
  9. model.fit(train_x, train_y, batch_size=32, epochs=5)
复制代码
4.2模型子类化


通过对 tf.keras.Model 举行子类化并定义您本身的前向传播来构建完全可自定义的模型。在 init 方法中创建层并将它们设置为类实例的属性。在 call 方法中定义前向传播
  1. class MyModel(tf.keras.Model):
  2.   def __init__(self, num_classes=10):
  3.     super(MyModel, self).__init__(name='my_model')
  4.     self.num_classes = num_classes
  5.     self.layer1 = layers.Dense(32, activation='relu')
  6.     self.layer2 = layers.Dense(num_classes, activation='softmax')
  7.   def call(self, inputs):
  8.     h1 = self.layer1(inputs)
  9.     out = self.layer2(h1)
  10.     return out
  11.   
  12.   def compute_output_shape(self, input_shape):
  13.     shape = tf.TensorShapej(input_shape).as_list()
  14.     shape[-1] = self.num_classes
  15.     return tf.TensorShape(shape)
  16. model = MyModel(num_classes=10)
  17. model.compile(optimizer=tf.keras.optimizers.RMSprop(0.001),
  18.        loss=tf.keras.losses.categorical_crossentropy,
  19.        metrics=['accuracy'])
  20. 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 类方法序列化层。
  1. class MyLayer(layers.Layer):
  2.   def __init__(self, output_dim, **kwargs):
  3.     self.output_dim = output_dim
  4.     super(MyLayer, self).__init__(**kwargs)
  5.   
  6.   def build(self, input_shape):
  7.     shape = tf.TensorShape((input_shape[1], self.output_dim))
  8.     self.kernel = self.add_weight(name='kernel1', shape=shape,
  9.                   initializer='uniform', trainable=True)
  10.     super(MyLayer, self).build(input_shape)
  11.   
  12.   def call(self, inputs):
  13.     return tf.matmul(inputs, self.kernel)
  14.   def compute_output_shape(self, input_shape):
  15.     shape = tf.TensorShape(input_shape).as_list()
  16.     shape[-1] = self.output_dim
  17.     return tf.TensorShape(shape)
  18.   def get_config(self):
  19.     base_config = super(MyLayer, self).get_config()
  20.     base_config['output_dim'] = self.output_dim
  21.     return base_config
  22.   @classmethod
  23.   def from_config(cls, config):
  24.     return cls(**config)
  25.   
  26. model = tf.keras.Sequential(
  27. [
  28.   MyLayer(10),
  29.   layers.Activation('softmax')
  30. ])
  31. model.compile(optimizer=tf.keras.optimizers.RMSprop(0.001),
  32.        loss=tf.keras.losses.categorical_crossentropy,
  33.        metrics=['accuracy'])
  34. model.fit(train_x, train_y, batch_size=16, epochs=5)
复制代码
4.3回调

  1. callbacks = [
  2.   tf.keras.callbacks.EarlyStopping(patience=2, monitor='val_loss'),
  3.   tf.keras.callbacks.TensorBoard(log_dir='./logs')
  4. ]
  5. model.fit(train_x, train_y, batch_size=16, epochs=5,
  6.      callbacks=callbacks, validation_data=(val_x, val_y))
复制代码
5保持和恢复



5.1权重生存

  1. model = tf.keras.Sequential([
  2. layers.Dense(64, activation='relu'),
  3. layers.Dense(10, activation='softmax')])
  4. model.compile(optimizer=tf.keras.optimizers.Adam(0.001),
  5.        loss='categorical_crossentropy',
  6.        metrics=['accuracy'])
  7. model.save_weights('./weights/model')
  8. model.load_weights('./weights/model')
  9. model.save_weights('./model.h5')
  10. model.load_weights('./model.h5')
复制代码
5.2生存网络结构

  1. # 序列化成json
  2. import json
  3. import pprint
  4. json_str = model.to_json()
  5. pprint.pprint(json.loads(json_str))
  6. fresh_model = tf.keras.models.model_from_json(json_str)
  7. # 保持为yaml格式 #需要提前安装pyyaml
  8. yaml_str = model.to_yaml()
  9. print(yaml_str)
  10. fresh_model = tf.keras.models.model_from_yaml(yaml_str)
复制代码
5.3生存整个模型

  1. model = tf.keras.Sequential([
  2. layers.Dense(10, activation='softmax', input_shape=(72,)),
  3. layers.Dense(10, activation='softmax')
  4. ])
  5. model.compile(optimizer='rmsprop',
  6.        loss='categorical_crossentropy',
  7.        metrics=['accuracy'])
  8. model.fit(train_x, train_y, batch_size=32, epochs=5)
  9. model.save('all_model.h5')
  10. model = tf.keras.models.load_model('all_model.h5')
复制代码
6.将keras用于Estimator


Estimator API 用于针对分布式情况训练模型。它适用于一些行业使用场景,比方用大型数据集举行分布式训练并导出模型以用于生产
  1. model = tf.keras.Sequential([layers.Dense(10,activation='softmax'),
  2.              layers.Dense(10,activation='softmax')])
  3. model.compile(optimizer=tf.keras.optimizers.RMSprop(0.001),
  4.        loss='categorical_crossentropy',
  5.        metrics=['accuracy'])
  6. estimator = tf.keras.estimator.model_to_estimator(model)
复制代码
到此这篇关于tensorflow2.0教程之Keras快速入门的文章就介绍到这了,更多相干Keras快速入门内容请搜索脚本之家从前的文章或继续浏览下面的相干文章渴望各人以后多多支持脚本之家!

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作