发新帖

代码 6-3 动态图另一种梯度方法.py 模块缺失相应函数问题

[复制链接]
233 1
  1. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">#-*-编码:utf-8-*- </font></font>
  2. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">“”“ </font></font>
  3. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">@author:代码医生工作室</font></font>
  4. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">@公众号:xiangyuejiqiren(内有更多优秀文章及学习资料)</font></font>
  5. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">@来源:<深度学习之TensorFlow工程化项目实战>配套代码(700+页)</font></font>
  6. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">@配套代码技术支持:bbs.aianaconda.com(有问必答)</font></font>
  7. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">“”“ </font></font>

  8. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">#使用动态图训练一个具有检查点的回归模型</font></font>

  9. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">import tensorflow as tf </font></font>
  10. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">import numpy as np </font></font>
  11. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">import matplotlib .pyplot as plt </font></font>
  12. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">导入tensorflow.contrib.eager as tfe </font></font>

  13. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">tf.enable_eager_execution()</font></font>
  14. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">print(“ TensorFlow版本:{}”。format(tf.VERSION))</font></font>
  15. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">print(“急切执行:{}”。format(tf.executing_eagerly( )))</font></font>

  16. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">#(1)生成模拟数据</font></font>
  17. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">train_X = np.linspace(-1,1,100)</font></font>
  18. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">train_Y = 2 * train_X + np.random.randn(* train_X.shape)* 0.3#y = 2x,但是加入了噪声</font></font>
  19. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">#图形显示</font></font>
  20. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">plt.plot(train_X,train_Y,'ro',label ='原始数据')</font></font>
  21. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">plt.legend()</font></font>
  22. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">plt.show()</font></font>

  23. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">#定义学习参数</font></font>
  24. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">#W = tfe.Variable(tf.random_normal([1]),dtype = tf.float32,名称=“ weight”)</font></font>
  25. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">#b = tfe.Variable(tf.zeros([1]),dtype = tf.float32,名称=“ bias”)</font></font>
  26. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">W = tf.Variable(tf.random_normal([ 1]),dtype = tf.float32,名称=“ weight”)</font></font>
  27. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">b = tf.Variable(tf.zeros([1]),dtype = tf.float32,名称=“ bias”)</font></font>
  28. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">global_step = tf.train.get_or_create_global_step ()</font></font>

  29. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">learning_rate = 0.01 </font></font>
  30. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">#随机梯度下降法作为优化器</font></font>
  31. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">optimizer = tf.train.GradientDescentOptimizer(learning_rate = learning_rate)</font></font>


  32. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">#将numpy导入为np </font></font>
  33. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">#def print_even_callback(op_type,op_name,attrs,输入,输出):</font></font>
  34. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">##仅显示偶数输出值的回调。</font></font>
  35. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">#print(“ ___”,op_type,“ ___”,op_name,“ ___”,attrs,“ ___”,输入,“ ___”,输出,“ _ ok_”)</font></font>
  36. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">## print(len(outputs),inputs.numpy( ))</font></font>

  37. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">def getcost(x,y):#定义函数,计算损耗值</font></font>
  38. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">    #前向结构</font></font>
  39. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">    z = tf.cast(tf.multiply(np.asarray(x,dtype = np.float32),W)+ b,dtype = tf.float32)</font></font>
  40. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">    #tfe.add_execution_callback(print_even_callback)</font></font>
  41. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">    成本= tf.reduce_mean(tf.square(y-z))#损失值</font></font>
  42. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">    #tfe.clear_execution_callbacks()</font></font>
  43. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">    返回成本</font></font>


  44. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">def grad(输入,目标):</font></font>
  45. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">    使用tf.GradientTape ()as tape:</font></font>
  46. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">        loss_value = getcost(inputs,target)</font></font>
  47. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">    return tape.gradient(loss_value,[W,b])</font></font>


  48. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">#定义saver,演示两种方法处理检查点文件</font></font>
  49. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">savedir =“ logeager /”</font></font>
  50. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">savedirx =“ logeagerx /”</font></font>
  51. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">saver = tf.train.Saver([W,b],max_to_keep = 1)#生成saver。max_to_keep = 1,表明最多只保存一个检查点文件</font></font>
  52. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">saverx = tfe.Saver([W,b])#生成saver。 max_to_keep = 1,表明最多只保存一个检查点文件</font></font>

  53. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">kpt = tf.train.latest_checkpoint(savedir)#找到检查点文件</font></font>
  54. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">kptx = tf.train.latest_checkpoint(savedirx)#找到检查点文件</font></font>
  55. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">if kpt!=无:</font></font>
  56. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">    保护程序。 restore(None,kpt)#两种加载方式都可以</font></font>
  57. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">    saverx.restore(kptx)</font></font>

  58. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">training_epochs = 20#</font><font style="vertical-align: inherit;">继承</font><font style="vertical-align: inherit;">训练次数</font></font>
  59. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">display_step = 2 </font></font>

  60. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">plotdata = {“ batchsize”:[],“ loss”:[]}#收集训练参数</font></font>

  61. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">而global_step / len(train_X)<training_epochs:#迭代训练模型</font></font>
  62. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">    step = int(global_step / len(train_X))</font></font>
  63. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">    for zip(train_X,train_Y)中的</font></font>
  64. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">        (x,y)</font><font style="vertical-align: inherit;">:grads </font><font style="vertical-align: inherit;">= grad(x,y)</font></font>
  65. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">        optimizer.apply_gradients(zip(grads,[W,b]),global_step = global_step)</font></font>

  66. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">    #显示训练中的详细信息</font></font>
  67. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">    if step%display_step == 0:</font></font>
  68. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">        cost = getcost(x,y)</font></font>
  69. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">        print(“ Epoch:”,step +1,</font></font>
  70. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">        如果没有</font><font style="vertical-align: inherit;">,则为“ cost =“,cost.numpy(),” W =“,W.numpy(),” b =“,b.numpy())</font><font style="vertical-align: inherit;">(cost ==” NA“):</font></font>
  71. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">            plotdata [” batchsize“]。append(global_step.numpy())</font></font>
  72. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">            plotdata [” loss“]。append(cost.numpy())</font></font>
  73. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">        saver.save(无,saveir +” linermodel.cpkt“,global_step)</font></font>
  74. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">        saverx.save(savedirx +”线性模型.cpkt“,global_step)</font></font>

  75. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">print(”完成!“)</font></font>
  76. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">saver.save(无,saveir +” linermodel.cpkt“,global_step)</font></font>
  77. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">saverx。保存(savedirx +“ linermodel.cpkt”,global_step)</font></font>
  78. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">print(“ cost =”,getcost(train_X,train_Y).numpy(),“ W =”,W.numpy(),“ b =”,b.numpy())</font></font>

  79. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">#显示模型</font></font>
  80. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">plt.plot(train_X,train_Y ,'ro',label ='原始数据')</font></font>
  81. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">plt.plot(train_X,W * train_X + b,label ='固定线')</font></font>
  82. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">plt.legend()</font></font>
  83. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">plt.show()</font></font>


  84. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">def moving_average(a,w = 10) :#定义生成损失可视化的函数</font></font>
  85. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">    if len(a)<w:</font></font>
  86. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">        返回a [:] </font></font>
  87. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">    return [val如果idx <w else sum(a [(idx-w):idx])/ w for idx,val in enumerate (a)] </font></font>


  88. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">plotdata [“ avgloss”] = moving_average(plotdata [“ loss”])</font></font>
  89. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">plt.figure(1)</font></font>
  90. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">plt.subplot(211)</font></font>
  91. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">plt.plot(plotdata [“ batchsize”],plotdata [“ avgloss”], 'b--')</font></font>
  92. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">plt.xlabel('最小批量编号') </font></font>
  93. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">plt.ylabel('损失')</font></font>
  94. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">plt.title('小批量生产vs.训练损失')</font></font>

  95. <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">plt.show()</font></font>
