【问题标题】:How to write a net with a Memory Data Layer using pycaffe?如何使用 pycaffe 编写带有内存数据层的网络?
【发布时间】:2016-11-22 22:38:35
【问题描述】:

可以在pycaffe中使用hdf5数据层从以下几行编写caffe prototxt:

import caffe
from caffe import layers as L

def logreg(hdf5, batch_size):
    n = caffe.NetSpec()
    n.data, n.label = L.HDF5Data(batch_size = batch_size, source = hdf5, ntop = 2)
    n.ip1 = L.InnerProduct(n.data, num_output = 2, weight_filler = dict(type='xavier'))
    n.accuracy = L.Accuracy(n.ip1, n.label)
    n.loss = L.SoftmaxWithLoss(n.ip1, n.label)
    return n.to_proto()

with open('models/logreg_auto_train.prototxt', 'w') as f:
    f.write(str(logreg('data/train.txt', chunck_size)))

有没有可能用类似的方法写一个有内存数据层的prototxt?

【问题讨论】:

    标签: caffe pycaffe


    【解决方案1】:

    试试这样的:

    import caffe
    from caffe import layers as L
    
    def logreg(height, width, channels, batch_size):
        n = caffe.NetSpec()
        n.data = L.MemoryData(batch_size = batch_size, height = height, width = width, channels = channels)
        n.ip1 = L.InnerProduct(n.data, num_output = 2, weight_filler = dict(type='xavier'))
        return n.to_proto()
    
    with open('models/logreg_memdata.prototxt', 'w') as f:
        f.write(str(logreg(128,128,3, chunck_size)))
    

    【讨论】:

    • 谢谢,我必须保留n.label 声明,以便能够以简单的方式加载从以前模型中学到的权重。那不应该改变什么吧?
    • 嗯,我看不出在n.label 中加载会有什么影响,但我很惊讶它是必需的。您是否正在使用这个新网络进行更多培训?
    • 有没有一种简单的方法来设置不同层结构的权重?我确实没有将它用于训练,以这种方式设置权重很简单
    • 当我将网络从训练切换到部署时,我可以删除我的 AccuracySoftmaxWithLoss 层,然后替换我的 带有 MemoryData 的数据 层(我使用 leveldb 而不是 HDF5)。我从使用旧网络训练的*.caffemodel 将权重加载到新网络中没有问题。
    • 什么是L变量?
    猜你喜欢
    • 2016-05-27
    • 1970-01-01
    • 2018-06-11
    • 2012-08-27
    • 2017-12-19
    • 2018-08-26
    • 1970-01-01
    • 2013-04-10
    • 1970-01-01
    相关资源
    最近更新 更多