TensorFlow2.0基本模型和训练框架

刚刚学习tensorflow2.0版本,总结了一下tensorflow2.0应用的基本框架,希望能帮到以后跟我一样刚刚接触的萌新。
在tensorflow2.0中,首先我们要设计一个自己的模型,所以要创建一个class类,这里我们用一个简单的CNN手写体识别网络来举例。在创建我们自己的model类时,首先要继承tensorflow为我们写好的模块父类,tf.keras.Model,并且至少重写其中的两个函数,init()和call()。
init函数是模块的初始化函数,在模块被创建时运行一次,我们把要实现的各个网络层在这里命名。在例子中我们共初始化了两个卷积层,两个池化层,两个线性层,一个flatten层和一个dropout层。call()函数会在我们调用模块时运行,例如我们实例化了一个cnn = CNN(),此时y = cnn(x)等价于y = cnn.call(x)。在这一函数中我们进行网络的搭建。至此模型的搭建就算结束了。

class CNN(tf.keras.Model):
    def __init__(self):
        super().__init__()  # 继承父类的init函数,这里需要注意,在python2中需要写成super(CNN, self).__init__()
        self.conv1 = tf.keras.layers.Conv2D(
            filters=32,
            kernel_size = [5,5],
            activation=tf.nn.relu,
            padding='same'
        )
        self.pool1 = tf.keras.layers.MaxPool2D(pool_size=[2,2], strides=2)
        self.conv2 = tf.keras.layers.Conv2D(
            filters=64,
            kernel_size=[5,5],
            activation=tf.nn.relu,
            padding='same'
        )
        self.pool2 = tf.keras.layers.MaxPool2D(pool_size=[2,2], strides=2)
        self.flatten = tf.keras.layers.Reshape(target_shape=(7 * 7 * 64,))
        self.drop1 = tf.keras.layers.Dropout(0.5)
        self.dense1 = tf.keras.layers.Dense(units=1024, activation=tf.nn.relu)
        self.dense2 = tf.keras.layers.Dense(units=10, activation=tf.nn.softmax)

    @tf.function
    def call(self, inputs):
        x = self.conv1(inputs)
        x = self.pool1(x)
        x = self.conv2(x)
        x = self.pool2(x)
        x = self.flatten(x)
        x = self.drop1(x)
        x = self.dense1(x)
        outputs = self.dense2(x)

        return outputs

在训练模型时,最简单的可以分为5步。

  1. 运用现在的模型生成预测,即y_pred
  2. 通过对比y_pred和y_true生成模型的loss
  3. 将一个batch内的loss压缩成一个实数
  4. 获得loss关于模型参数的梯度
  5. 通过获得的梯度优化模型

相应的python代码自然也就是5行。在那之前,我们要实例化一个优化器optimizer,它会帮我们根据梯度自动优化模型参数。相应代码如下:

optimizer = tf.keras.optimizers.Adam(learning_rate=0.001)  # 优化器类型根据需求自行选择
for index in range(epoch_num):
    with tf.GradientTape() as tape:
        y_pred = cnn(x)  # 对应步骤1
        loss = tf.keras.losses.sparse_categorical_crossentropy(y_true=y, y_pred=y_pred)  # 对应步骤2,loss模型根据需求自行选择
        loss = tf.reduce_mean(loss)  # 对应步骤3
        print('epoch: %d, loss: %f' %(index, loss))  # 打印出每一次训练的loss
        grads = tape.gradient(loss, model.variables)  # 对应步骤4
        optimizer.apply_gradients(grads_and_vars=zip(grads, model.variables))  # 对应步骤5

