你或许也想拥有专属于自己的AI模型文件格式-(2)

AI模型各种存储格式文件介绍(pb, onnx, ckpt, tflite, h5) .ckpt模型文件 tensorflow框架下保存的模型,包含以下几个子文件: model.ckpt.meta :保存Tensorflow计算图结构,可以理解为神经网络的网络结构 model.ckpt :保存Tensorflow程序中每一个变量的取值,变量是模型中可训练的部分 checkpoint :保存一个目录下所有模型文件列表 .pb 模型文件 pb是protocolbuffer的缩写。TensorFlow训练模型后存成的pb文件,是一种表示模型(神经网络)结构的二进制文件,不带有源代码,也. 阅读详情

        紧接着上次的工作,想要回顾或者查看上次内容可以点击以下的链接,链接如下所示:

你或许也想拥有专属于自己的AI模型文件格式-(1)https://blog.youkuaiyun.com/Pengcode/article/details/121754272?spm=1001.2014.3001.5502        这次主要的内容是构建我们的专ai模的灵魂,也就是信息组成描述编写。通俗来说,就是定义一个数据协议,这些数据协议中包含了模型数据结构,这些数据结构是我们搭建整个模型的积木,或者说是包含了整个模型是如何定义的。

        跟着上节的步骤,我们已经搭建好了环境,安装好了对应的工具。本次我使用的工具是FlatBuffers,接下来我会使用该工具来得到我们专ai模的数据协议。

一、FlatBuffers的使用流程:

1.1 编写一个Schema.fbs数据交换协议文件:

        拿来官网的一个例子就是如下所示的文件,其文件名称为monster.fbs:

// Example IDL file for our monster's schema.
 
namespace MyGame.Sample;
 
enum Color:byte { Red = 0, Green, Blue = 2 }
 
union Equipment { Weapon } // Optionally add more tables.
 
struct Vec3 {
  x:float;
  y:float;
  z:float;
}
 
table Monster {
  pos:Vec3; // Struct.
  mana:short = 150;
  hp:short = 100;
  name:string;
  friendly:bool = false (deprecated);
  inventory:[ubyte];  // Vector of scalars.
  color:Color = Blue; // Enum.
  weapons:[Weapon];   // Vector of tables.
  equipped:Equipment; // Union.
  path:[Vec3];        // Vector of structs.
}
 
table Weapon {
  name:string;
  damage:short;
}
 
root_type Monster;

        如果了解过C语言和json文件,那或许会觉得上述的书写语法像是两者的糅合,显得陌生又熟悉。其实Schema.fbs使用的是一种被FlatBuffers定义的IDL(接口定义语言,Interface description language),IDL是一类语言的统称,主要用来描述编程的API,使用了IDL描述了一份API文件,假设目前有一份根据该API文件来生成的数据,不管在C++、JAVA还是任何其他编程语言,那么我也可以根据该API文件解释这份数据。这种情况通常发生在服务器来客户端的数据收发后的解析过程中,所以IDL经常被使用在服务器的场景中。

        因此FlatBuffers的schema是一种IDL。为了更好的解释,我就按照数据实际意义来进行说明,因为这份monster.fbs的使用场景是游戏,主要描述了一个完整的怪物的信息。我将会解读如下所示:


namespace MyGame.Sample;
// 颜色种类,用来描述怪物的颜色
enum Color:byte { Red = 0, Green, Blue = 2 }
// 护甲,是武器的一种
union Equipment { Weapon }
// 三维数据
struct Vec3 {
  x:float;
  y:float;
  z:float;
}
// 怪物
table Monster {
  pos:Vec3; //用三维数据来描述怪物的坐标点
  mana:short = 150; // 力量值,跟武力差不多
  hp:short = 100;// hp值,就是血量
  name:string;//名称
  friendly:bool = false (deprecated);//是否对玩家友好,就是是否会主动攻击
  inventory:[ubyte];  // 物品栏
  color:Color = Blue; // 颜色
  weapons:[Weapon];   // 携带武器
  equipped:Equipment; // 拥有的护甲,只能有一件
  path:[Vec3];        // 行走轨迹
}
table Weapon {
  name:string;
  damage:short;
}
// 关键字root_type声明了Monster是我们的主要类型,作为了后续序列化的主要类型,
//对于解析Json文件特别重要。
root_type Monster;

        接下来讲解一下上述的monster.fbs内部的语法和含义,为了缩小文章篇幅,我将以注解的方式来直接书写在下面:

