TensorFlow的基本结构
任务:损失函数?? = ??2 −10?? +25,使用TensorFlow找到使损失函数最小的??值。
import numpy as np import tensorflow as tf w=tf.Variable(0,dtype=tf.float32) cost=tf.add(tf.add(w**2,tf.multiply(-10.,w)),25) #定义损失函数,或者写成w**2-10*w+25 train=tf.train.GradientDescentOptimizer(0.01).minimize(cost)#使用0.01的学习率最小化损失 init=tf.global_variables_initializer() session=tf.Session() #开启一个TensorFlow session session.run(init) #初始化全局变量 print(session.run(w)) #0.0 session.run(train) print(session.run(w)) #在一步梯度下降法之后,w是0.1 for i in range(1000): #梯度下降1000次之后,w的值接近5 session.run(train) print(session.run(w))
更通用的写法
import numpy as np import tensorflow as tf coefficients=np.array([[1.],[-10.],[25.]]) #系数数组(可换成其他数组) w=tf.Variable(0,dtype=tf.float32) x=tf.placeholder(tf.float32,[3,1]) #x变成[3,1]数组,placeholder函数告诉TensorFlow稍后为x提供数组,便于把训练数据加入损失方程 cost=x[0][0]*w**2+x[1][0]*w+x[2][0] #损失函数的另一种写法 train=tf.train.GradientDescentOptimizer(0.01).minimize(cost)#使用0.01的学习率最小化损失 init=tf.global_variables_initializer() session=tf.Session() #开启一个TensorFlow session session.run(init) #初始化全局变量 print(session.run(w)) #0.0 session.run(train,feed_dict={x:coefficients}) #将系数数组接入x,加入损失方程 print(session.run(w)) #0.1 for i in range(1000): session.run(train,feed_dict={x:coefficients}) print(session.run(w)) #4.99999
TensorFlow程序的核心是计算损失函数,自动计算导数,以及如何最小化损失。
???????? = ??[0][0]∗?? ∗∗2+??[1][0]∗?? +??[2][0]这行代码所做的就是让TensorFlow建立计算图。计算图所做的就是取??[0][0],取??,然后将它平方,然后??[0][0]和??2相乘,你就得到了??[0][0]∗??2,以此类推,最终整个建立起来计算???????? = ??[0][0]∗?? ∗∗2+??[1][0]∗?? +??[2][0],最后你得到了损失函数。