文档章节

小白学Tensorflow之多层神经网络

AllenOR灵感
 AllenOR灵感
发布于 2017/09/10 01:23
字数 673
阅读 5
收藏 0

在本博客中,我们将利用Tensorflow来构建一个多层神经网络。因为本博客是为了学习目的,所以我们就来构建一个四层神经网络,即一个输入层,两个隐藏层,一个输出层。第一,我们需要定义层与层之间的转移矩阵

# 定义输入层到第一个隐藏层之间的连接矩阵
w_layer_1 = init_weights([784, 625])

# 定义第一个隐藏层到第二个隐藏层之间的连接矩阵
w_layer_2 = init_weights([625, 625])

# 定义第二个隐藏层到输出层之间的连接矩阵
w_layer_3 = init_weights([625, 10])

第二,构建模型。在此模型中,我们加入了dropout参数,该参数是为了防止过拟合。也就是说,如果在某一层中使用了dropout参数,那么该层只有一部分神经元放电。比如,dropout = 0.8,那么只有80%的神经元是出于放电状态的,其他都是关闭状态。

def model(X, w_layer_1, w_layer_2, w_layer_3, p_keep_input, p_keep_hidden): 
  X = tf.nn.dropout(X, p_keep_input) 
  hidden_1 = tf.nn.relu(tf.matmul(X, w_layer_1)) 
  hidden_1 = tf.nn.dropout(hidden_1, p_keep_hidden) 
  hidden_2 = tf.nn.relu(tf.matmul(hidden_1, w_layer_2)) 
  hidden_2 = tf.nn.dropout(hidden_2, p_keep_hidden) 
  return tf.matmul(hidden_2, w_layer_3)

完整代码,如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import numpy as np
import tensorflow as tf 
import input_data

def init_weights(shape):
    return tf.Variable(tf.random_normal(shape, stddev = 0.01))

def model(X, w_layer_1, w_layer_2, w_layer_3, p_keep_input, p_keep_hidden):
    X = tf.nn.dropout(X, p_keep_input)
    hidden_1 = tf.nn.relu(tf.matmul(X, w_layer_1))

    hidden_1 = tf.nn.dropout(hidden_1, p_keep_hidden)
    hidden_2 = tf.nn.relu(tf.matmul(hidden_1, w_layer_2))

    hidden_2 = tf.nn.dropout(hidden_2, p_keep_hidden)

    return tf.matmul(hidden_2, w_layer_3)

# 导入数据
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)
trX, trY, teX, teY = mnist.train.images, mnist.train.labels, mnist.test.images, mnist.test.labels

X = tf.placeholder("float", [None, 784])
Y = tf.placeholder("float", [None, 10])

# 在该模型中我们一共有4层,一个输入层,两个隐藏层,一个输出层
# 定义输入层到第一个隐藏层之间的连接矩阵
w_layer_1 = init_weights([784, 625])

# 定义第一个隐藏层到第二个隐藏层之间的连接矩阵
w_layer_2 = init_weights([625, 625])

# 定义第二个隐藏层到输出层之间的连接矩阵
w_layer_3 = init_weights([625, 10])

# dropout 系数
# 定义有多少有效的神经元将作为输入神经元,比如 p_keep_intput = 0.8,那么只有80%的神经元将作为输入
p_keep_input = tf.placeholder("float")

# 定义有多少的有效神经元将在隐藏层被激活
p_keep_hidden = tf.placeholder("float")

# 构建模型
py_x = model(X, w_layer_1, w_layer_2, w_layer_3, p_keep_input, p_keep_hidden)


cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(py_x, Y))
train_op = tf.train.RMSPropOptimizer(0.001, 0.9).minimize(cost)
predict_op = tf.argmax(py_x, 1)