// 首先,这里有个关键字namespace,主要是用来声明命名空间的,主要是为了C++使用方便
// 那么在C++语言中,我们将需要使用到MyGame::Sample这个命名空间来使用到IDL定义的API 
namespace MyGame.Sample;
// 关键字enum表示Color是一个枚举类型,byte表示内部的枚举值的类型是字节类型
// 注意,enum内部的枚举值只能是整型数据类型:byte、ubyte、short、ushort、int、uint、
// long、ulong
enum Color:byte { Red = 0, Green, Blue = 2 }
// 关键字union表示Equipment共用体,该概念跟C语言中的共用体的概念是一致的
union Equipment { Weapon }
// 关键字struct表示Vec3是一个结构体,跟table的区别就是:
// 1、struct内部一般只是包含其他结构体或者是内建数据类型
// 2、不能设置默认值
// 3、相较于table的速度更快、存储更小
// 4、没有added和deprecated特性
struct Vec3 {
  x:float;
  y:float;
  z:float;
}
// 关键字table,是schema中最主要的数据结构了,拥有丰富的特性和接口
// 其成员类型可以是任何的数据结构,而且可以设置默认值;
// 另外,其也可以声明列表类型,类似于向量类型,如下所示的[ubyte]、[Weapon]、[Vec3]
table Monster {
  pos:Vec3; // Struct.
  mana:short = 150; // 设置默认为150
  hp:short = 100;
  name:string;
  friendly:bool = false (deprecated);
  inventory:[ubyte];  // Vector of scalars.
  color:Color = Blue; // Enum.
  weapons:[Weapon];   // Vector of tables.
  equipped:Equipment; // Union.
  path:[Vec3];        // Vector of structs.
}
table Weapon {
  name:string;
  damage:short;
}
// 关键字root_type声明了Monster是我们的主要类型,作为了后续序列化的主要类型,
//对于解析Json文件特别重要。
root_type Monster;

        上述就是FlatBuffers的schema编写规则了,想要了解更加具体的schema编写规则,请前往该网址:schema编写规则的官网教程https://google.github.io/flatbuffers/flatbuffers_guide_writing_schema.html

1.2、使用flatc编译上述编写的schema.fbs文件

        flatc在安装了FlatBuffers就可以使用,是一个编译器,我更愿意称之为代码生成器。因为这个主要就是用于生成目标平台的代码,你可以把schema.fbs文件生成C++、JAVA、JavaScript、Python等目标编程语言的代码,这份被生成的代码就是对应的数据结构API了。

        如下是我使用flatc进行编译常数monster.fbs文件的过程:

$ gedit monster.fbs
$ ls
monster.fbs
$ flatc -c -o ./ monster.fbs 
$ ls
monster.fbs  monster_generated.h
$ cat monster_generated.h 
// 以下就是monster.fbs对应的C++编程语言平台对应的生成代码部分
// automatically generated by the FlatBuffers compiler, do not modify
#ifndef FLATBUFFERS_GENERATED_MONSTER_MYGAME_SAMPLE_H_
#define FLATBUFFERS_GENERATED_MONSTER_MYGAME_SAMPLE_H_

#include "flatbuffers/flatbuffers.h"

namespace MyGame {
namespace Sample {

struct Vec3;

struct Monster;
struct MonsterBuilder;

struct Weapon;
struct WeaponBuilder;
// 过长了,所以只展示了前一部分
..........
}
}
$

1.3、在对应的编成平台使用生成的代码

        这部分因为篇幅过长,而且本文还暂时未进行到这部分,所以将会在本系列的后续章节中讲述。如果想要现在了解使用方法的,请访问该官网链接:如何在编成代码中使用flatbuffershttps://google.github.io/flatbuffers/flatbuffers_guide_tutorial.html

二、编写专ai模的schema文件

