tensorflow基本知识

1、一些基本概念
tensorflow是一个框架,Google 开源的基于数据流图的科学计算库,适合用于机器学习、深度学习等人工智能领域.Tensor(张量)意味着N维数组,Flow(流)意味着基于数据流图的计算,TensorFlow为张量从流图的一端流动到另一端计算过程。这些听着可能有些抽象,没关系,我们可以根据具体案例学习。还有一个重要的概念----会话(session),用来计算任务。

2、创建图,启动图

import tensorflow.compat.v1 as tf
tf.compat.v1.disable_eager_execution()

m1=tf.constant([[3,3]])
m2=tf.constant([[2],[3]])
product=tf.matmul(m1,m2)
#print(product)不会计算结果
with tf.Session() as sess:
    result=sess.run(product)
    print(result)

这个例子我们创建了两个常量矩阵,并且矩阵乘法,必须在会话里run一下才能计算出结果。需要注意的是,我们可能会出现tf没有session这个属性,这是版本的问题,一般现在我们用的是2版本。至于要加上import tensorflow.compat.v1 as tf
tf.compat.v1.disable_eager_execution()就可以解决问题。

3、变量

#变量
import tensorflow.compat.v1 as tf
tf.compat.v1.disable_eager_execution()

x=tf.Variable([1,2])
a=tf.constant([3,3])
sub=tf.subtract(x,a)
add=tf.add(x,sub)
init=tf.global_variables_initializer()
with tf.Session() as sess:
    sess.run(init)
    print(sess.run(sub))
    print(sess.run(add))
第二个
import tensorflow.compat.v1 as tf
tf.compat.v1.disable_eager_execution()
state=tf.Variable(0,name='counter')
new_value=tf.add(state,1)
update=tf.assign(state,new_value)
init=tf.global_variables_initializer()
with tf.Session() as sess:
    sess.run(init)
    print(sess.run(state))
    for i in range(5):
        sess.run(update)
        print(sess.run(state))

在例子中,我们创建了变量,注意的是只要创建了变量必须初始化(很重要)不然无法计算,在第二个我们还知道了assign操作符,意思就是把后一个参数的值赋值给前一个参数,这就相当于平常的=等号,我们体会到在tf中,操作符都用‘’函数‘’的形式表现出来,比如add,multiply等。

4、fetch、feed

#fetch,feed
import tensorflow.compat.v1 as tf
tf.compat.v1.disable_eager_execution()

input1=tf.constant(1.0)
input2=tf.constant(2.0)
input3=tf.constant(3.0)
add=tf.add(input2,input3)
mul=tf.multiply(input1,add)
in1=tf.placeholder(tf.float32)#占位符
in2=tf.placeholder(tf.float32)
output=tf.multiply(in1,in2)
with tf.Session() as sess:
    result=sess.run([add,mul])#fetch
    print(result)
    print(sess.run(output,feed_dict={
     in1:2.0,in2:8.0}))#feed

在这个例子中,我们了解了,fetch就是一次可以计算多个操作,比如加法和乘法,这个比较简单。feed也是比较重要的,以后常用,feed相当于传参,需要先给占位符in1,in2,在sess.run()里面才给出具体的值,以字典的形式给出。我们在平常其他的编程中,也用到这种类似的思想,比如在函数定义和传参。

5、简单的案例

#简单示例
import tensorflow.compat.v1 as tf
tf.compat.v1.disable_eager_execution()
import numpy as np
x_data=np.random.rand(100)
y_data=x_data*0.1+0.2
k=tf.Variable(0.)
b=tf.Variable(0.)
y=k*x_data+b
loss=tf.reduce_mean(tf.square(y_data-y))#均方误差
optimizer=tf.train.GradientDescentOptimizer(0.2)#0.2是学习率
train=optimizer.minimize(loss)#最小化误差
init=tf.global_variables_initializer()
with tf.Session() as sess:
    sess.run(init)
    for s in range(201):
        sess.run(train)
        if(s%20==0):
            print(s,sess.run([k,b]))

在这个例子中,我们先生成了线性函数模板,Y=0.1x+0.2,又定义了一个线性模型,我们目的就是通过训练,让它趋近于模板。
结果如下;
0 [0.051676758, 0.09938855]
20 [0.10183273, 0.19904478]
40 [0.10103951, 0.19945827]
60 [0.100589596, 0.19969274]
80 [0.10033441, 0.19982572]
100 [0.10018967, 0.19990116]
120 [0.100107595, 0.19994393]
140 [0.10006103, 0.19996819]
160 [0.100034624, 0.19998196]
180 [0.100019634, 0.19998977]
200 [0.10001113, 0.19999419]
经过两百次迭代,我们发现已经和模板很接近了,有趣的是每次较上次都是更加接近的,最后会收敛。这应该和随机梯度下降的原理有关,每次都和最低点更近,而强化学习的过程中,我们的误差不是每次都会变小,是波动渐近的,具体的就不一一解释了。学习率是控制学习快慢的,需要取合适的值,偏小会导致速度慢,太大会造成不收敛的情况,具体也不解释了,网上都有详细介绍。

你可能感兴趣的:(tensorflow学习笔记,tensorflow)