Caffe2 入门教程

Caffe2 入门教程Caffe2 概念 Caffe2 已经发布几个月了 但目前的使用率并不高 相关文档并不完善 与 Caffe 1 相比入门较难 本文主要讲解 Caffe2 的一些概念 由于本人也是新手 仅做参考 欢迎交流 Tutorials IntroTutoria Tensors 和 Caffe1 一样 Caffe2 也有 Blobs 并也代表着内存中的数据块 大多数的 blobs 中都含有 t

Caffe2 概念


Caffe2已经发布几个月了,但目前的使用率并不高,相关文档并不完善,与Caffe(1)相比入门较难。本文主要讲解Caffe2的一些概念,由于本人也是新手,仅做参考,欢迎交流。

Tutorials: Intro Tutorial

Blobs and Workspace, Tensors


和Caffe1一样,Caffe2也有Blobs,并也代表着内存中的数据块。大多数的blobs中都含有tensor,就像Tensorflow一样,可以简单视为一种多维数组,具体在python中被视为numpy arrays。

除了tensor还有workspace这一全新概念。下面举个例子,演示一下如何把blobs 添加到 workspace,并取出。Workspace会在你开始使用时初始化。

from caffe2.python import workspace, model_helper import numpy as np # 创建三维随机张量 x = np.random.rand(4, 3, 2) print(x) print(x.shape) # 将创建的tensor输入到Workspace中,命名为"my_x" workspace.FeedBlob("my_x", x) # 从Workspace中取出数据 x2 = workspace.FetchBlob("my_x") print(x2)

对比一下xx2,发现是一样的。

网络与操作符


  • 一个全连接层
    • Sigmoid activation with a Softmax
    • a CrossEntropy loss


直接组合网络是否乏味,因而最好使用一些有助于创建网络的模型助手。python中使用ModelHelper来帮助我们建立”my first net”网络。ModelHelper将创建两个相互关联的网络:

  1. 一个初始化参数 (ref. init_net)
  2. 一个运行实际的训练(ref. exec_net)
# 创建随机输入数据 data = np.random.rand(16, 100).astype(np.float32) # 创建随机标签 label = (np.random.rand(16) * 10).astype(np.int32) workspace.FeedBlob("data", data) workspace.FeedBlob("label", label)

我们创建一些随机的输入和输出,并且添加到Workspace中。

# 使用模型助手建立模型 m = model_helper.ModelHelper(name="my first net")

现在使用model_helper创建了我们之前提到的两个网络(init_netexec_net)。 在下面的模型中使用FC操作符添加一个全连接层,但首先我们需要做一些准备工作:创建FC操作符所期望的一些随机数作为权重。 接下来,我们可以添加操作,并使用我们创建的权重和偏差blobs。

weight = m.param_init_net.XavierFill([], 'fc_w', shape=[10, 100]) bias = m.param_init_net.ConstantFill([], 'fc_b', shape=[10, ])

在Caffe2中,FC操作符的输入为:数据、权重、偏置。权重和偏置分别使用XavierFillConstantFill初始化,输入为空数组、名称、形状。

fc_1 = m.net.FC(["data", "fc_w", "fc_b"], "fc1") pred = m.net.Sigmoid(fc_1, "pred") [softmax, loss] = m.net.SoftmaxWithLoss([pred, "label"], ["softmax", "loss"])

网络定义储存在protobuf中,可以通过net.Proto()查看:

print(str(m.net.Proto()))

输出为:

name: "my first net" op { input: "data" input: "fc_w" input: "fc_b" output: "fc1" name: "" type: "FC" } op { input: "fc1" output: "pred" name: "" type: "Sigmoid" } op { input: "pred" input: "label" output: "softmax" output: "loss" name: "" type: "SoftmaxWithLoss" } external_input: "data" external_input: "fc_w" external_input: "fc_b" external_input: "label"

你也可以查看参数初始网络:

print(str(m.param_init_net.Proto()))

输出为:

name: "my first net_init" op { output: "fc_w" name: "" type: "XavierFill" arg { name: "shape" ints: 10 ints: 100 } } op { output: "fc_b" name: "" type: "ConstantFill" arg { name: "shape" ints: 10 } } 

执行


