tensorflow建立一个简单的神经网络的方法


Posted in Python onFebruary 10, 2018

本笔记目的是通过tensorflow实现一个两层的神经网络。目的是实现一个二次函数的拟合。

如何添加一层网络

代码如下:

def add_layer(inputs, in_size, out_size, activation_function=None):
  # add one more layer and return the output of this layer
  Weights = tf.Variable(tf.random_normal([in_size, out_size]))
  biases = tf.Variable(tf.zeros([1, out_size]) + 0.1)
  Wx_plus_b = tf.matmul(inputs, Weights) + biases
  if activation_function is None:
    outputs = Wx_plus_b
  else:
    outputs = activation_function(Wx_plus_b)
  return outputs

注意该函数中是xW+b,而不是Wx+b。所以要注意乘法的顺序。x应该定义为[类别数量, 数据数量], W定义为[数据类别,类别数量]。

创建一些数据

# Make up some real data
x_data = np.linspace(-1,1,300)[:, np.newaxis]
noise = np.random.normal(0, 0.05, x_data.shape)
y_data = np.square(x_data) - 0.5 + noise

numpy的linspace函数能够产生等差数列。start,stop决定等差数列的起止值。endpoint参数指定包不包括终点值。

numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)[source] 
Return evenly spaced numbers over a specified interval. 
Returns num evenly spaced samples, calculated over the interval [start, stop].

tensorflow建立一个简单的神经网络的方法

noise函数为添加噪声所用,这样二次函数的点不会与二次函数曲线完全重合。

numpy的newaxis可以新增一个维度而不需要重新创建相应的shape在赋值,非常方便,如上面的例子中就将x_data从一维变成了二维。

添加占位符,用作输入

# define placeholder for inputs to network
xs = tf.placeholder(tf.float32, [None, 1])
ys = tf.placeholder(tf.float32, [None, 1])

添加隐藏层和输出层

# add hidden layer
l1 = add_layer(xs, 1, 10, activation_function=tf.nn.relu)
# add output layer
prediction = add_layer(l1, 10, 1, activation_function=None)

计算误差,并用梯度下降使得误差最小

# the error between prediciton and real data
loss = tf.reduce_mean(tf.reduce_sum(tf.square(ys - prediction),reduction_indices=[1]))
train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss)

完整代码如下:

from __future__ import print_function
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt

def add_layer(inputs, in_size, out_size, activation_function=None):
  # add one more layer and return the output of this layer
  Weights = tf.Variable(tf.random_normal([in_size, out_size]))
  biases = tf.Variable(tf.zeros([1, out_size]) + 0.1)
  Wx_plus_b = tf.matmul(inputs, Weights) + biases
  if activation_function is None:
    outputs = Wx_plus_b
  else:
    outputs = activation_function(Wx_plus_b)
  return outputs

# Make up some real data
x_data = np.linspace(-1,1,300)[:, np.newaxis]
noise = np.random.normal(0, 0.05, x_data.shape)
y_data = np.square(x_data) - 0.5 + noise

# define placeholder for inputs to network
xs = tf.placeholder(tf.float32, [None, 1])
ys = tf.placeholder(tf.float32, [None, 1])
# add hidden layer
l1 = add_layer(xs, 1, 10, activation_function=tf.nn.relu)
# add output layer
prediction = add_layer(l1, 10, 1, activation_function=None)

# the error between prediciton and real data
loss = tf.reduce_mean(tf.reduce_sum(tf.square(ys - prediction),
           reduction_indices=[1]))
train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss)

# important step
init = tf.initialize_all_variables()
sess = tf.Session()
sess.run(init)

# plot the real data
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
ax.scatter(x_data, y_data)
plt.ion()
plt.show()

for i in range(1000):
  # training
  sess.run(train_step, feed_dict={xs: x_data, ys: y_data})
  if i % 50 == 0:
    # to visualize the result and improvement
    try:
      ax.lines.remove(lines[0])
    except Exception:
      pass
    prediction_value = sess.run(prediction, feed_dict={xs: x_data})
    # plot the prediction
    lines = ax.plot(x_data, prediction_value, 'r-', lw=5)
    plt.pause(0.1)

