深度学习之TensorFlow学习(一)

TensorFlow学习(一)

  • TensorFlow安装
  • TensorFlow基本概念
  • TensorFlow简单例子

TensorFlow安装

在centos上面体验,使用的是Anaconda的方式,里面自带了很多默认的学习工具包,不需要在下载,当然没有搞GPU(以前旧版本的python要小心,由于墙的原因,很多在线下载的都用不了,找到下面这个合适的)
wget https://repo.continuum.io/archive/Anaconda3-5.0.1-Linux-x86_64.sh
bash Anaconda3-5.0.1-Linux-x86_64.sh
安装之后,创建一个tensorflow
conda create -n tensorflow python=3.5
source activate tensorflow
这样你的tensorflow就可以使用了。进入python命令行:
[hadoop@vm11 ~]$ python
Python 3.6.3 |Anaconda, Inc.| (default, Oct 13 2017, 12:02:49)
[GCC 7.2.0] on linux
Type “help”, “copyright”, “credits” or “license” for more information.

试试执行导入 import tensorflow as tf
如果遇到错误:I tensorflow/core/platform/cpu_feature_guard.cc:137] Your CPU supports instructions that this TensorFlow binary was not compiled to use: SSE4.1 SSE4.2 AVX AVX2 FMA。可以试试下面的方法:
import os
os.environ[‘TF_CPP_MIN_LOG_LEVEL’] = ‘2’
再重新执行就不会报错了。

TensorFlow基本概念

张量值
TensorFlow 中的核心数据单位是张量。一个张量由一组形成阵列(任意维数)的原始值组成。张量的阶是它的维数,而它的形状是一个整数元组,指定了阵列每个维度的长度。以下是张量值的一些示例:

  1. # a rank 0 tensor; a scalar with shape [],
    [1., 2., 3.] # a rank 1 tensor; a vector with shape [3]
    [[1., 2., 3.], [4., 5., 6.]] # a rank 2 tensor; a matrix with shape [2, 3]
    [[[1., 2., 3.]], [[7., 8., 9.]]] # a rank 3 tensor with shape [2, 1, 3]
    TensorFlow 使用 numpy 阵列来表示张量值。

    计算图是排列成一个图的一系列 TensorFlow 指令。图由两种类型的对象组成。

指令(或“op”):图的节点。 指令说明的是消耗和生成张量的计算。
张量:图的边。它们代表将流经图的值。大多数 TensorFlow 函数会返回 tf.Tensors。
a = tf.constant(3.0, dtype=tf.float32)
b = tf.constant(4.0) # also tf.float32 implicitly
total = a + b
print(a)
print(b)
print(total)
会话 (Session)
要评估张量,您需要实例化一个 tf.Session 对象(通常被称为会话)。会话会封装 TensorFlow 运行时的状态,并运行 TensorFlow 指令。如果说 tf.Graph 像一个 .py 文件,那么 tf.Session 就像一个可执行的 python。

下面的代码会创建一个 tf.Session 对象,然后调用其 run 方法来评估我们在上文中创建的 total 张量:

sess = tf.Session()
print(sess.run(total))

更多详细的概念请从文档出学习:
https://tensorflow.google.cn/programmers_guide/low_level_intro

TensorFlow简单例子

训练
我们来手动训练一个小型回归模型吧。

定义数据
我们首先来定义一些输入值 x,以及每个输入值的预期输出值 y_true:

x = tf.constant([[1], [2], [3], [4]], dtype=tf.float32)
y_true = tf.constant([[0], [-1], [-2], [-3]], dtype=tf.float32)
定义模型
接下来,建立一个简单的线性模型,其输出值只有 1 个:

linear_model = tf.layers.Dense(units=1)

y_pred = linear_model(x)
可以如下评估预测值:

sess = tf.Session()
init = tf.global_variables_initializer()
sess.run(init)

print(sess.run(y_pred))
该模型尚未接受训练,因此四个“预测”值并不理想。以下是我们得到的结果,预期的输出值应该是不一样的:

[[ 0.02631879]
[ 0.05263758]
[ 0.07895637]
[ 0.10527515]]
损失
要优化模型,首先需要定义损失。我们将使用均方误差,这是回归问题的标准损失。

虽然可以使用较低级别的数学运算指令来手动执行此操作,但 tf.losses 模块提供了一系列常用的损失函数。可以使用它来计算均方误差,具体操作如下所示:

loss = tf.losses.mean_squared_error(labels=y_true, predictions=y_pred)

print(sess.run(loss))
这会生成如下所示的一个损失值:

2.23962
训练
TensorFlow 提供了优化器来执行标准的优化算法。这些优化器被用作 tf.train.Optimizer 的子类别。它们会逐渐改变每个变量,以便将损失最小化。最简单的优化算法是梯度下降法,可通过 tf.train.GradientDescentOptimizer 执行。它会根据损失相对于变量的导数大小来修改各个变量。例如:

optimizer = tf.train.GradientDescentOptimizer(0.01)
train = optimizer.minimize(loss)
该代码构建了优化所需的所有图组件,并返回一个训练指令。该训练指令在运行时会更新图中的变量。可以按以下方式运行该指令:

for i in range(100):
_, loss_value = sess.run((train, loss))
print(loss_value)
由于 train 是一个指令而不是张量,因此它在运行时不会返回一个值。为了查看训练期间损失的进展,我们会同时运行损失张量,生成如下所示的输出值:

1.35659
1.00412
0.759167
0.588829
……….
完整程序
x = tf.constant([[1], [2], [3], [4]], dtype=tf.float32)
y_true = tf.constant([[0], [-1], [-2], [-3]], dtype=tf.float32)

linear_model = tf.layers.Dense(units=1)

y_pred = linear_model(x)
loss = tf.losses.mean_squared_error(labels=y_true, predictions=y_pred)

optimizer = tf.train.GradientDescentOptimizer(0.01)
train = optimizer.minimize(loss)

init = tf.global_variables_initializer()

sess = tf.Session()
sess.run(init)
for i in range(100):
_, loss_value = sess.run((train, loss))
print(loss_value)

print(sess.run(y_pred))
我执行的结果类似这样:
print(sess.run(y_pred))21.999
15.3802
10.7868
7.59887
5.38615
3.85012
2.78362
2.04293
1.52832
1.17058
每次迭代误差结果可以用图来看看 每次迭代误差结果这里写图片描述


猜你喜欢

转载自blog.csdn.net/hugolyl/article/details/80640286