至此,一个简单模型的搭建和预测步骤就到此结束了。复杂的结构也可以参考这一简单框架。当我们需要应用模型时,只需要调用y_pred = cnn(x)即可。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: TensorFlow 2.0和1.0是两个不同版本的TensorFlow深度学习框架。 TensorFlow 1.0是早期版本的TensorFlow框架,它主要使用静态计算图来定义和运行模型。静态计算图需要在模型运行之前先定义完整的计算图,并将数据传递到该图中。这种方式需要更多的代码和操作,因此比较繁琐。 TensorFlow 2.0则是一个更新版本的框架,它主要使用动态计算图来定义和运行模型。动态计算图可以动态地构建计算图,并将数据传递到该图中,因此比较方便。TensorFlow 2.0还增加了一些新特性,如eager execution(即时执行)、Keras API(易用性更高的高级API)和更好的分布式训练支持等。 总体而言,TensorFlow 2.0比1.0更易于使用和理解,并且有更好的性能和新功能。如果您是新手或想要更快地构建模型,则TensorFlow 2.0是更好的选择。但如果您使用的是早期版本的TensorFlow代码,或者您正在使用不支持TensorFlow 2.0的库,则需要使用TensorFlow 1.0。 ### 回答2: 随着深度学习开发的普及,TensorFlow作为一种广泛使用框架,有着许多改进和更新。TensorFlow 2.0版本是其最新版本,相对于之前的版本,它有着许多显著的改进和更新。下面是TensorFlow 2.0与1.0之间的区别。 1. 简化API TensorFlow 2.0通过Keras API在处理神经网络的创建和训练上进行大量改进。这个新的API提供了一种更为直观和简洁的方式,使得开发者能够更加轻松地构建和训练网络模型,而不需要过多的复杂代码或拼写错误。 2. 动态图 在TensorFlow 1.0中,所有的计算图都需要在编译时创建,这种静态图的方式有着许多限制。而在TensorFlow 2.0中,使用Eager Execution的方式,可以将TensorFlow变成一种动态图,并且可以直接按照Python程序一样输出结果并进行修改。 3. 支持多种数据类型 TensorFlow 2.0从基于张量的计算框架扩展为基于哈希表、稀疏张量和其他非张量数据类型来处理各种类型的数据。这意味着,TensorFlow 2.0不再局限于基本数据类型,它可以更加灵活地处理各种数据类型的问题。 4. 更好的性能和分布式训练 TensorFlow 2.0引入了XLA编译器和TensorFlow Lite,这些工具可以优化深度学习模型的性能,并提高模型预测的速度。另外,TensorFlow 2.0支持分布式训练,可以在多个GPU和多台机器上分布式训练模型,极大提高训练速度。 总的来说,TensorFlow 2.0相对于1.0版本有着更高的性能和更灵活的功能以及更为简化的API。这些改进和更新都可以帮助深度学习开发者更快的开发出高质量的模型,提高模型的准确率和效率。 ### 回答3: TensorFlow(中文名:张量流)是谷歌基于DistBelief进行研发的一款开源机器学习框架,可以通过数据流图来进行数值计算,广泛应用于机器学习、深度学习和科学计算等领域。而在TensorFlow的发展历程中,2.0版本和1.0版本是相较而言最具代表性的两个版本。以下是他们的区别: 1)API的变化。TensorFlow 2.0针对初学者对API更加友好,简化和统一了API,包括资源管理器、数据集、损失函数等,并且采用eager execution方式,即时执行每个操作,并在具有交互性的shell中进行了一些增强。相比TensorFlow 1.0,算法实现更加简洁,代码更易读。 2)keras的集成。Tensorflow 2.0把keras作为默认的高级API,它为用户提供了一种更加方便的方式来构建深度学习模型。keras是一个高度模块化的深度学习API,可以构建各种类型的深度学习模型,最近它已经成为深度学习领域的一种标准方式,而Tensorflow 2.0是使用这种方式构建深度学习模型的工具之一。 3)动态图与静态图分离。在TensorFlow 1.0中,模型只能在Graph(静态图)中构建并且修改,然后输入数据以进行模型训练。这种方式非常适合高性能的GPU处理,但是会限制开发人员的灵活性,使调试和错误检查变得更加困难。而Tensorflow 2.0将会提供一种全新的动态图与静态图分离的方式去实现,使得高级API和低级API一起工作更简单、更自然,能够通过eager execution模式检查和优化模型程序。 4)性能的提升。TensorFlow 2.0在性能方面有所提高。在TensorFlow 2.0中,只加载正在使用的部分,降低了环境和变量的使用,提高了性能。在训练时间上也有一定的提升,就像keras的CPU和GPU支持一样,TensorFlow 2.0改进了TensorFlow1.0的GPU支持。同时,它还支持多GPU训练,让模型训练更加高效。 综上所述,TensorFlow 2.0比TensorFlow 1.0更加用户友好,集成了更多实用的模型和工具,API更加简洁,且提高了性能和支持。不管对于新用户还是TensorFlow 1.0的老用户,TensorFlow 2.0都应该是一种值得尝试的体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值