第一课 Tensorflow基本概念

基本概念

分享朋友的机器学习应用案例:使用机器学习实现财富自由www.abuquant.com

tensorflow是基于图的计算,也就是说,tensorflow是先有图,然后,才开始计算。那么,所以在建立变量和操作的时候,仅仅是图的构成,如果不运行是无法知道具体数据的.

import tensorflow as tf
import numpy as np
from IPython.display import display, HTML
np_matrix = np.zeros((3, 4))

display(np_matrix)

tf_matrix = tf.zeros((3, 4))

display(tf_matrix)
array([[ 0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.]])



<tf.Tensor 'zeros:0' shape=(3, 4) dtype=float32>

看到对于tf_matrix来说,并不是一个数值,像numpy一样,而仅仅是一个图的节点信息,因为只有到运行的时候才会有具体的数据.

常量运算

tensorflow中分为常量也变量,常量就是事先定义好的数据,无法改变的数据,而变量是可以改变的数据,这和编程的思想基本一致.

a = tf.constant(2)
b = tf.constant(3)
# 如前面所述,其实只是定义了常量,在运算的时候会填充2和3

x = tf.add(a, b) # 定义了一个运算

# 图已经构建完毕,接下来需要让图运行起来, 需要建立一个session

with tf.Session() as session:

    print session.run(x)
5

tensorflow还可以使用tensorboard来查看图的构成. tensorboard的原理,就是打印日志,分析日志来建立可视化。所以需要将日志打印加入进去.

a = tf.constant(2)
b = tf.constant(3)
# 如前面所述,其实只是定义了常量,在运算的时候会填充2和3

x = tf.add(a, b) # 定义了一个运算

# 图已经构建完毕,接下来需要让图运行起来, 需要建立一个session

with tf.Session() as session:

    # 加入日志打印
    writer = tf.summary.FileWriter('./graphs/const_add', session.graph)
    print session.run(x)
writer.close()
5

日志文件会出现在 graphs目录中, const_add 就是这次日志的输出. 继续看下面的例子:

a = tf.constant([2, 2], name='a')
b = tf.constant([[0, 1], [2, 3]], name='b')

x = tf.multiply(a, b, name='dot_product')

with tf.Session() as session:
    writer = tf.summary.FileWriter('./graphs/const_mul', session.graph)
    print session.run(x)
writer.close()
[[0 2]
 [4 6]]
a = tf.constant([[2, 2], [3, 3]], name='a')
b = tf.constant([[0, 1], [2, 3]], name='b')

x = tf.multiply(a, b, name='dot_product')
y = tf.matmul(a, b, name='mat_mul')

with tf.Session() as session:
    writer = tf.summary.FileWriter('./graphs/mat_mul', session.graph)
    print session.run(x)
writer.close()
[[0 2]
 [6 9]]

变量

# 变量会在 'meh' scope 中,在graph 中看起来容易
with tf.variable_scope('meh') as scope:
    a = tf.get_variable('a', [10])
    b = tf.get_variable('b', [100])

writer = tf.summary.FileWriter('./graphs/test', tf.get_default_graph())

对变量进行求导

x = tf.Variable(2.0)
y = 2.0 * (x ** 3)
z = 3.0 + (y ** 2)

grad_z = tf.gradients(z, [x, y])

with tf.Session() as session:
    session.run(x.initializer)  # 变量的initializer 也是一个op要先执行,需要对变量进行初始化. 前面定义的x是只是定义
    print(session.run(grad_z))
[768.0, 32.0]

对于 gradients 函数来说, 求的是 dz/dx 和 dz/dy.

对变量进行赋值

w = tf.Variable(10)
assign_op = w.assign(100) # 将变量w 修改成100

with tf.Session() as session:
    print session.run(w.initializer)
    print w.eval()
    print session.run(assign_op)
    print w.eval() 
None
10
100
100

一次性初始化所有变量

上面每次都调用一个initilizer比较麻烦,可以通过global_variables_initializer 初始化所有的变量.

my_var = tf.Variable(2, name='my_var')

my_var_times_two = my_var.assign(my_var * 2) # 将自己乘以2 后再赋值给自己

with tf.Session() as session:
    session.run(tf.global_variables_initializer()) # 一次性初始化所有的变量, 注意这是一个函数,前面Variablie.initliazer是一个成员
    print session.run(my_var_times_two)
    print session.run(my_var_times_two)
    print session.run(my_var_times_two)
4
8
16

placeholder

前面有常量,在初始化的时候就定义好的,类似程序中: const int a = 10; 变量需要声明而后初始化,类似于 int* a = malloc(4); *a = 10;
在graph中二者的声明周期都是一致存在的,也就是session级别的;然而,在训练的时候,是需要一批训练数据送进图中执行一次,那么这种生命周期,相当于一次图的运行,也就是一次训练。这种数据生命周期和图运算一致的,这就是placeholder,用来一次图运算中保存的数据.

a = tf.placeholder(tf.float32, shape=[3])
b = tf.constant([5, 5, 5], tf.float32)
c = a + b

with tf.Session() as session:
    print session.run(c, {a: [1, 2, 3]})
[ 6.  7.  8.]
a = tf.add(2, 5)
b = tf.multiply(a ,3)

with tf.Session() as session:
    print session.run(b)
21
a = tf.add(2, 5)
b = tf.multiply(a ,3)

with tf.Session() as session:
    print session.run(b, {a: 15}) # 可以直接feed
45
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值