with tf.Session() as sess:

    init = tf.initialize_all_variables()
    sess.run(init)

    for i in xrange(100):
        for start, end in zip(range(0, len(trX), 128), range(128, len(trX), 128)):
            sess.run(train_op, feed_dict = {X: trX[start:end], Y: trY[start:end],
                                            p_keep_input: 0.8, p_keep_hidden: 0.5})
        print i, np.mean(np.argmax(teY, axis = 1) == sess.run(predict_op, 
                        feed_dict = {X: teX, Y: teY, p_keep_input: 1.0, p_keep_hidden: 1.0}))

本文转载自:http://www.jianshu.com/p/f481b19031a6

共有 人打赏支持
AllenOR灵感
粉丝 10
博文 2634
码字总数 82983
作品 0
程序员
人人都会深度学习之Tensorflow基础快速入门

《Tensorflow基础快速入门》课程的目的是帮助广大的深度学习爱好者,逐层深入,步步精通当下最流行的深度学习框架Tensorflow。该课程包含Tensorflow运行原理,Tensor上面常见的操作,常见API...

liwei2000
07/05
0
0
送书&优惠丨对深度学习感兴趣的你,不了解这些就太OUT了!

点击上方“程序人生”,选择“置顶公众号” 第一时间关注程序猿(媛)身边的故事 TensorFlow是什么? TensorFlow的前身是谷歌大脑(google brain)团队研发的DistBelief。自创建以来,它便被...

csdnsevenn
05/03
0
0
【AI实战】快速掌握TensorFlow(三):激励函数

到现在我们已经了解了TensorFlow的特点和基本操作(见文章:快速掌握TensorFlow(一)),以及TensorFlow计算图、会话的操作(见文章:快速掌握TensorFlow(二)),接下来我们将继续学习掌握...

雪饼
08/30
0
0
微软 ML.NET 从 0.5 开始支持深度学习模型 TensorFlow

微软最新发布的 ML.NET 最大的更新便是开始支持深度学习框架。另外,微软目前也在开发 ML.NET API,届时将启用现有的 LearningPipeline API。 适逢 .NET Conf 2018,微软顺势发布了 ML.NET 0...

达尔文
09/15
0
0
TensorFlow——MNIST手写数字识别

MNIST手写数字识别 MNIST数据集介绍和下载:http://yann.lecun.com/exdb/mnist/ 一、数据集介绍: MNIST是一个入门级的计算机视觉数据集 下载下来的数据集被分成两部分:60000行的训练数据集...

飞天小橘子
04/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

linux使用ntfs-3g操作ntfs格式硬盘

Linux内核目前只支持对微软NTFS文件系统的读取。 NTFS-3G 是微软 NTFS 文件系统的一个开源实现,同时支持读和写。NTFS-3G 开发者使用 FUSE 文件系统来辅助开发,同时对可移植性有益。 安装 ...

linuxprobe16
46分钟前
1
0
kubeadm部署kubernetes集群

一、环境要求 这里使用RHEL7.5 master、etcd:192.168.10.101,主机名:master node1:192.168.10.103,主机名:node1 node2:192.168.10.104,主机名:node2 所有机子能基于主机名通信,编辑...

人在艹木中
今天
7
0
Shell特殊符号总结以及cut,sort,wc,uniq,tee,tr,split命令

特殊符号总结一 * 任意个任意字符 ? 任意一个字符 # 注释字符 \ 脱义字符 | 管道符 # #号后的备注被忽略[root@centos01 ~]# ls a.txt # 备注 a.txt[root@centos01 ~]# a=1[root@centos01...

野雪球
今天
2
0
OSChina 周二乱弹 —— 程序员圣衣

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @达尔文:分享Skeeter Davis的单曲《The End of the World》 《The End of the World》- Skeeter Davis 手机党少年们想听歌,请使劲儿戳(这里...

小小编辑
今天
17
0
[ python import module ] 导入模块

import moudle_name ----> import module_name.py ---> import module_name.py文件路径 -----> sys.path (这里进行查找文件) # from app.web import Personimport app.web.Person as Pe......

_______-
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部