文章目录

  • 基类Layer的实现:
  • 激活层的实现:
  • CostLayer的实现:

基类Layer的实现:

前面已经提到过一个layer的包含:shape,激活函数,梯度的处理以及输出层的处理。

import numpy as npclass Layer:def __init__(self, shape):self.shape = shapedef _activate(self, x, predict):passdef __str__(self):return self.__class__.__name__def __repr__(self):return str(self)@propertydef name(self):return str(self)# v^i = f^(u^i)  , y is v^kdef derivative(self, y):pass# forward pass : XW + bdef activate(self, x, w, bias):return x.dot(w) + bias# y = v^i, w = w^i, prev_delta = delta^i+1# f' = f *(1-f), so if y is v^i, it is easy to derivate# 反向传播计算误差,非输出层的处理def bp(self, y, w, pre_delta):return pre_delta.dot(w.T)*self.derivative(y)

激活层的实现:

class Sigmoid(Layer):def _activate(self, x):return 1 / (1 + np.exp(-x))def derivative(self, y):return y*(1-y)

CostLayer的实现:

涉及到2个部分处理,一是损失的计算方式,而是特殊的变换,还有最后一层的误差需要单独计算。

# =============================================================================
#     没有激活函数、但可能会有特殊的变换函数(比如说 Softmax),同时还需要定义某个损失函数
#     定义导函数时,需要考虑到自身特殊的变换函数并计算相应的、整合后的梯度
# =============================================================================
# 输出层有两个功能:一是特殊的变换,二是计算最后一层的梯度,最后一层的梯度需要特殊处理
class CostLayer(Layer):"""初始化结构self._available_cost_functions:记录所有损失函数的字典self._available_transform_functions:记录所有特殊变换函数的字典self._cost_function、self._cost_function_name:记录损失函数及其名字的两个属性self._transform_function 、self._transform:记录特殊变换函数及其名字的两个属性"""def __init__(self, shape, cost_function="MSE", transform=None):super(CostLayer, self).__init__(shape)self._available_cost_functions = {"MSE": CostLayer._mse,"SVM": CostLayer._svm,"CrossEntropy": CostLayer._cross_entropy}self._available_transform_functions = {"Softmax": CostLayer._softmax,"Sigmoid": CostLayer._sigmoid}self._cost_function_name = cost_functionself._cost_function = self._available_cost_functions[cost_function]if transform is None and cost_function == "CrossEntropy":self._transform = "Softmax"self._transform_function = CostLayer._softmaxelse:self._transform = transformself._transform_function = self._available_transform_functions.get(transform,None)def __str__(self):return self._cost_function_namedef _activate(self, x, predict):if self._transform_function is None:return xreturn self._transform_function(x)def _derivative(self, y, delta=None):pass@staticmethoddef safe_exp(x):return np.exp(x - np.max(x,axis=1,keepdims=True))# 特殊变换函数@staticmethoddef _softmax(y, diff=False):if diff:return y*(1-y)exp_y = CostLayer.safe_exp(y)return exp_y / np.sum(exp_y, axis=1, keepdims=True)@staticmethoddef _sigmoid(y, diff=False):if diff:return y * (1 - y)return 1 / (1 + np.exp(-y))# 单独计算输出层的误差def bp_first(self, y, y_pred):if self._cost_function_name == "CrossEntropy" and (self._transform == "Softmax" or self._transform =="Sigmoid"):return y - y_pred        # 否则、就只能用普适性公式进行计算:#            (没有特殊变换函数)#  (有特殊变换函数)dy = -self._cost_function(y, y_pred)if self._transform_function is None:return dyreturn dy * self._transform_function(y_pred, diff=True)@propertydef calculate(self):return lambda y, y_pred: self._cost_function(y,y_pred,False)# 损失函数@staticmethoddef _mse(y, y_pred, diff=True):if diff:return y_pred - yreturn 0.5*np.average((y-y_pred)**2)@staticmethoddef _cross_entropy(y, y_pred, diff=True, eps=1e-8):if diff:return -y / (y_pred + eps) + (1-y)/ (1- y_pred +eps)return np.average(-y * np.log(y_pred + eps) - (1 - y) * np.log(1 - y_pred + eps))

