【05】caffe中通道运算的分分合合

在caffe中有时候会涉及到通道的间的运算,比如通道的拆分、合并、相互运算等,下面介绍这几种分别在prototxt文件和py文件中的实现方法。

# Sclice层实现拆分合并
layer
{
    name:"data_s"
    type:"Slice"
    top:"a"
    top:"b"
    top:"c"
    slice_param
    {
        axis:0
        slice_point:20 # 第一个拆分的通道数
        slice_point:30 # 第一个与第二个的和
    }
}

layer
{
    name:"data_all"
    type:"Concat"
    bottom:"a"
    bottom:"b"
    bottom:"c"
    top:"d"
    concat_param
    {
        axis:0
    }
}

# Eltwise实现拆分合并
# c = L.Eltwise(a, b)
layer
{
    name:"eltwise1"
    type:"Eltwise"
    bottom:"A"
    bottom:"B"
    top:"C"
    eltwise_param{
        operation:SUM # PRODUCT, MAX
        coeff: 1
        coeff: -1
    }
}

from caffe import params as P
import caffe.draw
from caffe.proto import caffe_pb2
from google.protobuf import text_format

# 配置文件路径和文件名
path = ""
net_file = path + "concat_slice_py.prototxt"


def concat_slice_net():
    n = caffe.NeeSpec()
    n.data = L.DummyData(
        dummy_data_param=dict(num=20, channels=50, height=64, width=64, data_filter=dict(type="gaussian")))
    n.a, n.b, n.c = L.Slice(n.data, ntop=2, slice_point=[20, 30], axis=0)
    n.d = L.Concat(n.a, n.b, axis=0)
    n.e = L.Eltwise(n.a, n.c)
    return n.to_proto()


def draw_net(net_file, jpg_file):
    net = caffe_pb2.NetParameter()
    text_format.Merge(open(net_file).read(), net)
    caffe.draw.draw_net_to_file(net, jpg_file, "BT")


with open(net_file, 'w') as f:
    f.write(str(concat_slice_net()))

draw_net(net_file, "a.jpg")

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值