2.1、写下自己的需求

        在编写schema文件前,搞清楚对专ai模的期望,比如我想要大而全,而且扩展性好,能够一劳永逸的那种;可能你就想要小二美,对扩展性要求不高。每个人的要求不一样,写下要求期望后,再去编写schema文件将会高效而准确。

        下面我罗列自己的对专ai模的期望,用来指导自己编写schema文件。我对专ai模的要求:(1)扩展性好,也就是网络层的参数定义不写死;

(2)能够随意添加算子,特别是能够在代码中添加;

(3)写好schema后,后续不需要更改,就可以适配任何算子和模型。

2.2、正式编写

        为了减少文章篇幅,我无法展开说明,也按照上述的monster.fbs的实际含义的那种注解方式来进行讲解。大家有兴趣可以帮我看看是否存在某些遗漏之处,或者是需要更改的地方,欢迎指正。

namespace PzkModel;

attribute "priority";
file_extension "pmodelmeta";
file_identifier "PZKM";

// 用来表示时间的类结构
table time{
    year:uint32 = 2099;
    month:uint8 = 12;
    day:uint8 = 29;
    hour:uint8 = 6;
    min:uint8 = 6;
    sec:uint8 = 6;
}

// 包含了大部分的数据类型,从bool到int32等16种类型
enum DataType: byte {
    INT32 = 0,
    BOOL = 1,
    INT4 = 2,
    UINT4 = 3,
    INT8 = 4,
    UINT8 = 5,
    INT16 = 6,
    UINT16 = 7,
    FP16 = 8,
    FP32 = 9,
    QSYMMEINT4 = 10, //quantize symmetry int4
    QSYMMEINT8 = 11, //quantize symmetry int8
    QASYMMEUINT4 = 12, //quantize asymmetry uint4
    QASYMMEUINT8 = 13, // quantize asymmetry uint8
    UINT32 = 14,
    CHAR = 15,
}
// 表示运行时的张量是否是常量,也就是是否是权重还是实时数据
enum TensorType: byte {
    CONST = 0,
    DYNAMIC = 1,
}
// 数据排布方式,目前有四种
enum DataLayout: byte {
    NCHW = 0,
    NHWC = 1,
    ND = 2,
    NCD = 3,
}
// 张量的维度信息
table TensorShape{
    dimsize:ubyte;
    dims:[uint32];
}
// 权重数据
table Weights{
    ele_bytes:ubyte=0;
    ele_num:uint64=0;
    buffer:[ubyte];
}
// 张量,内部的成员包含了上面的类型
table Tensor{
    id:uint32;//张量id,也就是唯一的标识符
    name:string;
    tesor_type:TensorType;
    data_type:DataType;
    data_layout:DataLayout;
    shape:TensorShape;
    weights:Weights;
}
// 单个属性,可以用来描述类似与卷积的核大小或者步长等属性信息
table AttrMeta{
    key:string;
    require:bool = false;
    buffer_data:DataType;
    buffer_ele_num:uint32;
    buffer:[ubyte];
}
// 属性集,用来描述一个层的所有属性,拿卷积来说,就是包含了核大小、步长、成组信息等所有属性。
table Attributes{
    type:string;
    meta_num:uint32;
    meta_require_num:uint32;
    buffer:[AttrMeta];
}
// 连接信息,用来描述层和张量的连接关系。
table Connect{
    name:string;
    necessary:bool = false;
    tensor_id:uint32;
}
// 层描述,包含了上述的必要信息
table Layer{
    id:uint32;
    name:string;
    type:string;
    input_num:ubyte;//输入张量的个数
    output_num:ubyte;//输出张量的个数
    input_id:[Connect];
    output_id:[Connect];
    require_attrs:bool = false;
    attrs:Attributes;//层属性集合
}


// 模型描述,是最主要的数据结构,包含了所有的张量描述和所有的层描述、连接关系,以及附属信息
table PModel{
    author:string;//模型作者
    create_time:time;//模型创造时间
    version:string;//模型版本号
    model_name:string;//模型名称
    model_runtime_input_num:uint32;//模型输入个数
    model_runtime_output_num:uint32;//模型输出个数
    model_runtime_input_id:[uint32];
    model_runtime_output_id:[uint32];
    all_tensor_num:uint32;
    tensor_buffer:[Tensor];//所有的张量
    layer_num:uint32;
    layer_buffer:[Layer];//所有的层
}

