# -*- coding: utf-8 -*-
# @Time    : 2017/12/3 下午2:17
# @Author  : SkullFang
# @Email   : yzhang.private@gmail.com
# @File    : FullConnent.py
# @Software: PyCharm
#转载自https://www.jianshu.com/p/e022d854038d
import numpy as np
import theano
import theano.tensor as T
from theano.tensor import shared_randomstreams
from theano.tensor.nnet import sigmoid
from theano.tensor.signal.pool import pool_2d
from theano.tensor.nnet import conv
from theano.tensor.nnet import softmax
from SoftmaxLayer import  SoftmaxLayer
"""
theano可以把代码塞到GPU上使用
theano.tensor 有很多数学计算
shared_randomstreams用于取随即值
sigmoid激励函数
"""
GPU=False
if GPU:print "Trying to run under a GPU"try:theano.config.device='gpu'except:passtheano.config.floatX='float32'
else:print "Running with a Cpu"class FullyConnectedLayer(object):def __init__(self, n_in, n_out, activation_fn=sigmoid, p_dropout=0.0):"""这是一个构造函数。:param n_in: 输入多少个神经元:param n_out: 输出的多少个神经元:param activation_fn: 激励函数:param p_dropout: 抛弃多少个神经元是个百分比"""# 前一层神经元个数self.n_in = n_in# 后一层神经元个数self.n_out = n_out# 激励函数self.activation_fn = activation_fn# dropoutself.p_dropout = p_dropout#theano.shared可以创建类似共有性变量放在GPU上进行运算,borrow是说内存是否共用,在大对象的时候最好设置的是True#np.asarray()可以吧数组形式的,列表啊,元祖啊,字典啊变成一个矩阵#size是w是啥样 输入有多少个神经元自然w就有多少行。输出有多少个神经元w就有多少列。self.w = theano.shared(np.asarray(np.random.normal(loc=0.0, scale=np.sqrt(1.0 / n_out), size=(n_in, n_out)),dtype=theano.config.floatX),name='w', borrow=True)#初始化b 跟初始化w差不多的。但是b的size可只有输出层那么多。很容易理解。w的一列就是输入层所有的神经元的w。# 然后* x +b 这里的b应该就是一个实数。有多少个实数呢?要看w有多少列了。所以只需要知道输出层的神经元个数。self.b = theano.shared(np.asarray(np.random.normal(loc=0.0, scale=1.0, size=(n_out,)),dtype=theano.config.floatX),name='b', borrow=True)self.params = [self.w, self.b]def set_inpt(self,inpt,inpt_dropout,mini_batch_size):"""全链接的输入设置:param inpt: 前一层的出:param inpt_droput: 前一层dropout之后的输出:param mini_batch_size::return:"""# reshape输入self.inpt = inpt.reshape((mini_batch_size, self.n_in))# 输出self.output = self.activation_fn((1 - self.p_dropout) * T.dot(self.inpt, self.w) + self.b)# 取最大值self.y_out = T.argmax(self.output, axis=1)# dropout输入dropoutself.inpt_dropout = dropout_layer(inpt_dropout.reshape((mini_batch_size, self.n_in)), self.p_dropout)# dropout输出self.output_dropout = self.activation_fn(T.dot(self.inpt_dropout, self.w) + self.b)def accuracy(self,y):return T.mean(T.eq(y,self.y_out))def ReLU(z): return T.maximum(0.0, z)def dropout_layer(layer, p_dropout):srng = shared_randomstreams.RandomStreams(np.random.RandomState(0).randint(999999))mask = srng.binomial(n=1, p=1 - p_dropout, size=layer.shape)return layer * T.cast(mask, theano.config.floatX)

