如何定义TensorFlow输入节点


Posted in Python onJanuary 23, 2020

TensorFlow中有如下几种定义输入节点的方法。

通过占位符定义:一般使用这种方式。

通过字典类型定义:一般用于输入比较多的情况。

直接定义:一般很少使用。

一 占位符定义

示例:

具体使用tf.placeholder函数,代码如下:

X = tf.placeholder("float")
Y = tf.placeholder("float")

二 字典类型定义

1 实例

通过字典类型定义输入节点

2 关键代码

# 创建模型
# 占位符
inputdict = {
  'x': tf.placeholder("float"),
  'y': tf.placeholder("float")
}

3 解释

通过字典定义的方式和第一种比较像,只不过是堆叠到一起。

4 全部代码

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
plotdata = { "batchsize":[], "loss":[] }
def moving_average(a, w=10):
  if len(a) < w:
    return a[:]  
  return [val if idx < w else sum(a[(idx-w):idx])/w for idx, val in enumerate(a)]
#生成模拟数据
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()
# 创建模型
# 占位符
inputdict = {
  'x': tf.placeholder("float"),
  'y': tf.placeholder("float")
}
# 模型参数
W = tf.Variable(tf.random_normal([1]), name="weight")
b = tf.Variable(tf.zeros([1]), name="bias")
# 前向结构
z = tf.multiply(inputdict['x'], W)+ b
#反向优化
cost =tf.reduce_mean( tf.square(inputdict['y'] - z))
learning_rate = 0.01
optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost) #Gradient descent
# 初始化变量
init = tf.global_variables_initializer()
#参数设置
training_epochs = 20
display_step = 2
# 启动session
with tf.Session() as sess:
  sess.run(init)
  # Fit all training data
  for epoch in range(training_epochs):
    for (x, y) in zip(train_X, train_Y):
      sess.run(optimizer, feed_dict={inputdict['x']: x, inputdict['y']: y})
    #显示训练中的详细信息
    if epoch % display_step == 0:
      loss = sess.run(cost, feed_dict={inputdict['x']: train_X, inputdict['y']:train_Y})
      print ("Epoch:", epoch+1, "cost=", loss,"W=", sess.run(W), "b=", sess.run(b))
      if not (loss == "NA" ):
        plotdata["batchsize"].append(epoch)
        plotdata["loss"].append(loss)
  print (" Finished!")
  print ("cost=", sess.run(cost, feed_dict={inputdict['x']: train_X, inputdict['y']: train_Y}), "W=", sess.run(W), "b=", sess.run(b))
  #图形显示
  plt.plot(train_X, train_Y, 'ro', label='Original data')
  plt.plot(train_X, sess.run(W) * train_X + sess.run(b), label='Fitted line')
  plt.legend()
  plt.show()
  
  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()
  print ("x=0.2,z=", sess.run(z, feed_dict={inputdict['x']: 0.2}))

5 运行结果

如何定义TensorFlow输入节点

三 直接定义

1 实例

直接定义输入结果

2 解释

直接定义:将定义好的Python变量直接放到OP节点中参与输入的运算,将模拟数据的变量直接放到模型中训练。

3 代码

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
#生成模拟数据
train_X =np.float32( 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 = tf.Variable(tf.random_normal([1]), name="weight")
b = tf.Variable(tf.zeros([1]), name="bias")
# 前向结构
z = tf.multiply(W, train_X)+ b
#反向优化
cost =tf.reduce_mean( tf.square(train_Y - z))
learning_rate = 0.01
optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost) #Gradient descent
# 初始化变量
init = tf.global_variables_initializer()
#参数设置
training_epochs = 20
display_step = 2
# 启动session
with tf.Session() as sess:
  sess.run(init)
  # Fit all training data
  for epoch in range(training_epochs):
    for (x, y) in zip(train_X, train_Y):
      sess.run(optimizer)
    #显示训练中的详细信息
    if epoch % display_step == 0:
      loss = sess.run(cost)
      print ("Epoch:", epoch+1, "cost=", loss,"W=", sess.run(W), "b=", sess.run(b))
  print (" Finished!")
  print ("cost=", sess.run(cost), "W=", sess.run(W), "b=", sess.run(b))

