Tensorflow 将输入馈送到中间层,然后在keras中进行反向传播

Tensorflow 将输入馈送到中间层,然后在keras中进行反向传播,tensorflow,deep-learning,keras,backpropagation,multiview,Tensorflow,Deep Learning,Keras,Backpropagation,Multiview,我到处找了找,但找不到办法。 基本上,我想将输入输入输入到keras模型中的某个中间层,并希望对整个图形进行反向传播(即,包括中间层之前的层)。为了理解这一点,我请您参考论文“用于三维形状识别的多视图卷积神经网络”中提到的图 从图中可以看出,该特性在视图池层中是maxpooled的,然后结果向量被传递到网络的其余部分。 从论文中,他们进一步使用视图池功能进行反向传播 为了实现这一点,我尝试了一种简单的方法。我的模型中将不会有任何viewpooling层。我将脱机使用多个视图的功能,然后最大限度

我到处找了找,但找不到办法。 基本上,我想将输入输入输入到keras模型中的某个中间层,并希望对整个图形进行反向传播(即,包括中间层之前的层)。为了理解这一点,我请您参考论文“用于三维形状识别的多视图卷积神经网络”中提到的图

从图中可以看出,该特性在视图池层中是maxpooled的,然后结果向量被传递到网络的其余部分。 从论文中,他们进一步使用视图池功能进行反向传播

为了实现这一点,我尝试了一种简单的方法。我的模型中将不会有任何viewpooling层。我将脱机使用多个视图的功能,然后最大限度地利用这些功能。最后,聚合的特性将传递给网络的其余部分。然而,我不知道如何通过直接将输入传递到中间层来对整个网络进行反向传播


任何帮助都将不胜感激。谢谢

如果您有tensorflow模型的代码,那么这将非常简单。模型可能看起来像

def model( cnns ):

    viewpool_output = f(cnns)  
    cnn2_output = cnn2( viewpool_output )
    ... 
您只需将模型更改为

def model( viewpool_output ):

    cnn2_output = cnn2( viewpool_output )
    ... 

而不是传递“真实”的视图池输出,只需传递所需的任何图像。但是您没有给出任何代码,所以我们只能猜测它是什么样子

中间层是什么意思?从图中可以看出,CNN2之前的层是中间层。基本上,我将在CNN1之后获得特性,并对每个对象取最大值,最后,MaxPoolled特性将传递给CNN2。在该图中,CNN2的第一层是中间层Rok。我仍然不知道我是否理解你为什么要这样做。为什么不通过CNN1输入图像并像往常一样进行反向传播呢?因为我们必须对对象的所有视图使用最大池。基本上,视图池层对属于同一对象的图像使用maxpool。我明白你的意思。我试着做类似的事情。唯一的问题是如何分别保存模型viewpool_输出和cnn2_输出。由于在第一个模型定义中,如果打印模型摘要,则没有单独的实体作为viewpool_输出和cnn2_输出,因此它将是一个连续图形。因此,稍后当我想将viewpool_输出传递给cnn2时,我如何恢复后面的部分,以便在viewpool_输出之前对其进行训练时,cnn也会获得渐变。我希望你能理解我的观点。谢谢你的回复。顺便说一下,在viewpool之前没有多个CNN。它是同一个模型,多次用于获取每个视图的特征,然后将其最大化,以获得3d对象的最终表示。如果您只想在视图池后训练零件,但稍后将其添加回…1,这里有几个选项。您可以在视图池之后插入tf.stop_渐变,以便在对其进行训练之前不进行任何操作。对于视图池之前图层中的所有变量,可以设置trainable=False