【TensorFlow】TensorFlow实战Google深度学习框架第2版参考代码(10-TensorFlow高层封装)

《TensorFlow实战Google深度学习框架第2版》教材中的样例代码,由于tensorflow版本、运行过程的修改、敲码过程中的失误、教材样例自带的错误等原因,可能会导致代码与教材不一致或者不能运行成功,仅供参考。

第10章 TensorFlow高层封装

Keras requires TensorFlow 2.2 or higher.

  • 10.1 使用TensorFlow-Slim在MNIST数据集上实现LeNet-5模型
#!/usr/bin/python
# -*- coding: utf-8 -*-

import tensorflow as tf
import tensorflow.contrib.slim as slim
from tensorflow.examples.tutorials.mnist import input_data


# 通过TensorFlow-Slim来定义LeNet-5的网络结构
def lenet5(inputs):
    # 将输入数据转化为一个4维数组,其中第一维表示batch大小,另三维表示一张图片
    inputs = tf.reshape(inputs, [-1, 28, 28, 1])
    # 定义第一层卷积层
    # 从下面的代码可以看到通过TensorFlow-Slim定义的网络结构并不需要用户去关心如何声明和初始化变量,而只需要定义网络结构即可
    # 下一行代码中定了一个卷积层,该卷积层的深度为32(使用32个卷积核),过滤器的大小为5×5,使用金0填充
    net = slim.conv2d(inputs, 32, [5, 5], padding='SAME', scope='layer1-conv')
    # 定义一个最大池化层,其过滤器大小为2×2,步长为2
    net = slim.max_pool2d(net, 2, stride=2, scope='layer2-max-pool')
    # 类似的定义其他网络层结构
    net = slim.conv2d(net, 64, [5, 5], padding='SAME', scope='layer3-conv')
    net = slim.max_pool2d(net, 2, stride=2, scope='layer4-max-pool')
    # 直接使用TensorFlow-Slim封装好的flatten函数将4维矩阵转为2维,这样可以方便后面的全连接层的计算
    # 通过封装好的函数,用户不再需要自己计算通过卷积层之后矩阵的大小
    net = slim.flatten(net, scope='flatten')
    # 通过TensorFlow-Slim定义全连接层,该全连接层有500个隐藏节点
    net = slim.fully_connected(net, 500, scope='layer5')
    net = slim.fully_connected(net, 10, scope='output')
    return net


# 通过TensorFlow-Slim定义网络结构,并使用之前章节中给出的方式训练定义好的模型
def train(mnist):
    x = tf.placeholder(tf.float32, [None, 784], name='x-input')
    y_ = tf.placeholder(tf.float32, [None, 10], name='y-input')
    y = lenet5(x)

    # 定义损失函数和训练方法
    cross_entropy = tf.nn.sparse_softmax_cross_entropy_with_logits(logits=y, labels=tf.argmax(y_, 1))
    loss = tf.reduce_mean(cross_entropy)
    train_op = tf.train.GradientDescentOptimizer(0.01).minimize(loss)

    # 训练过程
    with tf.Session() as sess:
        tf.global_variables_initializer().run()
        for i in range(10000):
            xs, ys = mnist.train.next_batch(100)
            _, loss_value = sess.run([train_op, loss], feed_dict={x: xs, y_: ys})

            if i % 1000 == 0:
                print("After %d training step(s), loss on training batch is %g." % (i, loss_value))


def main(argv=None):
    mnist = input_data.read_data_sets("/path/to/MNIST_data", one_hot=True)
    train(mnist)


if __name__ == '__main__':
    tf.app.run()
  • 10.1 使用TFLearn在MNIST数据集上实现LeNet-5模型
#!/usr/bin/python
# -*- coding: utf-8 -*-

import tflearn
from tflearn.layers.core import input_data, fully_connected
from tflearn.layers.conv import conv_2d, max_pool_2d
from tflearn.layers.estimator import regression
import tflearn.datasets.mnist as mnist

# 读取MNIST数据
trainX, trainY, testX, testY = mnist.load_data(
    data_dir="/path/to/MNIST_data", one_hot=True)
# 将图像数据resize成卷积卷积神经网络输入的格式,其中第一维表示batch大小,另三维表示一张图片
trainX = trainX.reshape([-1, 28, 28, 1])
testX = testX.reshape([-1, 28, 28, 1])