4 运行结果

如何定义TensorFlow输入节点

以上这篇如何定义TensorFlow输入节点就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python实现Tab自动补全和历史命令管理的方法
Mar 12 Python
详解Python当中的字符串和编码
Apr 25 Python
不可错过的十本Python好书
Jul 06 Python
python二维列表一维列表的互相转换实例
Jul 02 Python
python实现从文件中读取数据并绘制成 x y 轴图形的方法
Oct 14 Python
python引入不同文件夹下的自定义模块方法
Oct 27 Python
浅谈Python的list中的选取范围
Nov 12 Python
CentOS下Python3的安装及创建虚拟环境的方法
Nov 28 Python
python+pyqt5实现图片批量缩放工具
Mar 18 Python
python ChainMap的使用和说明详解
Jun 11 Python
pyautogui自动化控制鼠标和键盘操作的步骤
Apr 01 Python
python3 字符串str和bytes相互转换
Mar 23 Python
django 文件上传功能的相关实例代码(简单易懂)
Jan 22 #Python
python动态文本进度条的实例代码
Jan 22 #Python
python wav模块获取采样率 采样点声道量化位数(实例代码)
Jan 22 #Python
使用Python实现Wake On Lan远程开机功能
Jan 22 #Python
python定义类self用法实例解析
Jan 22 #Python
通过实例解析python描述符原理作用
Jan 22 #Python
python基于property()函数定义属性
Jan 22 #Python
You might like
php 创建以UNIX时间戳命名的文件夹(示例代码)
2014/03/08 PHP
浅析php工厂模式
2014/11/25 PHP
php通过array_unshift函数添加多个变量到数组前端的方法
2015/03/18 PHP
Zend Framework教程之响应对象的封装Zend_Controller_Response实例详解
2016/03/07 PHP
mac下多个php版本快速切换的方法
2016/10/09 PHP
Laravel5中防止XSS跨站攻击的方法
2016/10/10 PHP
javascript radio 联动效果
2009/03/04 Javascript
jQuery方法简洁实现隔行换色及toggleClass的使用
2013/03/15 Javascript
javascript中的parseInt和parseFloat区别
2013/07/12 Javascript
Node.js开源应用框架HapiJS介绍
2015/01/14 Javascript
基于JS实现密码框(password)中显示文字提示功能代码
2016/05/27 Javascript
JavaScript 字符串常用操作小结(非常实用)
2016/11/30 Javascript
jQuery实现表格元素动态创建功能
2017/01/09 Javascript
HTML5 js实现拖拉上传文件功能
2020/11/20 Javascript
fullPage.js和CSS3实现全屏滚动效果
2017/05/05 Javascript
使用 Vue.js 仿百度搜索框的实例代码
2017/05/09 Javascript
vuex 中插件的编写案例解析
2019/06/10 Javascript
关于vue路由缓存清除在main.js中的设置
2019/11/06 Javascript
js实现验证码功能
2020/07/24 Javascript
Python中使用partial改变方法默认参数实例
2015/04/28 Python
python3库numpy数组属性的查看方法
2018/04/17 Python
Python实现判断一行代码是否为注释的方法
2018/05/23 Python
python取余运算符知识点详解
2019/06/27 Python
python动态文本进度条的实例代码
2020/01/22 Python
将python字符串转化成长表达式的函数eval实例
2020/05/11 Python
Python操作PostgreSql数据库的方法(基本的增删改查)
2020/12/29 Python
销售会计工作职责
2013/12/02 职场文书
酒吧创业计划书
2014/01/18 职场文书
新书吧创业计划书
2014/01/31 职场文书
《蓝色的树叶》教学反思
2014/02/24 职场文书
《蝙蝠和雷达》教学反思
2014/04/23 职场文书
2015年监理工作总结范文
2015/04/07 职场文书
市直属机关2016年主题党日活动总结
2016/04/05 职场文书
接收函
2019/04/22 职场文书
Java方法重载和方法重写的区别到底在哪?
2021/06/11 Java/Android
利用 JavaScript 构建命令行应用
2021/11/17 Javascript