root_type PModel;

  2.3、schema文件如上编写的意图

        根据2.1中我的需求就可以,我不可能在schema中直接写一个卷积应该怎么描述,有那些参数,因为这样只会让我陷入不断地修改卷积的table描述,这会让我的专ai模失去拓展性;也会增加工作量;甚至我们需要想到可能不久卷积又会增加新属性,那么又要修改schema文件,那么跟我的“一劳永逸”的期望就背道而驰了。

        因此,我在schema文件中描述的都是通用的层描述和张量描述,任何的网络层都可以写成上述的schema文件中的table Layer表示,我将会在下面使用我所定义的Layer来实例描述一个卷积层的描述,来说明一下这份schema的泛化性:

    {
      id: 0,
      name: "conv2d-index-1",
      type: "\"Convolution2dLayer\"",
      input_num: 3,
      input_id: [
        {
          name: "\"input\"",
          necessary: true
        },
        {
          name: "\"weights\"",
          necessary: true,
          tensor_id: 1
        },
        {
          name: "\"biases\"",
          necessary: true,
          tensor_id: 2
        }
      ],
      output_num: 1,
      output_id: [
        {
          name: "\"conv2d-output\"",
          necessary: true,
          tensor_id: 3
        }
      ],
      require_attrs: true,
      attrs: {
        type: "\"Convolution2dLayer\"-Attrs",
        meta_num: 2,
        meta_require_num: 2,
        buffer: [
          {
            key: "\"kernel_size\"",
            require: true,
            buffer_data: "CHAR",
            buffer: [12]
          },
          {
            key: "\"pad\"",
            require: true,
            buffer_data: "CHAR",
            buffer: [1]
          }
        ]
      }
    }

        上述的这个文件就是基于我的table Layer来定义的一个卷积层,可以完美地表示任何的一个层。因此这份schema基本上达到了我的需求和目的。

        后续:如何基于专ai模来生成自己的第一个模型文件,尽情期待。

AI:人工智能中常用的xml、hdf5、dat等不同模型文件后缀文件的简介、使用方法之详细攻略 什么是 XML?XML 指可扩展标记语言(EXtensible Markup Language) XML 是一种标记语言,很类似 HTML XML 的设计宗旨是传输数据,而非显示数据 XML 标签没有被预定义。您需要自行定义标签。XML 被设计为具有自我描述性。XML 是 W3C 的推荐标准。在人脸识别中,Haar特征分类器就是一个XML文件,不同的xml文件,就是不同的分类器,描述人体不同部位的Haar特征值。包括人脸、眼睛、嘴唇等等。1、没有任何行为的 XMLXML 是不作为的。 阅读详情

相关推荐

吴恩达Deep Learning.ai 序列化模型作业及文件

压缩文件太大,这里仅提供云盘下载链接和提取码。文件包含作业代码和所有图片和模型文件,每周习题,所需数据。

chat-ai 输出代码样式格式化错误

原因:可能是由与marked.js版本存在问题导致,原来是3.x的时候,由于生成的数据不会被p标签包围,导致展示过程中是不是被代码框包裹。后续在升级为v5.0.4 成功的避免了该问题。在搞一个简单的ai聊天机器人,发现输出的代码样式存在问题,要么不能正常格式化,要么格式化样式存在问题。问题1:输出代码过程中时不时解析有时被错误的pre标签包裹。问题2:输出叠加在1行,没有展现效果,效果差。

lswandt博客 371

个人信息保护合规审计人员(中级)能力测试试卷

本文是关于个人信息保护合规考试的试题解析,内容涵盖《个人信息保护法》相关规定。试卷包含单选题、多选题、判断题、简答题和案例分析题五种题型,总分100分,考试时间120分钟。试题重点考察个人信息处理的基本原则、敏感个人信息处理要求、合规审计流程、个人信息保护影响评估等内容。通过案例分析题详细解析了人脸识别登录、数据共享、跨境传输等场景下的合规要求。参考答案均严格依据《个人信息保护法》等法律法规,为个人信息处理活动提供了明确的合规指引。

qq_41525079的博客 849

