当前位置: 首页 > news >正文

pytorch的发展历史,与其他框架的联系

        我一直是这样以为的:pytorch的底层实现是c++(这一点没有问题,见下边的pytorch结构图),然后这个部分顺理成章的被命名为torch,并提供c++接口,我们在python中常用的是带有python接口的,所以被称为pytorch。昨天无意中看到Torch是由lua语言写的,这让我十分震惊,完全颠覆了我的想象。所以今天准备查找并记录一下pytorch的发展历史,与其他框架的联系。当然以下列举的部分难以面面俱到,如果您知道哪些有意思的相关知识,请在评论区评论。

pytorch结构图

在这里插入图片描述

  • 图片来源 https://golden.com/wiki/PyTorch-NMGD4Y4,如果你想了解有关PyTorch 中的自动微分,PyTorch 基金会的相关信息,可以点进去看一下。

发展历史

        pytiorch ,如果您想了解pytorch的技术新闻可点击pytorch的官方博客。2016年10月,PyTorch开始作为Adam Paszke的实习项目。

Torch (基础)

        Torch 是一个Facebook的开源机器学习库、一个科学计算框架和一种基于 Lua 编程语言的脚本语言。它于2002年10月首次发布。Torch的开发于2017年转移到PyTorch。

        同时期的学习框架还有MATL AB和OpenNN等。MATL AB是由美国MathWorks公司出品的一种用于算法开发、数据分析以及数值计算的高级技术计算语言和交互式环境。OpenNN开发于2003年在国际工程数值方法中心的名为RAMFLOOD的项目中是一个使用C++编写的开源类库。OpenNN的主要优点是其高性能。该库在执行速度和内存分配方面非常出色。它不断优化和并行化,以最大限度地提高其效率。并且Torch的论文中也提到了Matlab:Torch7: A Matlab-like Environment for Machine Learning,Neural Information Processing Systems. 2011.。

