好玩的人工智能
快乐的深度学习

灰常完整的tensorflow知识点,简单易懂

  • Tensorflow中每个操作符当做一个节点,连接节点的线称为边,边中流动的数据称为tensor。有一类特殊的边中没有数据流动,这种边称为是依赖控制,作用是让起始节点执行完后在执行目标节点,可以进行灵活的条件控制。
  • 运算核(kernal)是指一个运算操作在某个具体硬件(比如CPU或GPU中)的实现。
  • Tensorflow内建的操作运算有如下:
类型 实例
标量运算 Add、Sub、Mul、Div、Exp、Log、Greater、Less、Equal
向量运算 Concat、Slice、Split、Constant、Rank、Shape、Shuffle
矩阵运算 MatMul、MatrixInverse、MatrixDeterminant
带状态的运算 Variable、Assign、AssignAdd
神经网络组件 SoftMax、Sigmoid、ReLU、Convolution2D、MaxPooling
储存、恢复 Save、Restore
队列及同步运算 Enqueue、Dequeue、MutexAcquire、MutexRelease
控制流 Merge、Switch、Enter、Leave、NextIteration

1、设置定量

import tensorflow as tf

node1 = tf.constant(3.0,dtype = tf.float32)
node2 = tf.constant([2.3],dtype = tf.float32)
sess = tf.Session()
print(sess.run([node1,node2]))

使用tf.constant可以创建定量,但是必须使用session才能显示定量的数据,session封装了tensorflow的控制以及状态,调用run方法,可以得到constant的值。

2、tf的操作符,加法

import tensorflow as tf

node1 = tf.constant(3.0,dtype = tf.float32)
node2 = tf.constant([2.3],dtype = tf.float32)

node3 = tf.add(node1,node2)


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

3、placeholder类型量
placeholder相对与constant型,可以接受外部输入,改变自身的数值。

import tensorflow as tf

node1 = tf.placeholder(tf.float32)
node2 = tf.placeholder(tf.float32)

node3 = node1 + node2

sess = tf.Session()
print(sess.run(node3,{node1:3,node2:4}))

 

node1与node2 为创建的两个可以就收外部输入的量,可以通过字典传入数据。

import tensorflow as tf

node1 = tf.placeholder(tf.float32)
node2 = tf.placeholder(tf.float32)

node3 = node1 + node2
node4 = node3 * 2


sess = tf.Session()
print(sess.run(node4,{node1:[3,4],node2:[4,5]}))

可以使用连续运算操作符,并且字典可以通过列表形式传入多个数据。

placeholder用于提供输入数据,在定义时,数据类型是需要指定的,但是维度信息可以不用·给定,如果不确定可以用None代替。

x = tf.placeholder(tf.float32,shape=(None,2),name = 'x-input')

4、variable类型
在机器学习中,我们需要在训练过程中调整参数,这种可在训练过程中调整的数据类型为variable类型。可以通过一个初始值与数据类型进行声明。

import tensorflow as tf

weight = tf.Variable(3,dtype = tf.float32)
bias = tf.Variable(1,dtype = tf.float32)
x = tf.placeholder(tf.float32)
y = weight * x + bias


init = tf.global_variables_initializer()

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

print(sess.run(y,{x:3}))

与constant类型(在声明时就初始化)不同,variable类型变量需要调用如下代码进行初始化:

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

tf.Variable的作用就是保存和更新神经网络中的参数。初始值可以设置为随机数。如下方式

import tensorflow as tf


w1 = tf.Variable(tf.random_normal([2,3],stddev=1,mean=1,seed=1,dtype=tf.float32))
with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    print(sess.run(w1))

 

Tensorflow随机数生成函数

函数名称 随机数分布 主要参数
tf.random_normal 正态分布 平均值,标准差,取值类型
tf.truncated_normal 正态分布,但如果随机出来的值偏离平均值超过2个标准差,那么这个数将会被重新生成

Tensorflow生成常数函数

函数名称 功能 样例
tf.zeros 生成全0的数组 tf.zeros([2,3],int32)->[[0,0,0],[0,0,0]]
tf.ones 生成全1的数组 tf.ones([2,3],int32)->[[1,1,1],[1,1,1]]
tf.fill 产生一个全部为给定数字的数组 tf.fill([2,3],9)->[[9,9,9],[9,9,9]]
tf.constant 产生一个给定值的常量 tf.constant([2,3])->[2,3]

Tensorflow也支持通过其他变量的初始值来初始化新的变量,如下所示

