我的Tensorflow入门教程 【00-04】
新的一年我又配了一个新的机器学习环境,这次是在Win10下,去年是Ubuntu下,想来想去还是Windows做开发好使。另外充了256块钱的Gitchat会员,希望今年能多学一点AI相关的。配置开发环境CUDA8.0+CUDNN+Python3.5.2+PycharmTensorflow下文简称TF0.认识Tensorflow,并输出Hello TF与数字 首先,我们在这里要利...
新的一年我又配了一个新的机器学习环境,这次是在Win10下,去年是Ubuntu下,想来想去还是Windows做开发好使。另外充了256块钱的Gitchat会员,希望今年能多学一点AI相关的。
配置开发环境CUDA8.0+CUDNN+Python3.5.2+Pycharm
Tensorflow下文简称TF
0.认识Tensorflow,并输出Hello TF与数字
首先,我们在这里要利用TF自带的constant函数,用于建立一个常量节点,可用的包含所有数据格式
TF的一般架构,是比较传统的,和这种差不多,以从左到右的方式来进行计算和推演
Tensorflow架构下,节点(Node)是在图(Graph)内的
如果要执行节点获取结果,需要先进行评估,利用Session函数,评估后才能得到我们的结果
所以,如果要输出,我们需要先建立常量节点,建立会话,然后输出值,大致如下所示
import tensorflow as tf
import numpy as np
node1=tf.constant("hello")
node2=tf.constant(200)
sess = tf.Session()
print(sess.run([node2,node1]))
如果TF安装配置正确可以得到结果
[200, b'hello']
1.用Tensorflow完成矩阵加法数学运算
首先,我们需要定义两个常量,常量在tensorflow中是constant函数来定义的,这里需要注意的是,常量必须是相同的类型,例如float,如果在dtype中没有声明,tensorflow将会以最可能类型的来初始化值
a=tf.constant([1,2],name="a",dtype=tf.float32)
b=tf.constant([2,3.0],name="b",dtype=tf.float32)
计算结果为两者相加
result = a+b
建立会话得到计算结果并且打印输出
print(tf.Session().run(result))
这样就可以得到结果
[3. 5.]
2.用Tensorflow完成难一点的数学运算
在了解了一般的运算后,我们可以开始进行简单的图与节点的构建,并且塞入张量(tensor)
我想做一个
C=A+B
D=A*C
E=D+2
像这样的操作,并且最终输出D
代码如下,我先需要导入tensorflow并且设立常量,常量的设置使用constant函数
import tensorflow as tf
import numpy as np
const = tf.constant(2.0 ,name='const')
然后配置变量,tensorflow中,变量使用Variable函数来设置
a = tf.Variable(2.0, name='b') #a=2
b = tf.Variable(1.0, name='c') #b=1
加入节点与算法
c = tf.add(a,b,name='c') #c=a+b
d = tf.multiply(a,c,name='d') #d=a*c
e = tf.add(d,const,name='e') #e=d+2
然后就可以初始化全局变量,并按照计算图来执行,在这里只要执行初始化全局变量以及最后的e节点即可获得最终的结果
init_op = tf.global_variables_initializer()
with tf.Session() as sess:
sess.run(init_op)
a_out = sess.run(e)
print("Variable a is {}".format(a_out))
此时,我们的整个网络是这样的
最终结果,e=8
Variable a is 8.0
全部代码如下:
#count out E=A*(A+B)+2
import tensorflow as tf
import numpy as np
const = tf.constant(2.0 ,name='const')
a = tf.Variable(2.0, name='b') #a=2
b = tf.Variable(1.0, name='c') #b=1
c = tf.add(a,b,name='c') #c=a+b
d = tf.multiply(a,c,name='d') #d=a*c
e = tf.add(d,const,name='e') #e=d+2
init_op = tf.global_variables_initializer()
with tf.Session() as sess:
sess.run(init_op)
a_out = sess.run(e)
print("Variable a is {}".format(a_out))
3.如何使用tensorflow占位符输入数字
在前面,我们的变量和常量都是事先赋值好的,那么,如果说要仅仅是定义一个变量但不给它赋值,在后面运算的时候才赋值的话,就需要使用到占位符placeholder
这里演示使用placeholder来计算y=a*x的操作,先设置x和a,其中a是一个变量,有着初始值,而x是已经定义了维度(Shape)的一个占位符,没有初始值
a = tf.Variable(4.4,dtype=tf.float32) #设置一个32位浮点变量
x = tf.placeholder(tf.float32,shape=(1,2),name="input") #初始化占位符
再之后则是定义y是a和x相乘的结果
y = tf.multiply(x,a,name="mul") #调用tf的乘法函数使得x和a相乘
这样,就完成了值和算法的编写,随后就是初始化和运行,输出结果。贴上全部的代码:
import tensorflow as tf
a = tf.Variable(4.4,dtype=tf.float32) #设置一个32位浮点变量
x = tf.placeholder(tf.float32,shape=(1,2),name="input") #初始化占位符
y = tf.multiply(x,a,name="mul") #调用tf的乘法函数使得x和a相乘
sess = tf.Session() #建立会话
init_op = tf.global_variables_initializer() #初始化全局变量
sess.run(init_op) #执行初始化全局变量的函数
print(sess.run(y,feed_dict={x:[[1.0,2.0]]})) #获取y的结果,需要先给之前占位符变量赋值
执行后,就是计算【1.0,2.0】矩阵和4.4相乘得到的结果
[[4.4 8.8]]
4.如何使用tensorflow占位符输入数组
这里使用2号例子进行修改,将原先赋值变量b变为设置32位float型占位符,目的是使得b有不同的值,输出不同的结果,在下面的代码中,None是指数值不确定,1则表示是1维,如果我要输入图片,例如一张图是100像素,那这里就修改为100.
b = tf.placeholder(tf.float32, [None, 1], name='b')
结合numpy来赋值,主要是修改sess.run运行的部分,从而实现给变量b赋予不同的值,我们使用numpy来产生一列数值
a_out = sess.run(e,feed_dict={b: np.arange(0,12)[:,np.newaxis]})
np.arange产生0开始的12个数,也就是0-11,而[:,np.newaxis]则将这一数组分布为一列,运算的结果是
[[ 6.]
[ 8.]
[10.]
[12.]
[14.]
[16.]
[18.]
[20.]
[22.]
[24.]
[26.]
[28.]]
经过占位符修改的代码如下
#count out E=A*(A+B)+2
import tensorflow as tf
import numpy as np
const = tf.constant(2.0 ,name='const')
a = tf.Variable(2.0, name='a') #a=2
b = tf.placeholder(tf.float32,[None,1], name='b') #set placeholder
c = tf.add(a,b,name='c') #c=a+b
d = tf.multiply(a,c,name='d') #d=a*c
e = tf.add(d,const,name='e') #e=d+2
init_op = tf.global_variables_initializer()
with tf.Session() as sess:
sess.run(init_op)
a_out = sess.run(e,feed_dict={b: np.arange(0,12)[:,np.newaxis]})
print("Variable a is {}".format(a_out))
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)