给亲爱的老板搭建人工智能平台,数据预处理花了2周已经准备完毕。开始模型搭建。
使用 TensorFlow, 你必须明白 TensorFlow:
- 使用图 (graph) 来表示计算任务.
- 在被称之为
会话 (Session)
的上下文 (context) 中执行图. - 使用 tensor 表示数据.
- 通过
变量 (Variable)
维护状态. - 使用 feed 和 fetch 可以为任意的操作(arbitrary operation) 赋值或者从其中获取数据.
主要数据结构是张量,tensor,变量或者占位符声明为张量。那么,创建张量。
zero_tsr = tf.zeros([3,4]) zero_tsr <tf.Tensor 'zeros:0' shape=(3, 4) dtype=float32> ones_tsr = tf.ones([3,4]) #用常数34填充这个维度 filled_tsr = tf.fill([3,4],34) #传入list类型,后面可以接shape指定该list的维度 constant_tsr = tf.constant([1,2,3]) #万能的 tf.convert_to_tensor()将常数或者numpy数组转成tensor
创建一个和指定tensor大小一样的新tensor,所有元素是0或者1,
zeros_similar = tf.zeros_like(constant_tsr) ones_similar = tf.ones_like(constant_tsr)
和range函数或者numpy的linspace函数类似功能的:
liner_tar = tf.linspace(start = 0.0,stop = 1, num = 3) #包括stop的值 #还有一个range() range_tsr = tf.range(start=6, limit = 15, delta= 3) #不包括limit的值随机张量
均匀分布随机数,从min到max
randunif_tsr = tf.random_uniform([3,4],minval = 0,maxval = 1)
正态分布随机数
random_randn = tf.random_normal([3,4],mean =0.0,stddev = 1.0)
张量随机剪裁
croped_image = tf.random_crop(my_image,[height/2,width/2,3])
封装张量 把张量封装成变量
my_var = tf.Variable(tf.zeros([3,4]))
占位符和变量
变量是机器学习的参数,占位符是tensorflow的对象。
A Graph
contains a set of Operation
objects, which represent units of computation; and Tensor
objects, which represent the units of data that flow between operations.
graph相当于是神经网络的neural,tesor就是data。
懒得看了基础了,直接写例子算了。
import tensorflow as tf import numpy as np #用numpy创建一百个随机数,转变成float32格式,因为tf支持这个 x_data = np.random.rand(100).astype(np.float32) #拿到一个简单线性模型,并获得y值 y_data = x_data * 0.1 + 0.3 #和神经网络一样的,先初始化参数和偏置 Weight = tf.Variable(tf.random_uniform([1],-1.0,1.0)) bias = tf.Variable(tf.zeros([1])) #weights是一维的,不用写dot y = Weight * x_data + bias #找loss function和调用库去看反向传播的参数优化,步长为0.5,目的是降低lossfunction loss = tf.reduce_mean(tf.square(y-y_data)) optimizer = tf.train.GradientDescentOptimizer(0.5) train = optimizer.minimize(loss) #初始化所有变量 init = tf.global_variables_initializer() #sess 调用会话函数,就和open函数差不多。 sess = tf.Session() sess.run(init) for step in range(300): sess.run(train) if step % 20 == 0: print(step,sess.run(Weight),sess.run(bias))
会话控制 session
matrix1 = tf.constant([[2,3,4,5],[6,5,4,2]]) matrix2 = tf.constant([[2,2],[3,3],[1,9],[9,6]]) #matmul matrix multiply 就是numpy的dot mult就是一个计算图 mult = tf.matmul(matrix1,matrix2) #控制输出 这个会话运行这个graph sess = tf.Session() result = sess.run(mult) print(result) sess.close() #关闭这个会话 #还可以不用写close,这样运行完后session就自动释放出来了。 with tf.Session() as sess: reslut2 = sess.run(mult)
变量:保存和更新网络中的参数
也就是说,神经网络中的参数是必须存在变量中的,这样就不用自己一个个来写了。都有针对W和b的函数,非常人性化。
val = tf.Variable(0,name = 'Count') const = tf.constant(1) new = tf.add(val,const) ass = tf.assign(val,new) init = tf.initialize_all_variables() with tf.Session() as sess: sess.run(init) for i in range(8): up = sess.run(ass) print(up) #任何东西都要sess进行运行,他们不会自动运行的,把运行这个步骤独立开来了。
#2 #3 #4