zoukankan      html  css  js  c++  java
  • TFboy养成记 简单小程序(Variable & placeholder)

     学习参考周莫烦的视频。

    Variable:主要是用于训练变量之类的。比如我们经常使用的网络权重,偏置。

    值得注意的是Variable在声明是必须赋予初始值。在训练过程中该值很可能会进行不断的加减操作变化。

    placeholder:也是用于存储数据,但是主要用于feed_dict的配合,接收输入数据用于训练模型等。placeholder值在训练过程中会不断地被赋予新的值,用于批训练,基本上其值是不会轻易进行加减操作。

    placeholder在命名时是不会需要赋予值得,其被赋予值得时间实在feed_dict时。

    Variable使用:

    这是一个简单的加法训练。需要注意的是tensorflow 中很多操作都可以看做是一个节点。比如这里的assign操作,需要专门做一个update操作节点。

    import tensorflow as tf
    import numpy as np
    
    #Variable 在声明是必须要给定一个 初始值的。同时也要规定他的shape,这里是一个常数,所以就不许要在给定一个shape了。
    one = tf.Variable(tf.constant(1))
    get = tf.Variable(0)
    state = tf.add(one,get)
    update = tf.assign(get,state)
    
    init = tf.global_variables_initializer()
    sess = tf.Session()
    sess.run(init)
    for i in range(10):
        sess.run(update)
        print(sess.run(get))

    placeholder使用:

    placeholder是作为一个容器,在声明时,并不需要给定一个初始值,与c++等语言不同,你可以把它看做成在运行时他并不执行,只有在feed_dict出现训练时,在给予值(个人看法,不一定对)。

    不过placeholder 在命名时时需要指定类型的。如:

    xs = tf.placeholder(tf.float32,[None,1],name = "x_input")

    这里的xs不仅指定了类型,也定义的shape。如果不定义shape,只要是后续代码中一致,那么可以是任意形式的。

    这里给出两个版本的代码,一个用了placeholder去拟合一个曲线,另一个没有使用

    placeholder:

     1 # -*- coding: utf-8 -*-
     2 """
     3 Created on Tue Jun 13 15:41:23 2017
     4 
     5 @author: Jarvis
     6 """
     7 import tensorflow as tf
     8 import numpy as np
     9 
    10 x_data = np.random.rand(100).astype(np.float32)
    11 y_data = x_data*0.1+0.3
    12 print (x_data.shape)
    13 xs = tf.placeholder(tf.float32)
    14 ys = tf.placeholder(tf.float32)
    15 W = tf.Variable(1.0)
    16 #W = tf.Variable(tf.random_uniform([1],-1.0,1))
    17 b = tf.Variable(tf.zeros([1]))
    18 y_pre = W*xs+b
    19 
    20 loss = tf.reduce_mean((tf.square(ys-y_pre)))
    21 
    22 train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss)
    23 
    24 init = tf.initialize_all_variables()
    25 sess = tf.Session()
    26 sess.run(init)
    27 for i in range(1000):
    28     sess.run(train_step,feed_dict={xs:x_data,ys:y_data})
    29     if i%50 == 0:
    30         print (sess.run(W),sess.run(b))

    没有用,直接使用原始数据:

    import tensorflow as tf
    import numpy as np
    
    x_data = np.random.rand(100).astype(np.float)
    y_data = x_data*0.3+0.1
    
    W = tf.Variable(tf.zeros([1]))#这里可能大家会有疑问,W的shape到底是多少?这个Wshape和之前 那个版本的w.shape到底有什么区别呢?详见shape的内容。
    b = tf.Variable(tf.zeros([1]))
    
    y_pre = W*x_data+b
    loss = tf.reduce_mean(tf.square(y_data-y_pre))
    train_step = tf.train.GradientDescentOptimizer(0.5).minimize(loss)
    init = tf.global_variables_initializer()
    sess = tf.Session()
    sess.run(init)
    for i in range(1000):
        sess.run(train_step)
        print(sess.run(W),sess.run(b))
  • 相关阅读:
    Node中js获取异步操作的结果
    阿里云服务器(一)——Nodejs环境配置
    Nodejs之路(二)—— Nodejs再入门
    通过IDEA制作包含Java应程序的Docker镜像
    IDEA远程调试Tomcat程序
    思维导图_脑图
    gitlab userguide
    如何渲染MARKDOWN与MATHJAX
    markdown emoji表情包
    changing-a-remote-s-url
  • 原文地址:https://www.cnblogs.com/silence-tommy/p/7029561.html
Copyright © 2011-2022 走看看