AI 模型格式大揭秘

和 HashTable 的区别,假如发⽣了 hash 碰撞,如何设计能让遍历效率⾼?8.volatile的作⽤,为什么会出现变量读取不⼀致的情况,与 synchronized 的区别?13.讲讲 Java 的泛型擦除,泛型主要是为了解决什么问题?如何⽤泛型做 Json 的解析的?14.谈谈 Java 的 Error 和 Exception 的区别联系。重写的规则是怎样的?20.十亿条淘宝购买记录,怎么获取出现最多的前十个?3.讲一下JVM虚拟机内存结构,以及它们的作⽤。15.说一下软引⽤和弱引⽤的区别?

2401_89221867的博客 1531

机器学习中正则化项L1和L2的直观理解

正则化(Regularization) 机器学习中几乎都可以看到损失函数后面会添加一个额外项,常用的额外项一般有两种,一般英文称作ℓ1ℓ1\ell_1-norm和ℓ2ℓ2\ell_2-norm,中文称作L1正则化和L2正则化,或者L1范数和L2范数。 L1正则化和L2正则化可以看做是损失函数的惩罚项。所谓『惩罚』是指对损失函数中的某些参数做一些限制。对于线性回归模型,使用L1正则化的模型建叫做...

小平子的专栏 43万+

【ue4】【新手入门】|静态网格模型碰撞设置和合并Actor(合并静态网格体)

上一期学到把构建好的房子模型变成一个静态网格体(也是一个模型)但是静态网格体是没有碰撞的 所以要给这个模型设置碰撞。

m0_63501513的博客 4420

解决由于历史原因解析tflite失败的问题

最开始的时候,tflite 认为 `opcode` 不会超过 256 个,所以使用了 `u8` 来存储。后来就超过了 256 个,改成 `int` 来存储。但是又不能直接改,所以搞了个巧妙的方式:如果 `opcode` 小于 256,那么还是用 `u8` 来存,但是大于 256 的就必须走新的 `field` 了。

ZhaoDongyu_AK47的博客 1808

YOLO26魔改神技:YOLO26引入SimAM(无参注意力):不增加网络参数的3D能量函数提点黑科技

文章摘要 2026年YOLO26模型发布引发边缘计算革命,但特定场景精度不足问题催生注意力机制改进需求。本文聚焦无参数注意力机制SimAM,基于神经科学理论通过3D能量函数直接计算神经元权重,实现零参数量提升模型性能。文章深度解析YOLO26四大创新架构,对比SimAM与传统注意力机制差异,并探讨其在YOLO26中的集成方案。研究显示,SimAM在不增加模型体积前提下显著提升mAP指标,特别适合边缘端部署。全文涵盖架构设计、代码实现、竞品对比、部署方案等维度,为轻量化视觉模型优化提供系统解决方案。

ZDQ58818的博客 272

AI中大模型的文件格式有哪些?

大模型。

本博客,博文仅代表个人操作经验,不能完全解决你的问题,仅供参考,佛系回复。 5357

C++ int转四字节数组

字节转换

我不是码农的博客~~~ 973

手游功耗优化:从猜想到硬核实测

功耗本质是“硬件在吃电”,要看电流/功率曲线,而不是只看帧率和温度;定量 = 有数字、有曲线、有对比能说“降了 15%”、“峰值从 7W 降到 5.5W”,而不是“我感觉凉快点”;工具方面:大厂会用外接功率仪 + 手机/芯片厂内部平台;平时也会用 Android/iOS/引擎自带的工具做趋势分析;流程上:选典型机型和场景 → 跑脚本采集 → 对齐 Profiler 数据 → 分析 CPU/GPU/网络谁在吃电;再通过版本对比、画质/帧率组合测试,指导配置和优化。这是一个。

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 175

你或许也想拥有专属于自己的AI模型文件格式-(1)

2021年前后,大量的推理框架和训练框架层出不穷;训练框架有较新的Pytorch、TensorFlow,和老的Caffe、Darknet等;推理框架中有各种国产的、开源的,特别是边缘设备上的框架Ncnn、Tengine等;另外,国产的CANN更是兼顾了训练和推理两方面。 但是,以上所有的框架基本是拥有一种专属于自己的模型文件。比如caffe由.prototxt和.caffemodel文件组成,darknet由.cfg和.weight文件组成,pytorch由.pt组成,te...

