假设你有一个损失函数J需要最小化
情况一
J=w^2-10w+25 (w的一个固定的函数,系数是固定的)
现在使用Tensorflow将其最小化
import numpy as np
import tensorflow as tf
#定义参数w,利用tf.Variable
w = tf.Variable(0,dtype=tf.float32)
#定义损失函数
#cost = tf.add(tf.add(w**2,tf.multiply(-10,w)),25)
cost = w**2- 10w + 25 #一旦w被定义为Tensorflow变量,平方,乘法,和加减运算都重载了
#建立计算图,计算图基本实现前向传播,Tensorflow内置了必要的反向函数,可以自动实现反向传播
train = tf.train.GradientDescentOptimizer(0.01).minimize(cost)
init = tf.global_variables_initializer()
session = tf.Session()
session.run(init) #初始化全局变量
for i in range(1000):
session.run(train)
print(session.run(w))
情况二
如果w的系数不是固定的,根据需要自行输入
J=a w^2 + b w + c 25
(注意图里面计算图的表示)
利用训练数据x来控制函数J的系数,利用placeholder把训练数据加入
x = tf.placeholder(tf.float32,[3,1])
要接入x的数据
coefficients = np.array([[1.],[-10.],[25]])
把系数数组接入变量x,在训练代码处
session.run(train,feed_dict={x:coefficients})
如果要做mini-batch梯度下降,在每次迭代时需要插入不同的mini-batch,就用feed_dict来喂入训练集的不同子集。