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))
  • 相关阅读:
    Asp.NET 4.0 ajax实例DataView 模板编程1
    ASP.NET 4.0 Ajax 实例DataView模板编程 DEMO 下载
    部分东北话、北京话
    .NET 培训课程解析(一)
    ASP.NET 4.0 Ajax 实例DataView模板编程2
    ASP.NET Web Game 架构设计1服务器基本结构
    ASP.NET Web Game 构架设计2数据库设计
    TFS2008 基本安装
    Linux上Oracle 11g安装步骤图解
    plsql developer远程连接oracle数据库
  • 原文地址:https://www.cnblogs.com/silence-tommy/p/7029561.html
Copyright © 2011-2022 走看看