Pengcode的博客 1332

具身智能机器人算法控制研究进展综述

具身智能(Embodied Intelligence)作为人工智能与机器人学的交叉前沿领域,强调智能体通过物理身体与环境的持续交互涌现智能行为。近年来,随着基础模型(Foundation Models)、扩散策略(Diffusion Policy)、视觉-语言-动作(Vision-Language-Action, VLA)模型以及大规模机器人数据集(如Open X-Embodiment)的快速发展,具身智能机器人的算法控制范式正经历深刻变革。

VectorShift的博客 226

你或许也想拥有专属于自己的AI模型文件格式-(3)

如果读者没有阅读过前两篇,或者想要再次回顾,以下是对应的链接: 你或许也想拥有专属于自己的AI模型文件格式-(1)https://blog.youkuaiyun.com/Pengcode/article/details/121754272你或许也想拥有专属于自己的AI模型文件格式-(2)https://blog.youkuaiyun.com/Pengcode/article/details/121776674 前两篇文章,讲述了制作专属于自己的AI模型文件格式的初衷,写下了我们的需求,同时我们制定了...

Pengcode的博客 874

Vue2+OpenLayers动态绘制两个经纬度并计算距离(提供Gitee源码)

动态绘制两个经纬度并计算它们之间的距离。

黄团团的个人博客 365

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

你或许也想拥有专属于自己的AI模型文件格式(可视化篇)-(4)

可视化篇来了,一起来用netron实现自定义模型格式的可视化吧!

Pengcode的博客 1326

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

你或许也想拥有专属于自己的AI模型文件格式(推理部署篇)-(7)

距离上次的文章,已经有一个月之久了。要是再不继续推进,那么我17个粉丝又要催更了(纯属本人瞎说,实际情况是没人催更)。 今天就少扯皮了,直接开淦吧! 上次的文章中,说明了如何在C++代码中解析我们的专AI模模型文件格式,大概的思路无非和构建模型的时候是反着进行的。因为这份模型文件格式是完全由flatbuffers进行解析的,因此,解析的过程是一场清晰明了的。 而之所以解析模型文件,主要是这样我们就能够实现专AI模的跨平台传送,构建好的模型能够无差异地在各...

Pengcode的博客 2621

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

你或许也想拥有专属于自己的AI模型文件格式(推理部署篇)-(8)

《你或许也想拥有专属于自己的AI模型文件格式》这个系列,上一次的文章更新是2022-03-05,距今已经4个月之久了。主要是这段时间有其他的事情在忙,期间也在断断续续地在完善该推理框架的。而让我思绪卡死的地方就是整网的推理时事件依赖问题,这个问题主要是因为OpenCL的clEnqueueNDRangeKernel这个核函数推理函数的局限性问题(正文仔细说明)。本次的进展内容:本次文章的主要内容:目前的工程整体结构: 2、有向图重排网络层 2.1、重排的原因和目的 模型的网络层顺序是乱序的:我们自定义的模型

Pengcode的博客 775

你或许也想拥有专属于自己的AI模型文件格式(推理部署篇)-(6)

如果有新的观众,如有疑惑,请从《专ai模》这个专栏从头开始阅读。特别是想要彻底搞清楚深度学习中模型的起源,以及如何一步一步构建自定义模型格式的观众来说,除了可视化篇,前面的三章必须要仔细阅读。 而为什么我又有雅致来开启《推理部署篇》呢?主要原因是,目前个人野心有点大,想要从零构建一整套关于推理部署的工具链吧。也就是向着推理引擎的方向努力吧。特别是自从上次结束了《可视化篇》,总感觉意犹未尽。 因此,全新的篇章开启了,该篇章的文章数可能会控制在10篇以下吧。不...

Pengcode的博客 1054

你或许也想拥有专属于自己的AI模型文件格式(推理部署篇)-(9)