运行结果:

tensorflow建立一个简单的神经网络的方法

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python深入学习之上下文管理器
Aug 31 Python
python函数中return后的语句一定不会执行吗?
Jul 06 Python
Python3.x对JSON的一些操作示例
Sep 01 Python
python求加权平均值的实例(附纯python写法)
Aug 22 Python
Python Pickle 实现在同一个文件中序列化多个对象
Dec 30 Python
Python面向对象之私有属性和私有方法应用案例分析
Dec 31 Python
PyTorch加载自己的数据集实例详解
Mar 18 Python
Python3.9 beta2版本发布了,看看这7个新的PEP都是什么
Jun 10 Python
python基于exchange函数发送邮件过程详解
Nov 06 Python
Python使用tkinter制作在线翻译软件
Feb 22 Python
Python使用tkinter实现小时钟效果
Feb 22 Python
python析构函数用法及注意事项
Jun 22 Python
python取代netcat过程分析
Feb 10 #Python
浅谈Python黑帽子取代netcat
Feb 10 #Python
python3爬取淘宝信息代码分析
Feb 10 #Python
Python中property属性实例解析
Feb 10 #Python
Java编程迭代地删除文件夹及其下的所有文件实例
Feb 10 #Python
Python中协程用法代码详解
Feb 10 #Python
Python实现简单生成验证码功能【基于random模块】
Feb 10 #Python
You might like
用Php实现链结人气统计
2006/10/09 PHP
Laravel中如何增加自定义全局函数详解
2017/05/09 PHP
PHP mysqli事务操作常用方法分析
2017/07/22 PHP
提高Laravel应用性能方法详解
2019/06/24 PHP
自己的js工具_Form 封装
2009/08/21 Javascript
写了10年的Javascript也未必全了解的连续赋值运算
2011/03/25 Javascript
JQuery扩展插件Validate—4设置错误提示的样式
2011/09/05 Javascript
超简单JS二级、多级联动的简单实例
2014/02/18 Javascript
jQuery Validate验证框架经典大全
2015/09/23 Javascript
Bootstrap每天必学之js插件
2015/11/30 Javascript
js下将金额数字每三位一逗号分隔
2016/02/19 Javascript
AngularJS 获取ng-repeat动态生成的ng-model值实例详解
2016/11/29 Javascript
AngularJS实践之使用ng-repeat中$index的注意点
2016/12/22 Javascript
.net MVC+Bootstrap下使用localResizeIMG上传图片
2017/04/21 Javascript
浅谈vue中数据双向绑定的实现原理
2017/09/14 Javascript
一个基于react的图片裁剪组件示例
2018/04/18 Javascript
微信小程序-API接口安全详解
2019/07/16 Javascript
Layer UI表格列日期格式化及取消自动填充日期的实现方法
2020/05/10 Javascript
[02:51]2018年度DOTA2最佳中单位选手-完美盛典
2018/12/17 DOTA
python使用ctypes模块调用windowsapi获取系统版本示例
2014/04/17 Python
Django Highcharts制作图表
2016/08/27 Python
Python排序算法实例代码
2017/08/10 Python
简单实现python进度条脚本
2017/12/18 Python
python多进程使用及线程池的使用方法代码详解
2018/10/24 Python
python实现函数极小值
2019/07/10 Python
用Python调用win命令行提高工作效率的实例
2019/08/14 Python
Pycharm使用远程linux服务器conda/python环境在本地运行的方法(图解))
2019/12/09 Python
基于FME使用Python过程图解
2020/05/13 Python
香港时装购物网站:ZALORA香港
2017/04/23 全球购物
澳洲网红粉泥面膜:Sand & Sky
2019/08/13 全球购物
法国低价在线宠物商店:bitiba.fr
2020/07/03 全球购物
小学教师师德反思
2014/02/03 职场文书
学校班班通实施方案
2014/06/11 职场文书
党建目标管理责任书
2014/07/25 职场文书
Java 数组内置函数toArray详解
2021/06/28 Java/Android
mongodb清除连接和日志的正确方法分享
2021/09/15 MongoDB