目录

API

一、准备数据(初始化随机数)

二、获取真实值

三、获取预测值(根据随机生成的权重和偏置)

1、随机生成权重和偏置

2、 获取预测值

四、构造损失函数

五、梯度下降优化

六、会话(执行)

做1次训练:

做10次训练:

做100次训练:

做1000次训练:

七、可视化

 1、创建事件文件

2、收集变量

3、合并变量

4、在会话中运行变量

5、每次迭代将变量写入文件 

八、模型保存与加载

1、创建saver对象

2、保存模型

3、加载模型

总代码


 

API

一、准备数据(初始化随机数)

这里我们设置的函数模型

y = weight*x + bias

weight = 0.8

bias = 0.7

初始化[100,1]的随机数:

# 初始化随机数(100行,1列)
x = tf.random_normal(shape=[100,1])

二、获取真实值

# 真实值
y_true = tf.matmul(x, [[0.8]]) + 0.7    

三、获取预测值(根据随机生成的权重和偏置)

1、随机生成权重和偏置

# 3-1、随机生成权重和偏置
weight = tf.Variable(initial_value=tf.random_normal(shape=[1,1]))    #权重
bias = tf.Variable(initial_value=tf.random_normal(shape=[1,1]))      #偏置

2、 获取预测值

根据上面生成的权重和偏置做预测

# 3-2、预测值(用随机权重参数做预测)
y_predict = tf.matmul(x, weight) + bias

四、构造损失函数

这里的损失,采用的均方误差计算: 

e6c7408eee19379ef69f4e3da467f5fafe6.png

# 4、构造损失函数
error = tf.reduce_mean(tf.square(y_predict-y_true))
#          平均           平方   (预测值-真实值)

五、梯度下降优化

以上面得到的误差作为损失,在梯度下降优化中训练

API: 

 

它的方法:minimize(loss)中的loss对象,“loss”是需要最小化的目标

# 5、梯度下降优化(优化损失)
optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.01).minimize(error)
#                                             学习率             最小化损失(目标)

 注:学习率过大可能会出现梯度爆炸的现象(学傻了) 

trainable参数可以设置是否可训练:

 

 

六、会话(执行)

做1次训练:

# 训练(基于梯度下降优化)
    for i in range(1):
        sess.run(optimizer)

 

可以发现有一些效果了,但是还不够明显。

做10次训练:

# 训练(基于梯度下降优化)
    for i in range(10):
        sess.run(optimizer)

做100次训练:

# 训练(基于梯度下降优化)
    for i in range(100):
        sess.run(optimizer)

可以发现效果已经很接近预期的weight=0.8和bias=0.7了。

做1000次训练:

# 训练(基于梯度下降优化)
    for i in range(1000):
        sess.run(optimizer)

优化完成,权重和偏置已经基本上达到了预期的weight=0.8,bias=0.7了。

七、可视化

 1、创建事件文件

# 可视化(1)创建事件文件
    file_writer = tf.summary.FileWriter("C:\\Users\\Administrator\\Desktop\\summary", graph=sess.graph)

2、收集变量

# 可视化(2)收集变量
tf.summary.scalar('error', error)
tf.summary.histogram('weight', weight)
tf.summary.histogram('bias', bias)

3、合并变量

# 可视化(3)合并变量
merge = tf.summary.merge_all()

4、在会话中运行变量

# 可视化(4)运行变量(合并后的变量)
        summary = sess.run(merge)

5、每次迭代将变量写入文件 

# 可视化(5)每次迭代的变量写入事件
        file_writer.add_summary(summary, i)

执行完之后,可以看到结果: 

八、模型保存与加载

1、创建saver对象

# 模型保存与加载(1)创建Saver模型
saver = tf.train.Saver()

 

2、保存模型

# 模型保存与加载(2)保存模型
        if i%10==0:
            saver.save(sess, 'C:\\Users\\Administrator\\Desktop\\summary\\model.ckpt')

3、加载模型

# 模型保存与加载(3)加载模型
        if os.path.exists('C:\\Users\\Administrator\\Desktop\\summary\\model.ckpt'):
            saver.restore(sess, 'C:\\Users\\Administrator\\Desktop\\summary\\model.ckpt')

 

 

 ok,能够看出,模型成功保存!

总代码

# 自实现线性回归
import tensorflow as tf
import os

# 1、准备数据
# 初始化随机数(100行,1列)
x = tf.random_normal(shape=[100, 1])

# 2、获取真实值
y_true = tf.matmul(x, [[0.8]]) + 0.7

# 3、随机生成权重和偏置,获取预测值
# 3-1、随机生成权重和偏置
weight = tf.Variable(initial_value=tf.random_normal(shape=[1, 1]))  # 权重
bias = tf.Variable(initial_value=tf.random_normal(shape=[1, 1]))  # 偏置
# 3-2、预测值(用随机权重参数做预测)
y_predict = tf.matmul(x, weight) + bias

# 4、构造损失函数
error = tf.reduce_mean(tf.square(y_predict - y_true))
#          平均           平方   (预测值-真实值)

# 5、梯度下降优化(优化损失)
optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.01).minimize(error)
#                                             学习率             最小化损失(目标)

# 可视化(2)收集变量
tf.summary.scalar('error', error)
tf.summary.histogram('weight', weight)
tf.summary.histogram('bias', bias)

# 可视化(3)合并变量
merge = tf.summary.merge_all()

# 模型保存与加载(1)创建Saver模型
saver = tf.train.Saver()

# 变量初始化
init = tf.global_variables_initializer()

# 会话(执行)
with tf.Session() as sess:
    # 变量初始化
    sess.run(init)
    print('训练前模型参数:权重%f,偏置%f,损失%f' % (weight.eval(), bias.eval(), error.eval()))

    # 可视化(1)创建事件文件
    file_writer = tf.summary.FileWriter("C:\\Users\\Administrator\\Desktop\\summary", graph=sess.graph)

    # 训练(基于梯度下降优化)
    for i in range(100):
        sess.run(optimizer)

        # 可视化(4)运行变量(合并后的变量)
        summary = sess.run(merge)
        # 可视化(5)每次迭代将变量写入事件
        file_writer.add_summary(summary, i)
        
        # 模型保存与加载(2)保存模型
        if i%10==0:
            saver.save(sess, 'C:\\Users\\Administrator\\Desktop\\summary\\model.ckpt')
        
#         # 模型保存与加载(3)加载模型
#         if os.path.exists('C:\\Users\\Administrator\\Desktop\\summary\\model.ckpt'):
#             saver.restore(sess, 'C:\\Users\\Administrator\\Desktop\\summary\\model.ckpt')

    print('训练后模型参数:权重%f,偏置%f,损失%f' % (weight.eval(), bias.eval(), error.eval()))
Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