深度学习:tensorflow Layers的实现,numpy实现深度学习(二)相关推荐

  1. 中文版!学习TensorFlow、PyTorch、机器学习、深度学习和数据结构五件套!(附免费下载)...

    编辑:深度学习冲鸭公众号 学习深度学习以及面试肯定离不开下面的5个重要的资料,更何况是中文版! 获得方式: 1. 关注[深度学习冲鸭]公众号 2. 在[深度学习冲鸭]公众号后台回复 五件套 即可. 1 ...

  2. 中文版!学习 TensorFlow、PyTorch、机器学习、深度学习和数据结构五件套!(附免费下载)...

    学习深度学习以及面试肯定离不开下面的5个重要的资料,更何况是中文版! 获得方式: 1. 关注[AI有道]公众号 2. 在[AI有道]公众号后台回复 五件套 即可. 1. TensorFlow深度学习 ...

  3. 学习TensorFlow、PyTorch、机器学习、深度学习和数据结构五件套!附下载链接!...

    学习深度学习以及面试肯定离不开下面的5个重要的资料,更何况是中文版! 资料领取: 扫码后台回复:3070,即可获取电子版 内容简介 1. TensorFlow深度学习 书籍特点             ...

  4. python深度学习tensorflow和fme结合,实现档案扫描件数据自动分类

    文章目录 前言 一.深度学习基础知识简介 1.什么是深度学习 2.深度学习的原理 3.深度学习应用场景 二.深度学习环境搭建 1.深度学习库的安装 2.CUDA和对应版本的cudnn下载 三.实战教学 ...

  5. 【神经网络与深度学习-TensorFlow实践】-中国大学MOOC课程(八)(TensorFlow基础))

    [神经网络与深度学习-TensorFlow实践]-中国大学MOOC课程(八)(TensorFlow基础)) 8 TensorFlow基础 8.1 TensorFlow2.0特性 8.1.1 Tenso ...

  6. 深度学习 TensorFlow入门

    文章目录 一.深度学习框架-TensorFlow 1.1 TensorFlow介绍 1.2 TensorFlow的安装 1.3 张量及其操作 1.3.1 张量Tensor 1.基本方法 2.转换成nu ...

  7. 【神经网络与深度学习-TensorFlow实践】-中国大学MOOC课程(十四)(卷积神经网络))

    [神经网络与深度学习-TensorFlow实践]-中国大学MOOC课程(十四)(卷积神经网络)) 14 卷积神经网络 14.1 深度学习基础 14.1.1 深度学习的基本思想 14.1.2 深度学习三 ...

  8. 使用TensorFlow.js在浏览器中进行深度学习入门

    目录 设置TensorFlow.js 创建训练数据 检查点 定义神经网络模型 训练AI 测试结果 终点线 内存使用注意事项 下一步是什么?狗和披萨? 下载TensorFlowJS示例-6.1 MB T ...

  9. 从TensorFlow到PyTorch:九大深度学习框架哪款最适合你?

    人工智能AI与大数据技术实战  公众号: weic2c 开源的深度学习神经网络正步入成熟,而现在有许多框架具备为个性化方案提供先进的机器学习和人工智能的能力.那么如何决定哪个开源框架最适合你呢?本文试 ...

  10. 使用TensorFlow进行股票价格预测的简单深度学习模型

    使用TensorFlow进行股票价格预测的简单深度学习模型(翻译) 原文链接:https://medium.com/mlreview/a-simple-deep-learning-model-for- ...

最新文章

  1. pytorch中tensor.mul()和mm()和matmul()
  2. 你应该知道的计算机网络知识
  3. linux qt绘框,Qt绘制异形窗体
  4. P8-07-23 在 GitLab 提交代码后自动触发 Jenkins 构建;使用禅道进行项目管理
  5. 我的世界服务器抽奖系统怎么弄,我的世界自动识别货币抽奖机如何制作
  6. 从《四驱兄弟》到“联想中国”
  7. pyside2 镜像安装_pyside2 镜像安装_【PySide2学习笔记】0_下载安装
  8. php多站点共享用户表,php – Zend_Auth:允许用户登录到多个表/身份
  9. python查找文件并重命名_python实现遍历文件夹图片并重命名
  10. html帮助文件的制作软件,FAR HTML(帮助文件制作软件)V5.6.1 官方特别版
  11. 蓝桥杯 ALGO-150 算法训练 6-1 递归求二项式系数值
  12. 孤读Paper——《ATSS:Adaptive Training Sample Selection》
  13. 默认情况下linux主机在机房托管期间被,托管机房作业未传之秘
  14. 设计模式-1-单例模式
  15. 卫计委电子病历架构基本概念
  16. c语言用函数写大小写转换,C语言实现大小写转换的三种方法
  17. Python:过程型考核
  18. python定义一个字符串变量_python基础入门语法和变量类型(一)
  19. 2021AAPM大赛第一名技术报告Designing an Iterative Network for Fanbeam-CTwith Unknown Geometry 阅读笔记
  20. Chip类控件(Chip、InputChip、ChoiceChip、FilterChip、ActionChip)

热门文章

  1. PHP判断变量内容是什么编码(gbk?utf-8) mb_detect_encoding
  2. GET和POST的真正区别
  3. 魔法城堡计算机谱子,TFBOYS魔法城堡歌谱及歌词
  4. linux中mongo的导出数据,Linux下mongodb安装及数据导入导出教程(示例代码)
  5. java中label数值_java – 如何在JLabel中显示变量值
  6. java chinapay_通过PHP/Java Bridge来实现ecshop的chinapay支付接口
  7. mysql查询建表SQL语句
  8. selenium:我的第一个程序
  9. 【H2 Database】查看帮助信息
  10. spring cloud Alibaba 的 Nacos学习笔记