😘
tensorflow 2.0实战笔记
  • Tensorflow 2.0 实战笔记
  • 第一章 Tensorflow 2.0入门
    • 1.1 Tensorflow简介
    • 1.2 Tensorflow安装
      • 1.2.1 Windows下安装
      • 1.2.2 Ubuntu下安装
      • 1.2.3 环境测试
    • 1.3 Tensorflow1.x 和2.x接口区别
  • 第二章 Tensorflow基础篇 I
    • 2.1 张量与操作
    • 2.2 三种定义模型方式
    • 2.3 两种模型训练方式
    • 2.4 计算图机制
    • 2.5 模型保存与加载
    • 注意
    • 相关bug详解
  • 第三章 Tensorflow基础篇 II
    • 3.1 自定义模型层
    • 3.2 损失函数及自定义损失函数
    • 3.3 优化器及自定义优化器
    • 3.4 评估函数及自定义评估函数
    • 3.5 激活函数及自定义激活函数
    • 3.6 Tensorboard使用
    • 注意
  • 第四章 Tensorflow数据管道
    • 4.1 tf.data简介
    • 4.2 Dataset使用
    • 4.3 TFrecord使用
    • 注意
  • 第五章 卷积神经网络
    • 5.1 浅谈卷积神经网络
    • 5.2 拆解卷积层
    • 5.3 拆解池化层
    • 5.4 实战三:Quick, Draw! Google涂鸦识别挑战项目
    • 注意
  • 第六章 循环神经网络
    • 6.1-浅谈循环神经网络
    • 6.2-word2vec简介及词向量构建
    • 6.3-实战四:LSTM实现新闻分类算法
  • 第七章 Transorformer网络
    • 7.1-Transfromer原理详解
    • 7.2-实战五:Transformer实现英译中机器翻译
  • 第八章 tf.hub初探
  • 第九章 Tensorflo7部署
  • 第九章 相许Tensorflow
由 GitBook 提供支持
在本页
  • 常用模型层
  • Sequential model
  • Functional model
  • Subclassing model
  • 三种构建模型的区别

这有帮助吗?

  1. 第二章 Tensorflow基础篇 I

2.2 三种定义模型方式

常用模型层

Sequential model

第一种:

from tensorflow.keras import layers
import tensorflow as tf
model = tf.keras.Sequential()
model.add(layers.Dense(64, activation='relu'))#第一层
model.add(layers.Dense(64, activation='relu'))#第二层
model.add(layers.Dense(10))#第三层

第二种:

model = tf.keras.Sequential([
layers.Dense(64, activation='relu', input_shape=(32,)),#第一层
layers.Dense(64, activation='relu'),#第二层
layers.Dense(10)#第三层
])
model.compile(optimizer=tf.keras.optimizers.Adam(0.01),
              loss=tf.keras.losses.CategoricalCrossentropy(from_logits=True),
              metrics=['accuracy'])
import numpy as np

data = np.random.random((1000, 32))
labels = np.random.random((1000, 10))

model.fit(data, labels, epochs=10, batch_size=32)

Functional model

函数式模型是一种创建模型的方法,该模型比tf.keras.Sequential更灵活。函数式模型可以处理具有非线性拓扑的模型,具有共享层的模型以及具有多个输入或输出的模型等等

举个例子:
"""
(input: 32-dimensional vectors) 
       ↧
[Dense (64 units, relu activation)] 
       ↧
[Dense (64 units, relu activation)] 
       ↧
[Dense (10 units, softmax activation)] 
       ↧
(output: logits of a probability distribution over 10 classes)
"""

利用Functional方式构建模型,如下所示:

inputs = tf.keras.Input(shape=(32,))  
x = layers.Dense(64, activation='relu')(inputs) #第一层
x = layers.Dense(64, activation='relu')(x) #第二层
predictions = layers.Dense(10)(x) #第三层

模型训练:

model = tf.keras.Model(inputs=inputs, outputs=predictions)


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

import numpy as np
data = np.random.random((1000, 32))
labels = np.random.random((1000, 10))
model.fit(data, labels, batch_size=32, epochs=5)

Subclassing model

通过子类化tf.keras.Model和定义自己的前向传播模型来构建完全可定制的模型,和eager execution模式相辅相成。

class MyModel(tf.keras.Model):

    def __init__(self, num_classes=10):
        super(MyModel, self).__init__(name='my_model')
        self.num_classes = num_classes
        # 定义自己需要的层
        self.dense_1 = layers.Dense(32, activation='relu') #
        self.dense_2 = layers.Dense(num_classes)

    def call(self, inputs):
        #定义前向传播
        # 使用在 (in `__init__`)定义的层
        x = self.dense_1(inputs)
        x = self.dense_2(x)
        return x
model = MyModel(num_classes=10)

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

import numpy as np

data = np.random.random((1000, 32))
labels = np.random.random((1000, 10))
# Trains for 5 epochs.
model.fit(data, labels, batch_size=32, epochs=5)

三种构建模型的区别

模型

使用场景

Sequential model

对于顺序结构的模型,优先使用Sequential方法构建。

Functional model

如果模型有多输入或者多输出,或者模型需要共享权重,或者模型具有残差连接等非顺序结构,推荐使用函数式API进行创建。

Subclassing model

需要自定义层之间的传输、复杂模型。

上一页2.1 张量与操作下一页2.3 两种模型训练方式

最后更新于4年前

这有帮助吗?