workspace.RunNetOnce(m.param_init_net)

注意,像往常一样,这将实际上将param_init_net的protobuf下载到C ++运行。
然后我们创建实际的训练网络:

workspace.CreateNet(m.net)

我们创建一次,然后我们可以有效地运行它多次:

# 运行 100 x 10 次迭代 for j in range(0, 100): data = np.random.rand(16, 100).astype(np.float32) label = (np.random.rand(16) * 10).astype(np.int32) workspace.FeedBlob("data", data) workspace.FeedBlob("label", label) workspace.RunNet(m.name, 10) # 运行10次

反向传播


这个网只包含正向传播,所以没有学习任何东西。反向传播是通过在正向传播中为每个运算符创建梯度运算符而创建的。

在调用RunNetOnce()之前插入以下内容:

m.AddGradientOperators([loss])

检查protobuf的输出:

print(str(m.net.Proto()))

本文只是简单翻译一下官方教程,涉及内容不多,以后会尝试更多的功能。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/205460.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午5:59
下一篇 2026年3月19日 下午5:59


相关推荐

  • 一个架构师谈什么是架构以及怎么成为一个架构师

    一个架构师谈什么是架构以及怎么成为一个架构师新年新事 来点轻松的话题 我们调剂一下后再继续讲 CASSSO 单点登录吧因为后面的内容全部和代码有关 大家会觉得枯燥 所以今天我们先来点 番外篇 讲讲什么是架构师 什么是架构这个永恒的话题吧 此篇源出自我在公司内部写的一个 PPT 它是用于在公司内部向广大技术人员做普及用的一个资料 而 CSDN 这边的编辑不支持图文混排的效果 因此一些章节我就直接截取自我的 PPT 里的内容了 这样可能对大家在阅读上会显

    2026年3月17日
    2
  • WinHTTP如何处理Cookie

    WinHTTP如何处理CookieCookieHandlinginWinHTTPHTTPsessiondataispassedbetweentheclientandserverinthecookieheaderoftherequestortheresponse.TheserversendscookiestotheclientintheSet-cookiehe

    2022年7月11日
    22
  • 论龙虾(OpenClaw)之火

    论龙虾(OpenClaw)之火

    2026年3月13日
    2
  • Win10 CMD命令大全—超好用快捷键

    Win10 CMD命令大全—超好用快捷键一、WindowsCMD命令大全1、按组合键Win(Windows图标键)+R键打开运行窗口,输入“cmd”按回车即可打开cmd命令提示符2、在窗口右击选择属性可进行个性化设置~命令功能1、calc启动计算器2、appwiz.cpl程序和功能3、certmgr.msc证书管理实用程序4、charmap启动字符映射表5、chkdsk.exeChkdsk磁盘检查(管理员身份运行命令提示符)6、cleanmgr打开磁盘清理工具7、

    2022年5月17日
    878
  • efishell无法开机shell_efishell 开机出现efi shell卡住不动了解决方法全集「建议收藏」

    efishell无法开机shell_efishell 开机出现efi shell卡住不动了解决方法全集「建议收藏」[文章导读]最近有很多网友问我,为什么我的电脑开机后出现efishell提示进不了系统,开机出现efishell提示时,一般是由于第一启动项设置的是efishell启动的,有的网友告诉我,我第一启动项明明设置的是硬盘启动,当然还有一种情况就是前面的启动项都无法加载,然后按启动顺序启动,然后就启动到efishell了,出现这种情况一般就是系统引导破坏或是找不到引导项了。那么怎么找到原并解决…

    2022年7月24日
    40
  • LTE学习笔记五:LTE两种帧结构

    LTE学习笔记五:LTE两种帧结构上 下行信息如何复用有限的无线资源 这是所有无线制式必须考虑的双工技术问题 以往的无线制式要么支持时分双工 TDD 要么支持频分双工 FDD 而 LTE 标准即支持 TDD 又支持 FDD 分别对应着不同的帧结构设计 1 两种双工模式 LTE 支持两种双工模式 TDD 和 FDD 于是 LTE 定义了两种帧结构 TDD 帧结构和 FDD 帧结构 LTE 标准制定之初就充分考虑了 TDD 和 FDD 双工方式在实现中的异

    2026年3月18日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号