如何定义TensorFlow输入节点

所属分类: 脚本专栏 / python 阅读数: 774
收藏 0 赞 0 分享

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 运行结果

三 直接定义

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输入节点就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

更多精彩内容其他人还在看

Python实现按学生年龄排序的实际问题详解

这篇文章主要给大家介绍了关于Python实现按学生年龄排序实际问题的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面跟着小编来一起学习学习吧。
收藏 0 赞 0 分享

Python开发的HTTP库requests详解

Requests是用Python语言编写,基于urllib,采用Apache2 Licensed开源协议的HTTP库。它比urllib更加方便,可以节约我们大量的工作,完全满足HTTP测试需求。Requests的哲学是以PEP 20 的习语为中心开发的,所以它比urllib更加P
收藏 0 赞 0 分享

Python网络爬虫与信息提取(实例讲解)

下面小编就为大家带来一篇Python网络爬虫与信息提取(实例讲解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

在python3环境下的Django中使用MySQL数据库的实例

下面小编就为大家带来一篇在python3环境下的Django中使用MySQL数据库的实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

Python 3.x读写csv文件中数字的方法示例

在我们日常开发中经常需要对csv文件进行读写,下面这篇文章主要给大家介绍了关于Python 3.x读写csv文件中数字的相关资料,文中通过示例代码介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面跟着小编来一起学习学习吧。
收藏 0 赞 0 分享

Python实现解析Bit Torrent种子文件内容的方法

这篇文章主要介绍了Python实现解析Bit Torrent种子文件内容的方法,结合实例形式分析了Python针对Torrent文件的读取与解析相关操作技巧与注意事项,需要的朋友可以参考下
收藏 0 赞 0 分享

Python实现文件内容批量追加的方法示例

这篇文章主要介绍了Python实现文件内容批量追加的方法,结合实例形式分析了Python文件的读写相关操作技巧,需要的朋友可以参考下
收藏 0 赞 0 分享

Python简单实现自动删除目录下空文件夹的方法

这篇文章主要介绍了Python简单实现自动删除目录下空文件夹的方法,涉及Python针对文件与目录的读取、判断、删除等相关操作技巧,需要的朋友可以参考下
收藏 0 赞 0 分享

简单学习Python多进程Multiprocessing

这篇文章主要和大家一起简单的学习Python多进程Multiprocessing ,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Python导入模块时遇到的错误分析

这篇文章主要给大家详细解释了在Python处理导入模块的时候出现错误以及具体的情况分析,非常的详尽,有需要的小伙伴可以参考下
收藏 0 赞 0 分享
查看更多