2017-03-06 76 views
1

我想在C++caffe(我想在android中运行它)实施deepdreamgooglenet需要输入形状224*224*3。在deepdream的ipython笔记本中,它显示src.reshape(1,3,h,w)。这是否意味着只有输入blob被重新塑造或者通过网络传播?我试图调用C++net.Reshape(),它导致:Caffe ::净重塑

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的含义是什么?我是深入学习的新手。所以请原谅我,如果它看起来微不足道。

回答

1

改变输入的形状需要整形网的整形。唉,有一些图层类型不喜欢重新塑造。具体而言,“InnerProduct”层:内部产品层的可训练参数的数量取决于输入形状和输出形状。因此,具有“InnerProduct”层的网络不能被重新塑造。

您可以使用"net surgery"示例中描述的方法将内积图层转换为等效的卷积图层(可以重新定形)。

+0

我应该只是重塑相关图层吗?在'googlenet'中,只有最后一层是内层产品,为了深层次的目的,我只需要通过一些初始层。 – lnman

+0

@lnman你不能重塑网的一部分 – Shai

+0

我看到'Net :: Reshape()'的源代码,它只是循环遍历所有的图层。为了深层次的目的,我只转发到特定层,并从该层向后。所以对我来说似乎是合理的。你能详细说明为什么不呢? – lnman