C++ 网络重塑

C++ 网络重塑,c++,neural-network,deep-learning,caffe,deep-dream,C++,Neural Network,Deep Learning,Caffe,Deep Dream,我正试图在C++中在caffe中实现deepdream(我想在android中运行它)googlenet需要输入形状224*224*3。在deepdream的ipython笔记本中,它显示了src.reformate(1,3,h,w)。这是否意味着只有输入blob被重塑,或者它通过网络传播?我尝试在C++中调用net.reformate(),结果是: F0307 01:27:24.529654 31857 inner_product_layer.cpp:64] Check failed: K_

我正试图在
C++
中在
caffe
中实现
deepdream
(我想在android中运行它)
googlenet
需要输入形状
224*224*3
。在
deepdream
的ipython笔记本中,它显示了
src.reformate(1,3,h,w)
。这是否意味着只有输入blob被重塑,或者它通过网络传播?我尝试在
C++
中调用
net.reformate()
,结果是:

F0307 01:27:24.529654 31857 inner_product_layer.cpp:64] Check failed: K_ == new_K 
(1024 vs. 319488) Input size incompatible with inner product parameters.

网络不应该也被重塑吗?如果不是,那么重塑输入blob意味着什么?我对深度学习还不熟悉。所以请原谅我,如果这看起来很琐碎。

改变输入的形状需要重塑整个网络。遗憾的是,有些图层类型不喜欢被重塑。具体而言,“内部产品”层:内部产品层的可训练参数数量取决于精确的输入形状和输出形状。因此,具有“InnerProduct”层的网络无法重塑


您可以使用示例中描述的方法将内积层转换为等效的卷积层(可以重塑)。

我是否应该将重塑传播到相关层?在
googlenet
中,只有最后一层是内部产品层,为了实现deepdream,我只需要浏览一些接收层。我看到了
Net::Reformate()
的源代码,它只是在所有层中循环。为了deepdream的目的,我只前进到特定层,然后从该层向后。所以我觉得这很合理。你能解释一下为什么不能吗?@lnman你不能重塑网络的一部分,因为改变输入形状会影响整个网络。如果有不打算使用的层,只需将其删除:没有必要保留它们,也不必重新塑造它们。