利用Tensorflow演示基于最小均差误差的线性判别函数参数拟合训练,可以作为Tensorflow卷积神经网络入门前的基础练习,练习Tensorflow的基本使用方法和模型训练的基本过程,希望对你有所帮助!
1、待拟合的线性判别函数形式为:
y=w*x+b
其中:
x为二维向量输入——通过np.random.rand()函数生成100条输入数据初始值
w为待拟合的权值参数向量——目标值为[0.1,0.2]
b为待拟合的阈值参数——目标值为0.3
y为输出——目标值为根据上述公式和输入x的初始值,以及w、b的目标值计算得到的y_data
2、损失函数(代价函数)使用均方误差函数
优化方法采用梯度下降法
基于梯度下降法最小化损失函数进行迭代训练200次,得到最终的参数w和b的训练结果
3、代码实现
具体项目Github地址,该Github项目最终完成基于Tensorflow和MNIST数据集的手写数字识别训练:
https://github.com/firemonkeygit/DeepLearningTensorflowMNIST
源代码如下所示,经过调试可用,输出结果为:
第200次迭代,w为[[0.10001309 0.20000857]],b为[0.29998827]
import numpy as np
import tensorflow as tf
# 生成 2*100的 数据,100条(x1,x2)二维数据
x_data = np.float32(np.random.rand(2, 100))
# y = wx + b
y_data = np.dot([0.100, 0.200], x_data) + 0.300
#设定初始参数值 b (1) w (1*2)
x = tf.placeholder(tf.float32, [2, 100], name="x")
y = tf.placeholder(tf.float32, [1, 100], name="y")
b = tf.Variable(tf.zeros([1]))
w = tf.Variable(tf.random_uniform([1, 2], -1.0, 1.0))
y_output = tf.matmul(w, x) + b
#定义优化目标函数
loss = tf.reduce_mean(tf.square(y_output-y))
#构建优化器
optimizer = tf.train.GradientDescentOptimizer(0.5)
train = optimizer.minimize(loss)
#初始化,variable变量必须初始化
#新版本已经不建议使用tf.initialize_all_variables()
init_new=tf.global_variables_initializer()
##启动图
with tf.Session() as sess:
sess.run(init_new)
for step in range(0,201):
sess.run(train,feed_dict={x:x_data,y:y_data.reshape(1,-1)})
if step % 20 == 0:
print("第{0}次迭代,w为{1},b为{2}".format(step, sess.run(w), sess.run(b)))