复制代码
我知道答案 回答被采纳将会获得10 金币 + 5 金币 已有1人回答

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?加入社区

x
本楼点评(0) 收起

精彩评论1

孔庆鑫  TF荚荚  发表于 2019-12-9 16:16:10 | 显示全部楼层
正确代码


# -*- coding: utf-8 -*-
"""
@author: 代码医生工作室
@公众号:xiangyuejiqiren   (内有更多优秀文章及学习资料)
@来源: <深度学习之TensorFlow工程化项目实战>配套代码 (700+页)
@配套代码技术支持:bbs.aianaconda.com      (有问必答)
"""

# 使用动态图训练一个具有检查点的回归模型

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
import tensorflow.contrib.eager as tfe

tf.enable_eager_execution()
print("TensorFlow 版本: {}".format(tf.VERSION))
print("Eager execution: {}".format(tf.executing_eagerly()))

# (1)生成模拟数据
train_X = np.linspace(-1, 1, 100)
train_Y = 2 * train_X + np.random.randn(*train_X.shape) * 0.3  # y=2x,但是加入了噪声
# 图形显示
plt.plot(train_X, train_Y, 'ro', label='Original data')
plt.legend()
plt.show()

# 定义学习参数
# W = tfe.Variable(tf.random_normal([1]),dtype=tf.float32, name="weight")
# b = tfe.Variable(tf.zeros([1]),dtype=tf.float32, name="bias")
W = tf.Variable(tf.random_normal([1]), dtype=tf.float32, name="weight")
b = tf.Variable(tf.zeros([1]), dtype=tf.float32, name="bias")
global_step = tf.train.get_or_create_global_step()