# 构建神经网络,这个过程和TensorFlow-Slim比较类似,input_data定义了一个placeholder来接入输入数据
net = input_data(shape=[None, 28, 28, 1], name='input')
# 通过TFLearn封装好的API定义一个深度为5,过滤器为5×5,激活函数为ReLU的卷积层
net = conv_2d(net, 32, 5, activation='relu')
# 定义一个过滤器为2×2的最大池化层
net = max_pool_2d(net, 2)
# 类似地定义其他的网络结构
net = conv_2d(net, 64, 5, activation='relu')
net = max_pool_2d(net, 2)
net = fully_connected(net, 500, activation='relu')
net = fully_connected(net, 10, activation='softmax')

# 使用TFLearn封装好的函数定义学习任务,指定优化器为sgd,学习率为0.01,损失函数为交叉熵
net = regression(net, optimizer='sgd', learning_rate=0.01,
                 loss='categorical_crossentropy')

# 通过定义的网络结构训练模型,并在指定的验证数据上验证模型的效果
# TFLearn将模型的训练过程封装到了一个类中,这样可以减少非常多的冗余代码
model = tflearn.DNN(net, tensorboard_verbose=0)
model.fit(trainX, trainY, n_epoch=10,
          validation_set=([testX, testY]),
          show_metric=True)
  • 10.2 使用原生态Keras在MNIST数据集上实现LeNet-5模型

                
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: TensorFlow 2.0是Google开发的一款开源机器学习框架,它是TensorFlow的最新本。相对于早期本,TensorFlow 2.0更加易用,具有更好的性能和更好的可维护性。TensorFlow 2.0提供了Keras API的全面支持,使得构建神经网络变得更加容易和快速。此外,TensorFlow 2.0还提供了Eager Execution模式,这意味着可以在Python环境下进行实时计算和调试,而不需要像以前一样需要构建计算图。总之,TensorFlow 2.0是一个非常强大的机器学习框架,可以帮助开发者更加高效地构建和训练模型。 ### 回答2: TensorFlow是一个开源的人工智能框架,它是由Google开发并发布的。TensorFlow 2是TensorFlow的第二个重要本,并且在原有本的基础上进行了许多改进和优化。 TensorFlow 2 有很多新的特性和功能。首先,它引入了Keras的高级API作为默认的API。这样做使得TensorFlow变得更加易用和直观,并且可以方便地进行快速原型设计和模型迭代。 其次,TensorFlow 2可以进行动态计算图和静态计算图的混合运行。这意味着可以根据需要选择使用静态计算图(在编译时优化)或者动态计算图(在运行时优化)来加快计算速度。 另外,TensorFlow 2还引入了Eager Execution机制。这种机制允许用户即时地运行代码并获取结果,而无需进行繁琐的图构建和会话管理。 TensorFlow 2还具有更好的可移植性和可部署性。用户可以将模型轻松地导出到不同的设备和平台上,并在其他环境中重新加载和运行模型。 最后,TensorFlow 2还提供了更多的工具和函数来支持模型的开发和调试。例如,TensorBoard可以可视化模型的训练过程和性能指标,tf.data可以高效地加载和预处理数据。 总而言之,TensorFlow 2是一个功能强大且易用的深度学习框架,它不仅提供了高级API和各种工具,还具有高度的可移植性和可扩展性。无论是研究人员还是开发者,都可以使用TensorFlow 2来更加轻松地开发和部署自己的机器学习模型。 ### 回答3: TensorFlow 2是谷歌开发的一种开源的深度学习框架。它是TensorFlow的第二个主要本,旨在提供更直观、更易用的编程体验,以支持广泛的机器学习和深度学习任务。 TensorFlow 2的最大变化是引入了动态图机制。与TensorFlow 1相比,动态图允许用户更自由地定义和修改模型结构,无需预先定义计算图。这使得开发和调试更加简单和灵活,尤其对于初学者来说更容易上手。 此外,TensorFlow 2还内置了一些高级功能,如Keras API。Keras是一个流行的深度学习框架,它以简洁易懂的接口和模块化设计而闻名。TensorFlow 2将Keras作为其封装的一部分,使得构建和训练神经网络模型更加简单和高效。 在功能方面,TensorFlow 2支持多种数据类型、多种硬件平台和多种运行环境。可以使用CPU、GPU或TPU等不同硬件来加速模型训练和推理。此外,TensorFlow 2提供了丰富的工具、库和扩展,使其能够支持各种深度学习任务,如图像处理、自然语言处理和推荐系统等。 总而言之,TensorFlow 2是一个强大且易用的深度学习框架,它在设计上注重简单性和灵活性。无论是初学者还是专业人士,都可以利用TensorFlow 2来构建、训练和部署各种复杂的机器学习和深度学习模型。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值