import 
tensorflow as tf
w1 = tf.Variable(tf.random_normal([2,3],stddev=1,mean=1,seed=1,dtype=tf.float32))
w2 = tf.Variable(w1.initialized_value())

w2使用w1的初始值进行初始化

如果变量声明时,参数trainable为True,那么这个变量会被加入GraphKeys.TRANINABLE_VARIABLES集合中。在Tensorflow中可以通过tf.trainable_variables()函数得到所有需要优化的参数。Tensorflow中提供的神经网络优化算法将会GraphKeys.TRANINABLE_VARIABLES集合中的变量当做默认的优化对象。

5、loss function 误差计算

import tensorflow as tf

weight = tf.Variable(3,dtype = tf.float32)
bias = tf.Variable(1,dtype = tf.float32)
x = tf.placeholder(tf.float32)
line_regress = weight * x + bias

y = tf.placeholder(tf.float32)

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

squared_deltas = tf.square(line_regress - y)
loss = tf.reduce_sum(squared_deltas) 

print(sess.run(loss,{x:[1,2,3,4],y:[0,-1,-2,-3]}))

y为理想输出,line_regress为实际计算输出。loss为误差平方和。

6、variable类型变量的改变

import tensorflow as tf

weight = tf.Variable(3,dtype = tf.float32)
bias = tf.Variable(1,dtype = tf.float32)
x = tf.placeholder(tf.float32)
line_regress = weight * x + bias

y = tf.placeholder(tf.float32)

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

squared_deltas = tf.square(line_regress - y)
loss = tf.reduce_sum(squared_deltas) 

fixW = tf.assign(weight, -1.)
fixb = tf.assign(bias, 1.)
sess.run([fixW, fixb])


print(sess.run(loss,{x:[1,2,3,4],y:[0,-1,-2,-3]}))

使用了如下代码,对variable类型量进行了重新赋值:

fixW = tf.assign(weight, -1.)
fixb = tf.assign(bias, 1.)
sess.run([fixW, fixb])

 

维度是变量的一个重要属性,但是维度能够在程序运行中进行改变,但是需要设置参数validate_shape=False

fixW =tf.assign(w1,w2,validate_shape = False)

7、训练
简单的使用梯度下降法,确定上述线性回归的参数值。

import tensorflow as tf

weight = tf.Variable(1,dtype = tf.float32)
bias = tf.Variable(-1,dtype = tf.float32)
x = tf.placeholder(tf.float32)
line_regress = weight * x + bias

y = tf.placeholder(tf.float32)

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


squared_deltas = tf.square(line_regress - y)
loss = tf.reduce_sum(squared_deltas) 

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

sess.run(init)
for i in range(1000):
    sess.run(train,{x:[1,2,3,4],y:[0,-1,-2,-3]})
    if i % 10 == 0:
        print(i,sess.run([weight,bias,loss],{x:[1,2,3,4],y:[0,-1,-2,-3]}))

 

8、线性回归例程

import numpy as np
import tensorflow as tf

##声明特征列表
feature_columns = [tf.feature_column.numeric_column("x",shape=[1])]
##创建线性回归,还有线性分类,神经网络分类等
estimator = tf.estimator.LinearRegressor(feature_columns = feature_columns)


##创建训练数据
x_train = np.array([1.,2.,3.,4.])
y_train = np.array([0.,-1.,-2.,-3.])
x_eval = np.array([2.,5.,8.,1.])
y_eval = np.array([-1.01, -4.1, -7, 0.])

input_fn = tf.estimator.inputs.numpy_input_fn({'x':x_train},y_train,batch_size=4,num_epochs=None,shuffle=True)
train_input_fn = tf.estimator.inputs.numpy_input_fn({'x':x_train},y_train,batch_size=4,num_epochs=1000,shuffle=False)
eval_input_fn = tf.estimator.inputs.numpy_input_fn({'x':x_eval},y_eval,batch_size=4,num_epochs=1000,shuffle=False)


##训练
estimator.train(input_fn=input_fn,steps=1000)

train_metrics = estimator.evaluate(input_fn=train_input_fn)
eval_metrics = estimator.evaluate(input_fn=eval_input_fn)
eval_pre = estimator.predict(input_fn= eval_input_fn)


print("train metrics: %r"%train_metrics)
print('eval metrics: %r'%eval_metrics)
for i in eval_pre:

    print('predict: ',i)
未经允许不得转载:零点智能 » 灰常完整的tensorflow知识点,简单易懂
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

零点智能 人工智能社区,加Q群:469331966

投稿&建议&加Q群