Caffe(声明式编程风格)

        Caffe(https://github.com/BVLC/caffe)是以C++/CUDA代码为主的深度学习框架,需要进行编译安装,支持命令行、Python和MATLAB接口、单机多卡、多机多卡使用。Caffe的全称是:Convolutional architecture forfast feature embedding,它是一个清晰、高效的深度学习框架。
        Caffe是一款知名的深度学习框架,由加州大学伯克利分校的贾扬清博士于2013年在Github上发布。Caffe2018 于 21 年 2022 月底并入 PyTorch。并且在pytorch的开源项目中可以看到名为caffe2的文件夹。

在这里插入图片描述

        Caffe 遵循了神经网络的一个简单假设——所有的计算都是以layer(如relu_layer:https://github.com/BVLC/caffe/blob/2a1c552b66f026c7508d390b526f2495ed3be594/src/caffe/layers/relu_layer.cpp)的形式表示的,layer做的事情就是处理一些数据,然后输出一些计算以后的结果。比如说卷积,就是输入一个图像,然后和这一层的参数(filter)做卷Captain Jack积,然后输出卷积的结果。每一个layer需要做两个计算:1,Forward是从输入计算输出。2,Backward是从上面给的gradient来计算相对于输入的gradient。只要这两个函数实现了以后,我们就可以把很多层连接成一个网络,这个网络做的事情就是输入我们的数据(图像或者语音等),然后来计算我们需要的输出(比如说识别的label),在training的时候,我们可以根据已有的label来计算loss和gradient,然后用gradient来update网络的参数,这个就是Caffe的一个基本流程。

                这是一个官方的caffee的例子:https://github.com/BVLC/caffe/tree/master/examples/mnist ,需要用我们熟悉并使用Google Protobuf定义网络,定义 MNIST 求解器。Caffe通过“blobs”即以4维数组的方式存储和传递数据。Blobs提供了一个统一的内存接口,用于批量图像(或其它数据)的操作,参数或参数更新。Models是以Google Protocol Buffers的方式存储在磁盘上。大型数据存储在LevelDB数据库中。Caffe保留所有的有向无环层图,确保正确的进行前向传播和反向传播。Caffe模型是终端到终端的机器学习系统。一个典型的网络开始于数据层,结束于loss层。通过一个单一的开关,使其网络运行在CPU或GPU上。在CPU或GPU上,层会产生相同的结果。在使用上,caffe(c++)的使用需要进行复杂的编译操作(相比后来的pytorch),所以在caffe流行的时期,有时一个实验室中使用的caffe还是上一届的师兄安装的。但是现在仍有许多论文使用caffee框架,知乎上也有问题:caffe停更这么多年,为何现在还有一些论文开源代码还是使用caffe?

这里引用一下Captain Jack的回答:经典的数据结构先行的程序架构。

  1. 整个caffe都是围绕那个 prototxt 定义来实现的。
  2. 没有太多额外的系统方向的代码,项目结构清晰,比如:分布式、跨平台、通讯、动态dispatch等等。
  3. 和现在的框架比,那就是最小可用产品。
  4. 历史占用率高。

所以,

  1. 改代码容易,你改改 PyTorch、掏粪 试试。
  2. 作为一个数据格式的标准,转换比较容易,到现在 onnx 也就和 caffe 的 prototxt 打平手。很多私有、商业实现还是以 caffe 格式支持为准。
  3. 可能是最重要的:熟悉了懒得学新的,改改caffe又不是不能用。

Theano(创新观点)

        Theano(https://github.com/Theano/Theano)是一个Python库和优化编译器的开源项目, 用于操作和评估数学表达式,尤其是矩阵值表达式。其计算是使用NumPy语法表示,并且编译后可在CPU/GPU架构上高效运行。
        Theano多年来引入很多创新并已被其他框架采用和完善。例如,能够将模型表示为数学表达式,重写计算图以获得更好的性能和内存使用,在GPU上透明执行,高阶自动微分都已成为主流思想。
        Keras是一个由Python编写的开源人工神经网络库,可以作为Tensorflow、Microsoft-CNTK和Theano的高阶应用程序接口。

CG

  • 深度学习软件比较https://en.wikipedia.org/wiki/Comparison_of_deep_learning_software

  • [源码解析] PyTorch 分布式(1)------历史和概述 https://www.cnblogs.com/rossiXYZ/p/15496268.html

  • https://alexmoltzau.medium.com/pytorch-governance-and-history-2e5889b79dc1

  • 宣布成立 PyTorch 基金会:尖端 AI 框架的新时代 2022.12 https://ai.meta.com/blog/pytorch-foundation/

  • LUA Torch 回忆录 https://zhuanlan.zhihu.com/p/380924980?utm_id=0

  • https://en.wikipedia.org/wiki/Torch_(machine_learning)

  • 如何评价 Theano?
    h ttps://www.zhihu.com/question/35485591

  • Chainer是一个开源的深度学习框架, 完全在NumPy和CuPy Python库
    的基础上用Python编写,因其采用边运行边定义方案以及在大型系统上的性

  • Theano实现了非常先进的优化技术来优化完整的计算图。它将代数的各个方面与优化编译器的各个方面相结合。图形的一部分可以编译成 C 语言代码。对于重复计算,评估速度至关重要,Theano通过生成非常有效的代码来达到此目的。 https://www.tutorialspoint.com/theano/theano_computational_graph.htm

  • 深度学习框架——自动求导 https://www.cnblogs.com/wolfling/p/14919024.html

  • 大模型:

  • OneFlow的大模型分片保存和加载策略

  • 一块GPU训练TB级推荐模型不是梦,OneEmbedding性能一骑绝尘

  • 大模型训练难于上青天?效率超群、易用的“李白”模型库来了

  • 深度学习利器之自动微分(1)

相关文章:

pytorch的发展历史,与其他框架的联系

我一直是这样以为的:pytorch的底层实现是c(这一点没有问题,见下边的pytorch结构图),然后这个部分顺理成章的被命名为torch,并提供c接口,我们在python中常用的是带有python接口的,所以被称为pytorch。昨天无意中看到Torch是由lua语言写的&…...

Kibana-elastic--Elastic Stack--ELK Stack

Kibana 是什么? | Elastic 将数据转变为结果、响应和解决方案 使用 Kibana 针对大规模数据快速运行数据分析,以实现可观测性、安全和搜索。对来自任何来源的任何数据进行全面透彻的分析,从威胁情报到搜索分析,从日志到应用程序监测…...

Docker复杂命令便捷操作

启动所有状态为Created的容器 要启动所有状态为"created"的Docker容器,可以使用以下命令: docker container start $(docker container ls -aq --filter "statuscreated")上述命令执行了以下步骤: docker container l…...

Python中的datetime模块

time模块用于取得UNIX纪元时间戳,并加以处理。但是,如果以方便的格式显示日期,或对日期进行算数运算,就应该使用datetime模块。 目录 1. datetime数据类型 1) datetime.datetime.now()表示特定时刻 2)da…...

Flutter - 微信朋友圈、十字滑动效果(微博/抖音个人中心效果)

demo 地址: https://github.com/iotjin/jh_flutter_demo 代码不定时更新,请前往github查看最新代码 前言 一般APP都有类似微博/抖音个人中心的效果,支持上下拉刷新,并且顶部有个图片可以下拉放大,图片底部是几个tab,可…...

MySQL检索数据和排序数据

目录 一、select语句 1.检索单个列(SELECT 列名 FROM 表名;) 2.检索多个列(SELECT 列名1,列名2,列名3 FROM 表名;) 3.检索所有的列(SELECT * FROM 表名;) 4.检索不同的行&#x…...

通过STM32内部ADC将烟雾传感器发送的信号值显示在OLED上

一.CubeMX配置 首先我们在CubeMX配置ADC1, 设置一个定时器TIM2定时1s采样一次以及刷新一次OLED, 打开IIC用于驱动OLED显示屏。 二.程序 在Keil5中添加好oled的显示库,以及用来显示的函数、初始化函数、清屏函数等。在主程序中初始化oled,并将其清屏。…...

ZEPHYR 快速开发指南

简介 国内小伙伴在学习zephyr的时候,有以下几个痛点: 学习门槛过高github访问不畅,下载起来比较费劲。 这篇文章将我自己踩的坑介绍一下,顺便给大家优化一些地方,避免掉所有的坑。 首先用virtualbox 来安装一个ubu…...

【FPGA + 串口】功能完备的串口测试模块,三种模式:自发自收、交叉收发、内源

【FPGA 串口】功能完备的串口测试模块,三种模式:自发自收、交叉收发、内源 VIO 控制单元 wire [1:0] mode;vio_uart UART_VIO (.clk(ad9361_l_clk), // input wire clk.probe_out0(mode) // output wire [1 : 0] probe_out0 );将 mod…...

初步了解预训练语言模型BERT

本文字数::4024字 预计阅读时间:12分钟 BERT是由Google提出的预训练语言模型,它基于transformer架构,被广泛应用于自然语言处理领域,是当前自然语言处理领域最流行的预训练模型之一。而了解BERT需要先了解注…...

Android Hook系统 Handler 消息实现

前言 主线程的Handler 主要依赖于 ActivityThread,Android是消息驱动,比如view的刷新,activity的创建等,如果能打印系统层Handler消息日志,就需要对于系统层的Handler 进行Hook 原理 ActivityThread中 mH对象主要负责…...

R语言从入门到精通之【R语言的使用】

系列文章目录 1.R语言从入门到精通之【R语言介绍】 2.R语言从入门到精通之【R语言下载与安装】 3.R语言从入门到精通之【R语言的使用】 文章目录 系列文章目录一、新手上路1.R语句构成2.获取帮助3.工作空间二、包1.包的安装2.实践应用总结一、新手上路 1.R语句构成 R语句由函…...

WPF实战学习笔记29-登录数据绑定,编写登录服务

添加登录绑定字段、命令、方法 修改对象:Mytodo.ViewModels.ViewModels using Mytodo.Service; using Prism.Commands; using Prism.Events; using Prism.Mvvm; using Prism.Services.Dialogs; using System; using System.CodeDom.Compiler; using System.Collec…...

c++函数式编程:统计文件字符串,文件流

头文件 #include <iostream> #include <fstream> #include <string> #include <sstream> #include <algorithm> #include <vector>统计方法 int count_lines(const std::string &filename) {std::ifstream in{filename};return std:…...

scp命令----跨服务器传输文件

scp命令 Linux scp 命令用于 Linux 之间复制文件和目录。 scp 是 secure copy 的缩写, scp 是 linux 系统下基于 ssh 登陆进行安全的远程文件拷贝命令。 scp 是加密的&#xff0c;rcp 是不加密的&#xff0c;scp 是 rcp 的加强版。 一、Linux scp 命令 以下是scp命令常用的…...

React Dva项目中模仿网络请求数据方法

我们都已经选择react了 那么自然是一个前后端分离的开发形式 至少我在公司中 大部分时候是前后端同时开发的 一般你在开发界面没有接口直接给你 但你可以和后端约定数据格式 然后在前端模拟数据 我们在自己的Dva项目中 在根目录下的 mock 目录下创建一个js文件 我这里叫 filmDa…...

【云原生】Docker容器命令监控+Prometheus监控平台

目录 1.常用命令监控 docker ps docker top docker stats 2.weave scope 1.下载 2.安装 3.访问查询即可 3.Prometheus监控平台 1.部署数据收集器cadvisor 2.部署Prometheus 3.部署可视化平台Gragana 4.进入后台控制台 1.常用命令监控 docker ps [rootlocalhost ~…...

DBA 职责及日常工作职责

DBA 职责及日常工作职责: 1.安装和升级数据库服务器,以及应用程序工具构建和配置网络环境. 2.熟悉数据库系统的存储结构预测未来的存储需求,制订数据库的存储方案. 3.根据开发人员设计的应用系统需求创建数据库存储结构. 4.根据开发人员设计的应用系统需求创建数据库对象 5…...

如何利用量化接口进行数据分析和计算?

量化交易作为一种利用数据和算法进行投资的方式&#xff0c;数据分析和计算是量化交易的核心。量化接口作为连接量化交易者和交易所的桥梁&#xff0c;提供了获取市场数据和执行交易指令的功能&#xff0c;为量化交易的数据分析和计算提供了基础。 一、数据获取&#xff1a; 市…...

electron-egg 加密报错

electron框架&#xff1a;electron-egg 解决方式 npm uninstall bytenode npm install bytenode1.3.6node:internal/modules/cjs/loader:928 throw err; ^ Error: Cannot find module ‘node:assert/strict’ Require stack: D:\electron-egg-test\new-electron-egg\electr…...

docker详细操作--未完待续

docker介绍 docker官网: Docker&#xff1a;加速容器应用程序开发 harbor官网&#xff1a;Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台&#xff0c;用于将应用程序及其依赖项&#xff08;如库、运行时环…...

进程地址空间(比特课总结)

一、进程地址空间 1. 环境变量 1 &#xff09;⽤户级环境变量与系统级环境变量 全局属性&#xff1a;环境变量具有全局属性&#xff0c;会被⼦进程继承。例如当bash启动⼦进程时&#xff0c;环 境变量会⾃动传递给⼦进程。 本地变量限制&#xff1a;本地变量只在当前进程(ba…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局&#xff1a;PCB行业的时代之问 在数字经济蓬勃发展的浪潮中&#xff0c;PCB&#xff08;印制电路板&#xff09;作为 “电子产品之母”&#xff0c;其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透&#xff0c;PCB行业面临着前所未有的挑战与机遇。产品迭代…...

FastAPI 教程:从入门到实践

FastAPI 是一个现代、快速&#xff08;高性能&#xff09;的 Web 框架&#xff0c;用于构建 API&#xff0c;支持 Python 3.6。它基于标准 Python 类型提示&#xff0c;易于学习且功能强大。以下是一个完整的 FastAPI 入门教程&#xff0c;涵盖从环境搭建到创建并运行一个简单的…...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 &#xff08;1&#xff09;设置网关 打开VMware虚拟机&#xff0c;点击编辑…...

AspectJ 在 Android 中的完整使用指南

一、环境配置&#xff08;Gradle 7.0 适配&#xff09; 1. 项目级 build.gradle // 注意&#xff1a;沪江插件已停更&#xff0c;推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...

Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?

在大数据处理领域&#xff0c;Hive 作为 Hadoop 生态中重要的数据仓库工具&#xff0c;其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式&#xff0c;很多开发者常常陷入选择困境。本文将从底…...

如何应对敏捷转型中的团队阻力

应对敏捷转型中的团队阻力需要明确沟通敏捷转型目的、提升团队参与感、提供充分的培训与支持、逐步推进敏捷实践、建立清晰的奖励和反馈机制。其中&#xff0c;明确沟通敏捷转型目的尤为关键&#xff0c;团队成员只有清晰理解转型背后的原因和利益&#xff0c;才能降低对变化的…...

人工智能 - 在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型

在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型。这些平台各有侧重&#xff0c;适用场景差异显著。下面我将从核心功能定位、典型应用场景、真实体验痛点、选型决策关键点进行拆解&#xff0c;并提供具体场景下的推荐方案。 一、核心功能定位速览 平台核心定位技术栈亮…...

Spring Boot + MyBatis 集成支付宝支付流程

Spring Boot MyBatis 集成支付宝支付流程 核心流程 商户系统生成订单调用支付宝创建预支付订单用户跳转支付宝完成支付支付宝异步通知支付结果商户处理支付结果更新订单状态支付宝同步跳转回商户页面 代码实现示例&#xff08;电脑网站支付&#xff09; 1. 添加依赖 <!…...