《TensorFlow2.0》低阶 api 入门

本贴最后更新于 1712 天前,其中的信息可能已经时异事殊

TensorFlow2.0 已经支持 keras 了,也就是说可以直接在 tf2.0 中使用 keras 的 api 了,Keras 是一个用 Python 编写的高级神经网络 API,它能够以 TensorFlow,CNTK 或者 Theano 作为后端运行,所以还是写了一篇 tf 的低阶 api 入门,来了解 tf 中进行深度学习的流程和原理,现在让我们愉快的做一个 tf(tensorflow)boy 吧!

一、TF 中的一些概念

1、张量(Tensor):

  • 一般张量:
    方法:tf.Variable
    mammal = tf.Variable("Elephant", tf.string)
    
  • 常量
    方法:tf.constant
    # 定义常量constant
    constant = tf.constant([1, 2, 3])
    
  • 占位符
    方法: tf.placeholder
    x = tf.placeholder(tf.float32, shape=[3])
    y = tf.square(x)
    
    with tf.Session() as sess:
      print(sess.run(y, {x: [1.0, 2.0, 3.0]})) # => "[1.0, 4.0, 9.0]"
      print(sess.run(y, {x: [0.0, 0.0, 5.0]})) # => "[0.0, 0.0, 25.0]"
    
  • 稀疏张量
    方法:tf.SparseTensor
    SparseTensor(indices=[[0, 0], [1, 2]], values=[1, 2], dense_shape=[3, 4])
    

2、操作(op):

方法:tf.Operation

调用 `tf.constant(42.0)` 可创建单个 tf.Operation,该操作可以生成值 `42.0`,将该值添加到默认图中,并返回表示常量值的 tf.Tensor。

3、图(graph):

方法:tf.Graph

大多数 TensorFlow 程序都以数据流图构建阶段开始。在此阶段,您会调用 TensorFlow API 函数,这些函数可构建新的 tf.Operation(节点)和 tf.Tensor(边)对象并将它们添加到 tf.Graph 实例中。TensorFlow 提供了一个**默认图**,此图是同一上下文中的所有 API 函数的明确参数。

4、会话(session):在 tf 中,先搭建好计算图,然后再启动 session,运行定义好的图。

方法:tf.Session()

x = tf.constant([[37.0, -23.0], [1.0, 4.0]])
w = tf.Variable(tf.random_uniform([2, 2]))
y = tf.matmul(x, w)
output = tf.nn.softmax(y)
init_op = w.initializer

with tf.Session() as sess:
  sess.run(init_op)
  print(sess.run(output))
  y_val, output_val = sess.run([y, output])

二、第一个程序 Hello World

博主使用的是 tensorflow 最新版本为 tf2.0-beat1 版本,tf1.x 版本中有些特效在 2.0 中已经移除,可以使用如下方法在 2.0 中运行 1.x 版本的 tensoflow。

# tf2.0 版本
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()
# tf 1.x版本
# import tensorflow as tf


# 创建常量
hello_op = tf.constant('Hello,world!')
# 创建会话运行
with tf.Session() as sess:
    print(sess.run(hello_op))

三、线性回归

使用简单的线性回归模型,熟悉 tf 的训练模式,下面代码是一个二元一次线性模型

# tf2.0 版本
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()
# tf 1.x版本
# import tensorflow as tf
import numpy as np

# 使用 NumPy 生成假数据(phony data), 总共 100 个点.
x_data = np.float32(np.random.rand(2, 100)) # 随机输入
y_data = np.dot([0.100, 0.200], x_data) + 0.300

# 构造一个线性模型
b = tf.Variable(tf.zeros([1]))
W = tf.Variable(tf.random_uniform([1, 2], -1.0, 1.0))
y = tf.matmul(W, x_data) + b

# 损失函数:tf手写最小化方差
loss = tf.reduce_mean(tf.square(y - y_data))
# 优化器:tf自带的随机梯度下降算法
optimizer = tf.train.GradientDescentOptimizer(0.5)
# 训练目的:让loss最小
train = optimizer.minimize(loss)

# 运行模型前先要初始化所有变量
init = tf.initialize_all_variables()

# 启动图 (graph)
sess = tf.Session()
sess.run(init)

# 在启动的图中,进行训练,拟合平面
for step in range(0, 201):
    sess.run(train)
    if step % 20 == 0:
        print(step, sess.run(W), sess.run(b))

# 得到最佳拟合结果 W: [[0.100  0.200]], b: [0.300]

我们通过可视化图形,来直观的看本次训练的结果如何:

y_predict = sess.run(tf.matmul(W, x_data) + b)
# 预测结果y_predict与实际结果y_data,基本符合y=x的正比例函数
plt.scatter(y_data,y_predict[0])
plt.show()

从图像可以看出,预测结果与实际结果基本符合 y=x 的正比例函数,不过这是用训练集数据进行预测,一般情况下需要一个测试集迭代模型,一个验证集进行验证,此处只为演示 tensorflow 开发流程。
预测结果.png

  • Python

    Python 是一种面向对象、直译式电脑编程语言,具有近二十年的发展历史,成熟且稳定。它包含了一组完善而且容易理解的标准库,能够轻松完成很多常见的任务。它的语法简捷和清晰,尽量使用无异义的英语单词,与其它大多数程序设计语言使用大括号不一样,它使用缩进来定义语句块。

    535 引用 • 672 回帖 • 2 关注
  • TensorFlow

    TensorFlow 是一个采用数据流图(data flow graphs),用于数值计算的开源软件库。节点(Nodes)在图中表示数学操作,图中的线(edges)则表示在节点间相互联系的多维数据数组,即张量(tensor)。

    20 引用 • 19 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...