代码:
#!usr/bin/env python
# coding:utf-8
"""
这个代码的作用是 通过 tensorflow 来计算
y = 0.3x + 0.1 的线性方程
通过随机数,, 然后传递值到 训练模型中开始计算
并在 运行结束后, 将变量保存起来, 在下次运行的时候直接读取.
"""
import tensorflow as tf
import numpy as np
import os
# 建立方程组:
# 使用 np 获取一个 1---1000 的随机数
x_data = np.float32(np.random.rand(1, 100))
# 设置 方程组
y_data = 0.1 * x_data + 0.300
# 建立 模型
# 初始化 wieght 范围为-1 --> 1
Weight = tf.Variable(tf.random_uniform([1], -1.0, 1.0), name='Weight')
# 设置 b 初始化为 tf.zeros(1) 在初始化的时候会被置为0 , 然后为了保证 b 不为0 , 设置+0.1
b = tf.Variable(tf.zeros(1), name='b') + 0.1
x = tf.placeholder('float')
y_ = tf.mul(x, Weight) + b
# 梯度下降法, 来降低 weight 和b 值在修改中的改变
loss = tf.reduce_mean(tf.square(y_ - y_data))
train = tf.train.GradientDescentOptimizer(0.1).minimize(loss)
init = tf.global_variables_initializer()
sess = tf.Session()
saver = tf.train.Saver({"Weight": Weight})
# 还原保存数据 或者 初始化 变量
sess.run(init)
if os.path.exists("save_path"):
saver.restore(sess, "save_path/test.ckpt")
for i in range(1000):
# 如果直接 用 x_data 传入 y_ = tf.mul(x_data,Weight) 的话, 这里的 feed_dict 是不用赋值的.
sess.run(train, feed_dict={x: x_data})
if i % 100 == 0:
print(sess.run(Weight), sess.run(b))
print(sess.run(Weight), sess.run(b))
# 结束后, 保存变量.
if not os.path.exists("save_path"):
os.mkdir("save_path")
saver.save(sess, "save_path/test.ckpt")
sess.close()
基于之前的代码之上添加了 变量的保存和 恢复:
saver = tf.train.Saver({"Weight": Weight})
# 还原保存数据 或者 初始化 变量
sess.run(init)
if os.path.exists("save_path"):
saver.restore(sess, "save_path/test.ckpt")
for i in range(1000):
# 如果直接 用 x_data 传入 y_ = tf.mul(x_data,Weight) 的话, 这里的 feed_dict 是不用赋值的.
sess.run(train, feed_dict={x: x_data})
if i % 100 == 0:
print(sess.run(Weight), sess.run(b))
print(sess.run(Weight), sess.run(b))
# 结束后, 保存变量.
if not os.path.exists("save_path"):
os.mkdir("save_path")
saver.save(sess, "save_path/test.ckpt")
sess.close()
我暂时不知道怎么去 单独的恢复 一个变量, 只能是先在 恢复当个参数之前 加上 初始化全部参数了 ,
这个是生成出来的文件夹. 需要用到 python 的 os 库.