学习参考周莫烦的视频。

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:

 # -*- coding: utf-8 -*-
"""
Created on Tue Jun 13 15:41:23 2017 @author: Jarvis
"""
import tensorflow as tf
import numpy as np x_data = np.random.rand(100).astype(np.float32)
y_data = x_data*0.1+0.3
print (x_data.shape)
xs = tf.placeholder(tf.float32)
ys = tf.placeholder(tf.float32)
W = tf.Variable(1.0)
#W = tf.Variable(tf.random_uniform([1],-1.0,1))
b = tf.Variable(tf.zeros([1]))
y_pre = W*xs+b loss = tf.reduce_mean((tf.square(ys-y_pre))) train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss) init = tf.initialize_all_variables()
sess = tf.Session()
sess.run(init)
for i in range(1000):
sess.run(train_step,feed_dict={xs:x_data,ys:y_data})
if i%50 == 0:
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))

TFboy养成记 简单小程序(Variable & placeholder)的更多相关文章

  1. 基于C语言libvirt API简单小程序

    libvirt API简单小程序 1.程序代码如下 #include<stdio.h> #include<libvirt/libvirt.h> int getDomainInf ...

  2. 微信小程序中placeholder的样式

    通常,现代浏览器大多支持::placeholder选择器,用于设置placeholder的样式,但是在微信小程序中并不支持这种方式,而是提供了一个专门的属性(placeholder-class)来处理 ...

  3. 关于Hibernate的一个简单小程序

    本人根据视频学习了一下三大框架中比较简单的一个Hibernate,并简单完成了一个运用Hibernate的小程序 Hibernate是一个简化web程序Dao层的一个框架,应用他,可以完全脱离sql语 ...

  4. 小程序红包开发跳坑记 微信小程序红包接口开发过程中遇到的问题 微信小程序红包开发

    现在做小程序的越来越多,商家推广也是一个瓶颈,谁不发点红包,都很难找到人来用你的微信小程序了.于是不管你开发什么小程序功能,你或多或少都要用到小程序来发红包吧.  我们自己之前做公众号发红包,做了两三 ...

  5. TFboy养成记 CNN

    1/先解释下CNN的过程: 首先对一张图片进行卷积,可以有多个卷积核,卷积过后,对每一卷积核对应一个chanel,也就是一张新的图片,图片尺寸可能会变小也可能会不变,然后对这个chanel进行一些po ...

  6. TFboy养成记 MNIST Classification (主要是如何计算accuracy)

    参考:莫烦. 主要是运用的MLP.另外这里用到的是批训练: 这个代码很简单,跟上次的基本没有什么区别. 这里的lossfunction用到的是是交叉熵cross_entropy.可能网上很多形式跟这里 ...

  7. TFboy养成记 多层感知器 MLP

    内容总结与莫烦的视频. 这里多层感知器代码写的是一个简单的三层神经网络,输入层,隐藏层,输出层.代码的目的是你和一个二次曲线.同时,为了保证数据的自然,添加了mean为0,steddv为0.05的噪声 ...

  8. TFboy养成记 tensorboard

    首先介绍几个用法: with tf.name_scope(name = "inputs"): 这个是用于区分区域的.如,train,inputs等. xs = tf.placeho ...

  9. python简单小程序

    #足球队寻找10 到12岁的小女孩(包含10岁和12岁),编写程序询问用户性别和年龄,然后显示一条消息指出这个人是否可以加入球队,询问10次,输出满足条件的总人数#询问10次,输出满足要求的总人数 o ...

随机推荐

  1. vue-cli如何引入bootstrap工具

    以下操作以正常安装node环境为前提. 1.引入jq: 在npm控制台中,进入项目目录,然后输入指令npm install jquery --save-dev(npm换成cnpm更好,国内环境下使用c ...

  2. mybatis的搭建和注入spring的方式

    mybatis实际上是一个更多关注sql语句的框架,他的出现是想让开发者更简单的去操作数据库. 与hibernate相比较,hibernate更多的是去sql化,虽然hibernate也可以本地sql ...

  3. C# 格式化字符串

    C#字符串使用{}来格式化 {引索,宽度:格式} 格式后面加数字保留位数 格式 C人民币 {0,10:C10} <script type="text/javascript"& ...

  4. LDAP服务部署

    1.安装基本环境 # yum -y install openldap openldap-devel openldap-servers openldap-clients 2.配置LDAP服务端 (1)拷 ...

  5. java中集合类HashSet、ArrayList、LinkedList总结

    [HashSet] 1. HashSet存储不能够存储相同的元素,元素是否相同的判断:重写元素的equals方法.equals方法和hashCode方法必须兼容,如:equals方法判断的是用户的名字 ...

  6. idea 创建多模块依赖Maven项目

    本来网上的教程还算多,但是本着自己有的才是自己的原则,还是自己写一份的好,虽然可能自己也不会真的用得着. 1. 创建一个新maven项目 2. 3. 输入groupid和artifactid,后面步骤 ...

  7. Spring MVC前后端的数据传输

    本篇文章主要介绍了Spring MVC中如何在前后端传输数据. 后端 ➡ 前端 在Spring MVC中这主要通过Model将数据从后端传送到前端,一般的写法为: @RequestMapping(va ...

  8. Linux学习(十五)LVM

    一.前言 LVM,逻辑卷管理工具,它的作用是提供一种灵活的磁盘管理办法.通常我们的某个分区用完了,想要扩容,很麻烦.但是用lvm就可以很方便的扩容,收缩. 看它的原理图: 它的原理大致是:首先将磁盘做 ...

  9. robotframework2.8.7日志输出List乱码

    今天在完善robotframework的数据分离的时候,需要读取list中的中文信息,在日志输出中,英文显示是正常的:但是中文就出现所谓的乱码情况,如截图所示 对于list中的信息,日志显示乱码:查找 ...

  10. 前端基于react,后端基于.net core2.0的开发之路(1) 介绍

    文章提纲目录 1.前端基于react,后端基于.net core2.0的开发之路(1) 介绍 2.前端基于react,后端基于.net core2.0的开发之路(2) 开发环境的配置,注意事项,后端数 ...