1、前言 本次的进展内容:本次文章的主要内容: 3、InferenceDebugByCpu调试推理接口 3.1、调用流程 具体的调用流程示例如下所示: 3.2、实现细节 具体的调用流程示例如下所示: 4、cpu_run调试推理部分如何从cl核函数转换 4.1、关于opencl的cl核函数说明 cl核函数内部遵循了C99编程语言标准,内部的代码跟C语言一致; cl核函数内部的逻辑只代表一个工作项的所有工作,具体的循环是靠外部调用clEnqueueNDRangeKernel函数时设置的globalWorkSi

Pengcode的博客 606

自研AI模型文件格式:从序列化原理到部署实战

AI模型文件格式是连接训练与部署的关键一环。标准格式如pth、h5虽通用,但面对跨端部署、增量训练等场景时,往往因序列化策略受限而难以满足结构化元数据、安全校验与高效加载等需求。理解格式设计的本质——内存张量与磁盘字节之间的序列化与读取策略,是构建可控模型制品的基础。通过魔数、版本号、头部索引、元数据区和校验和五要素,可以设计出兼顾安全性与随机读取能力的自有二进制格式;结合内存映射、对齐优化与版本兼容策略,能显著提升模型服务的加载效率与可维护性。这类自研格式在模型长期迭代、多方协作与端侧推理中尤为实用。本文

weixin_34079177的博客 216

面向AI的新文件格式Lance挑战传统Parquet

该格式的背后是She,他是用于数据操作和分析的pandas软件库的原始贡献者之一,现在是LanceDB的首席执行官兼联合创始人,该公司支持并开发该格式。“数据的布局方式不同,访问模式也发生了变化,因此我们保证了比Parquet更快的扫描速度,同时也保证了真正快速的随机访问,” She说。Iceberg也曾处于起步阶段,直到获得了包括某机构在内的供应商的支持,某机构已将这种表格式整合到其某存储桶中,并在包括某公司和另一公司在内的用户中广泛采用。Lance需要等待,看看它的论点是否能够以同样的方式引起共鸣。

codeshare1135的博客 470

2024国内超火的 8 款 AI 大模型,你用过哪几个?

2024国内超火的 8 款 AI 大模型,你用过哪几个?

Java癫疯的博客 4903

AI+大数据时代:如何从架构到生态重构时序数据库的价值?

在数据爆炸的ZB/YB时代,时序数据库(TSDB)面临四大核心挑战:海量数据写入、毫秒级查询响应、低成本归档存储以及高基数处理能力。Apache IoTDB作为专为工业物联网设计的原生时序数据库,凭借三大优势脱颖而出:1)独创TsFile格式实现92%压缩率,大幅降低存储成本;2)LSM-tree架构深度优化,有效应对工业场景中的乱序写入和高压负载;3)创新性"库内AI"能力,支持SQL直接调用时序预测模型。

攻城狮7号的博客 1万+

被AI干死or干AI?教您玩转12款超强国产AI大模型

近两年,一方面经济下行,内卷加速,失业率逐年提升;另一方面,AI技术迅猛发展并得到广泛应用,对于个人而言,掌握AI技术,特别是熟练玩转国产AI大模型,不仅是一个提升自我竞争力的途径,也是适应未来社会发展的重要能力。一下是12款超强国产AI大模型的简要介绍,涵盖了写作、对话、绘画、剪辑等多个领域,帮助您了解并玩转这些前沿技术带来的便利与创新。

2401_85375186的博客 1869

整理了 47 个 Python 人工智能库

Python 是人工智能(机器学习)的首选编程语言,它拥有众多模块,能完成人工智能开发的所有环节,没有任何一种语言使用起来如此顺手。今天就由我带着大家揭开人工智能的神秘面纱。 主页点击领取资料,等你一起来玩奥~ 今天给大家分享的是我用了将近3周的时间整理出来的 Python 人工智能学习的库,主要以核心库、机器学习库、深度学习库、分布式深度学习库、自然语言处理、计算机视觉、生物和化学库,这几个方面进行介绍。 Python 核心库 // 1.Numpy 库 ...

pythonandaiot的博客 1万+
上一篇: 你或许也想拥有专属于自己的AI模型文件格式-(1)
下一篇: 你或许也想拥有专属于自己的AI模型文件格式-(3)
慷仔
博客等级 码龄9年 88粉丝 46原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值