TensorFlow 入门之第一个神经网络和训练 MNIST

原创 2017年08月15日 23:25:57

1. 构建神经网络

构建一个神经网络,用于学习神经网络的结构。
本文构建的神经网络是典型的三层神经网络,输入层、隐藏层、输出层。输入层有一个输入参数也就是有一个神经元,隐藏层定义了10个神经元,输出层有一个输出,所以也就是有一个神经元。

add_layer 函数是添加一个神经层的函数。

# -*- coding: utf-8 -*-
# 定义一个神经层,主要用于学习 建立神经网络的结构,怎么运行,怎么优化
import tensorflow as tf

import numpy as np

# 添加神经层的函数def add_layer(),它有四个参数:输入值、输入的大小、输出的大小和激励函数,我们设定默认的激励函数是None。也就是线性函数
def add_layer(inputs, in_size, out_size, activation_function=None):
    # 定义权重,尽量是一个随机变量
    # 因为在生成初始参数时,随机变量(normal distribution) 会比全部为0要好很多,所以我们这里的weights 是一个 in_size行, out_size列的随机变量矩阵。   
    Weights = tf.Variable(tf.random_normal([in_size, out_size]))
    # 在机器学习中,biases的推荐值不为0,所以我们这里是在0向量的基础上又加了0.1。
    biases = tf.Variable(tf.zeros([1, out_size]) + 0.1)
    # 定义Wx_plus_b, 即神经网络未激活的值(预测的值)。其中,tf.matmul()是矩阵的乘法。
    Wx_plus_b = tf.matmul(inputs, Weights) + biases
    # activation_function ——激励函数(激励函数是非线性方程)为None时(线性关系),输出就是当前的预测值——Wx_plus_b,
    # 不为None时,就把Wx_plus_b传到activation_function()函数中得到输出。
    if activation_function is None:
        outputs = Wx_plus_b
    else:
        # 返回输出
        outputs = activation_function(Wx_plus_b)
    return outputs

    # 添加一个神经层的函数——def add_layer()就定义好了。


# 数据准备
# -1到1这个区间,有300个单位,[:,np.newaxis] 加纬度,x_data 一个特性有300个例子
x_data = np.linspace(-1,1,300,dtype=np.float32)[:,np.newaxis] 

# 噪点,使点分布在 线性方程的线的两边,使数据看起来更加真实 ,他的幂是0 方差是0.05,格式 是x_data 一样的格式
noise = np.random.normal(0, 0.05, x_data.shape).astype(np.float32)

# np.square(x_data) x_data 的二次方
y_data = np.square(x_data) - 0.5 + noise

# 典型神经网络,三层神经
# 输入层 输入多少个data  输入层就有多少个神经元
# 输入属性和输出属性都是 1 ,None 指给出多少个例子都可以
xs = tf.placeholder(tf.float32, [None, 1])
ys = tf.placeholder(tf.float32, [None, 1])

# 隐藏层 假设十个神经元
# 输入 x_data ,x_data的size=1  ,out_size=10
l1 = add_layer(xs, 1, 10, activation_function=tf.nn.relu)

# 输出层 有一个输出 所以一个神经元
# 从隐藏层拿到数据 放入add_layer 执行。 数据是 l1 size =10 (因为 隐藏层的out_size=10) ,out_size=1 激励函数为空
prediction = add_layer(l1, 10, 1, activation_function=None)

#predition和真实值的偏差  将10个例子的每个例子的结果都减去predition取平方,然后再求和,然后取平均
loss = tf.reduce_mean(tf.reduce_sum(tf.square(ys - prediction),
                     reduction_indices=[1]))
# 优化器 如何让机器学习提升它的准确率。 tf.train.GradientDescentOptimizer()中的值(学习的效率)通常都小于1,这里取的是0.1,代表以0.1的效率来最小化(minimize 减小)误差loss。
# 每一个练习的步骤都通过这个优化器 以学习进度0.1的效率 对误差进行更正和提升,下一次就有更好的结果。
train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss)


# 初始化变量
init= tf.global_variables_initializer()

# 定义session
sess = tf.Session()
# 执行init
sess.run(init)

# 训练1000步
for i in range(1000):
    sess.run(train_step, feed_dict={xs: x_data, ys: y_data})
    if i%50 == 0:
        print(sess.run(loss,feed_dict={xs: x_data, ys: y_data} ))

2. TensorFlow 入门之训练 MNIST

TensorFlow 入门 mnist手写数字识别目录参考:
这里写图片描述
MNIST_data数据下载地址: http://download.csdn.net/download/u012373815/9935430
代码编写参考博客:http://blog.csdn.net/willduan1/article/details/52024254

源码地址:https://github.com/527515025/pythonLean

版权声明:本文为博主编写文章,未经博主允许转载,转载请注明出处。

相关文章推荐

Tensorflow之创建我的第一个神经网络

用Tensorflow创建一个神经网络拟合y=0.1*x+0.3 IDE环境 spyder3 Tensorflow 是非常重视结构的,我们得建立好了神经网络的结构,才能将数字放进去运行这个结构 ...

tensorflow学习笔记四:mnist实例--用简单的神经网络来训练和测试(MNIST For ML Beginners)

刚开始学习tf时,我们从简单的地方开始。卷积神经网络(CNN)是由简单的神经网络(NN)发展而来的,因此,我们的第一个例子,就从神经网络开始。 神经网络没有卷积功能,只有简单的三层:输入层,隐藏层和...

sentinel搭建redis集群的注意事项

一、protected-mode 默认情况下,redis node和sentinel的protected-mode都是yes,在搭建集群时,若想从远程连接redis集群,需要将redis node和...
  • tianyaZ
  • tianyaZ
  • 2016年06月12日 16:32
  • 2650

C++编译报错: undefined reference to clock_gettime

在编译C++代码时有时候会出现报错 undefined reference to `clock_gettime'

Tensorflow自我训练进阶(代码+注解)【2】第一个神经网络--简单感知器处理MNIST

继续我们的tf~~~

TensorFlow训练mnist数据集(卷积神经网络lenet5)

TensorFlow使用经典卷积神经网络实现对手写数字mnist的训练和测试 两个卷积,两个池化,两个全连接层。 代码如下:(在上一篇的基础上更改网络lenet5) 代码分为3部分,网络-训练和...

tensorflow的基本用法(七)——使用MNIST训练神经网络

tensorflow的基本用法(七)——使用MNIST训练神经网络

tensorflow学习笔记四:mnist实例--用简单的神经网络来训练和测试

刚开始学习tf时,我们从简单的地方开始。卷积神经网络(CNN)是由简单的神经网络(NN)发展而来的,因此,我们的第一个例子,就从神经网络开始。 神经网络没有卷积功能,只有简单的三层:输入层,隐藏...

tensorflow学习笔记四:mnist实例--用简单的神经网络来训练和测试

转载自  http://www.cnblogs.com/denny402/p/5852983.html 刚开始学习tf时,我们从简单的地方开始。卷积神经网络(CNN)是由简单的神经网...

tensorflow的基本用法(九)——定义卷积神经网络训练MNIST

tensorflow的基本用法(九)——定义卷积神经网络训练MNIST
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:TensorFlow 入门之第一个神经网络和训练 MNIST
举报原因:
原因补充:

(最多只允许输入30个字)