theano 全连接代码相关推荐

  1. 【FPGA】基于HLS的全连接神经网络手写体识别

    目录 一 系统分析 1.1 全连接神经网络简介 二 通过HLS 编写全连接神经网络传入权重参数和偏置参数文件 2.1  获得图片.权重以及偏置的参数 2.2 编写C语言的全连接算子 2.3 Slave ...

  2. 手写数字识别全部代码--全连接神经网络方法

    ''' #2018-06-25 272015 June Monday the 26 week, the 176 day SZ 手写字体识别程序文件1: 这个程序使用了全连接神经网络也就是DNN. 定义 ...

  3. 神经网络 测试集loss不下降_代码实践 | 全连接神经网络回归---房价预测

    学习目录 阿力阿哩哩:深度学习 | 学习目录​zhuanlan.zhihu.com 前面我们介绍了: 阿力阿哩哩:深度学习开端|全连接神经网络​zhuanlan.zhihu.com 4.7代码实践 & ...

  4. 遗传算法优化LSTM网络结构(实现自动根据适应度函数:即准确率来全局搜索最佳网络结构):主要被优化参数:网络层数,每层的神经元个数,全连接的层数,全连接层的神经元个数。代码有详细注解

    代码视频链接:https://www.bilibili.com/video/BV19q4y1Q7DR/ 代码效果图: 1.优化参数 本文优化的是LSTM的层数参数和各层神经元参数,其中包含了lstm层 ...

  5. 全站最详细的Python numpy 搭建全连接神经网络模型教程(理论计算+代码实现)(不止能预测手写数字数据,准确率93.21%)

    1.引言 本文构建的全连接神经网络模型结构图如上.其中中间隐藏层的数量以及各层(输入层.隐藏层.输出层)的神经单元数量均可 自由设置,本文构造的神经网络并不是专门为识别手写数字而写死的,而是可以根据 ...

  6. Caffe 代码解读之全连接层 inner product layer

    今天来看一下全连接层的代码.首先,我们要知道全连接层在做什么.先来看一下caffe的官方文档,介绍如下: 可以看到,输入为n c h w,输出为n c_o 1 1 那么,它究竟做了什么那? 假设con ...

  7. 深度学习框架 TensorFlow:张量、自动求导机制、tf.keras模块(Model、layers、losses、optimizer、metrics)、多层感知机(即多层全连接神经网络 MLP)

    日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) 安装 TensorFlow2.CUDA10.cuDNN7.6. ...

  8. PyTorch全连接ReLU网络

    PyTorch全连接ReLU网络 1.PyTorch的核心是两个主要特征: • 一个n维张量,类似于numpy,但可以在GPU上运行 • 搭建和训练神经网络时的自动微分/求导机制 本文将使用全连接的R ...

  9. 深蓝学院第二章:基于全连接神经网络(FCNN)的手写数字识别

    如何用全连接神经网络去做手写识别??? 使用的是jupyter notebook这个插件进行代码演示.(首先先装一个Anaconda的虚拟环境,然后自己构建一个自己的虚拟环境,然后在虚拟环境中安装ju ...

  10. 基于Numpy构建全连接前馈神经网络进行手写数字识别

    文章目录 (一) 问题描述 (二) 设计简要描述 (三) 程序清单 (四) 结果分析 (五) 调试报告 (六) 实验小结 (一) 问题描述 不使用任何机器学习框架,仅仅通过Numpy库构建一个最简单的 ...

最新文章

  1. 01_字符串处理-----04_在文本中应用ZIpf定律
  2. “情感计算”的蓬勃发展依赖于收集大量的行为和情感数据
  3. UIAlertController
  4. Linux boot启动串口出现乱码,使用 am335x-evm-sdk-src-02.00.01.07 的源码,UBOOT阶段使用LCD控制器后,内核启动串口控制台输出乱码。...
  5. Jenkins 服务重启方法
  6. java 网络编程connection timed out是什么意思_什么?听说这四个概念,很多 Java 老手都说不清...
  7. Java Servlet(六):HttpServlet实现原理(jdk7+tomcat7+eclipse)
  8. 中断程序_ABB机器人中断程序详解(安川FANUC)
  9. 安利一个React同构渲染脚手架 —— razzle
  10. 桌面云之深信服VDC管理
  11. 常见的监控项目组网方案技术系统图,一文了解清楚!
  12. 事业单位资产管理系统破解资产管理难题,实现账、卡、物、地、人相符
  13. 史上最全iPhone分辨率和尺寸
  14. 多卡聚合路由设备解决户外直播网络问题
  15. 三菱PLC控制步进驱动器脉冲定位相关(附代码接线图)
  16. 想凭勤奋逆风翻盘?如今靠运气才有更大赢面
  17. MyBaits-Plus快速使用
  18. MySQL 5.7中sync_binlog参数和半同步中after_commit和after_sync的区别
  19. 高中数学-二项式定理以及系数和帕斯卡定理
  20. 51单片机案例实操 -- 倒车雷达

热门文章

  1. 计算机的acpi高级电源选项配置,ACPI电源管理模式详解
  2. 翻译软件Bob安装教程
  3. 沪上各区免费停车场大全
  4. conime.exe是什么?conime.exe病毒的清除方法
  5. PowerDesigner详细安装教程
  6. SecureCRT配置详细图文教程
  7. 联想android手机驱动,Lenovo联想手机驱动
  8. 对booth算法的一点理解
  9. AspNetPager分页控制
  10. oracle静默安装报错,Oracle静默安装说明