learning_rate = 0.01
# 随机梯度下降法作为优化器
optimizer = tf.train.GradientDescentOptimizer(learning_rate=learning_rate)


# import numpy as np
# def print_even_callback(op_type, op_name, attrs, inputs, outputs):
#  # A callback that prints only the even output values.
#  print("___",op_type,"___", op_name,"___", attrs, "___",inputs,"___", outputs,"_ok_")
##  print(len(outputs),inputs.numpy())

def getcost(x, y):  # 定义函数,计算loss值
    # 前向结构
    z = tf.cast(tf.multiply(np.asarray(x, dtype=np.float32), W) + b, dtype=tf.float32)
    #    tfe.add_execution_callback(print_even_callback)
    cost = tf.reduce_mean(tf.square(y - z))  # loss值
    #    tfe.clear_execution_callbacks()
    return cost


def grad(inputs, targets):
    with tf.GradientTape() as tape:
        loss_value = getcost(inputs, targets)
    return tape.gradient(loss_value, [W, b])


# 定义saver,演示两种方法处理检查点文件
savedir = "logeager/"
savedirx = "logeagerx/"
saver = tf.train.Saver([W, b], max_to_keep=1)  # 生成saver。 max_to_keep=1,表明最多只保存一个检查点文件
saverx = tfe.Saver([W, b])  # 生成saver。 max_to_keep=1,表明最多只保存一个检查点文件

kpt = tf.train.latest_checkpoint(savedir)  # 找到检查点文件
kptx = tf.train.latest_checkpoint(savedirx)  # 找到检查点文件
if kpt != None:
    saver.restore(None, kpt)  # 两种加载方式都可以
    saverx.restore(kptx)

training_epochs = 20  # 迭代训练次数
display_step = 2

plotdata = {"batchsize": [], "loss": []}  # 收集训练参数

while global_step / len(train_X) < training_epochs:  # 迭代训练模型
    step = int(global_step / len(train_X))
    for (x, y) in zip(train_X, train_Y):
        grads = grad(x, y)
        optimizer.apply_gradients(zip(grads, [W, b]), global_step=global_step)

    # 显示训练中的详细信息
    if step % display_step == 0:
        cost = getcost(x, y)
        print("Epoch:", step + 1, "cost=", cost.numpy(), "W=", W.numpy(), "b=", b.numpy())
        if not (cost == "NA"):
            plotdata["batchsize"].append(global_step.numpy())
            plotdata["loss"].append(cost.numpy())
        saver.save(None, savedir + "linermodel.cpkt", global_step)
        saverx.save(savedirx + "linermodel.cpkt", global_step)

print(" Finished!")
saver.save(None, savedir + "linermodel.cpkt", global_step)
saverx.save(savedirx + "linermodel.cpkt", global_step)
print("cost=", getcost(train_X, train_Y).numpy(), "W=", W.numpy(), "b=", b.numpy())

# 显示模型
plt.plot(train_X, train_Y, 'ro', label='Original data')
plt.plot(train_X, W * train_X + b, label='Fitted line')
plt.legend()
plt.show()


def moving_average(a, w=10):  # 定义生成loss可视化的函数
    if len(a) < w:
        return a[:]
    return [val if idx < w else sum(a[(idx - w):idx]) / w for idx, val in enumerate(a)]


plotdata["avgloss"] = moving_average(plotdata["loss"])
plt.figure(1)
plt.subplot(211)
plt.plot(plotdata["batchsize"], plotdata["avgloss"], 'b--')
plt.xlabel('Minibatch number')
plt.ylabel('Loss')
plt.title('Minibatch run vs. Training loss')

plt.show()
本楼点评(0) 收起
您需要登录后才可以回帖 登录 | 加入社区

本版积分规则

快速回复 返回顶部 返回列表