# 基于Keras的关联神经网络CorrNet综合指南

CorrNet 示意图。尝试学习两种数据视图的共同表示，并且从该编码表示重构两种视图。

I』a = g(W』a.H+b』)，I』v = g(W』vH+b』)。

• 最小化自重建误差，也就是将 Ia 到 Ia 和 Iv 到 Iv 重建的误差最小化。
• 最小化交叉重建误差，也就是将 Iv 到 Ia 和 Ia 到 Iv 重建的误差最小化。
• 最大化两个视图的隐藏表示之间的相关性，也就是最大化 Ha 和 Hv 之间的相关性。

CorrNet 实现

```from *keras *import  *Model*
from *keras.layers import  Input,Dense,concatenate,Add*
from *keras *import backend as *K,activationsfrom tensorflow*
import *Tensor *as Tfrom* keras.engine.topology*
import *Layer*
import numpy as *np*```

```class *ZeroPadding*(Layer):
def *__init__*(self, **kwargs):
super(ZeroPadding, self).__init__(**kwargs)

def *call*(self, x, mask=None):
return K.zeros_like(x)

def *get_output_shape_for*(self, input_shape):
return input_shape

#inputDimx,inputDimy are the dimentions two input modalities

inpx = *Input*(*shape*=(inputDimx,))
inpy = *Input*(*shape*=(inputDimx,))

*#Encoder*
hl = *Dense*(hdim_deep,*activation*='relu')(inpx)
hr = *Dense*(hdim_deep,*activation*='relu')(inpy)
h =  Add()([hl,hr])

*#Common representation/Encoded representation

**#decoder
*recx = *Dense*(inputDimx,activation='relu')(h)
recy = *Dense*(inputDimy,activation='relu')(h)
*CorrNet* = *Model*( [inpx,inpy],[recx,recy,h])

*CorrNet*.summary()
'''we have to create a separate model for training this *CorrNet*
As during training we have to take gradient from 3 different loss function and which can not be obtained from signle input.If you look closely to the loss function,
we will see it has different input parameter'''

[recx0,recy0,h1] = *CorrNet*( [inpx, inpy])
[recx1,recy1,h1] = *CorrNet*( [inpx, ZeroPadding()(inpy)])
[recx2,recy2,h2] = *CorrNet*( [ZeroPadding()(inpx), inpy ])

H= *concatenate*([h1,h2])

*model* = Model( [inpx,inpy],[recx0,recx1,recx2,recy0,recy1,recy2,H])```

```model.*compile*(*loss*=[square_loss,square_loss,square_loss,  square_loss,square_loss,square_loss,correlationLoss],*optimizer*="adam")
model.*summary*()
'''
Suppose you have already prepared your data and kept one moadlity data in Ia(e.g. Audio) and another in Iv( e.g. Video).To be used by this model Audios and videos must be converted into 1D tensor.
'''
model.*fit*([Ia,Iv],[Ia,Ia,Ia,Iv,Iv,Iv,np.ones((Ia.shape[0],Ia.shape[1]))],nb_epoch=100)
'''
*np.ones((Ia.shape[0],Ia.shape[1]))* is fake tensor that will be   passed to *correlationLoss *function but will have no use
using this model we can generate Ia to Iv.For example, from video Iv we can generate corresponding audio Ia
np.zeros(Ia.shape) gives tensors of 0 of dimestions same as output tensor *audio*
'''

*audio*,_,_ = *CorrNet.*predict([np.zeros(Ia.shape),Iv])```

✄------------------------------------------------

0 条评论

• ### 点云深度学习系列二： PointCNN

从前一层的数据中取K个候选点(p1,p2,...pK)，使用MLP(多层感知器)来学习一个K×K 的变换矩阵（X-transformation，X...

• ### PointNet：三维点云分割与分类的深度学习

本文是关于PointNet点云深度学习的翻译与理解，PointNet是一种直接处理点云的新型神经网络，它很好地体现了输入点云的序列不变性。

• ### 机器学习-线性回归预测房价模型demo

从给定的房屋基本信息以及房屋销售信息等，建立一个回归模型预测房屋的销售价格。 数据下载请点击：下载，密码：mfqy。

• ### 【AI in 美团】深度学习在美团搜索广告排序的应用实践

AI（人工智能）技术已经广泛应用于美团的众多业务，从美团App到大众点评App，从外卖到打车出行，从旅游到婚庆亲子，美团数百名最优秀的算法工程师正致力于将AI技...

• ### 随机森林--你想到的，都在这了

Bagging是bootstrap aggregating。思想就是从总体样本当中随机取一部分样本进行训练，通过多次这样的结果，进行投票获取平均值作为结果输出，...

• ### PointNet分享_1

这类方法首先在三维形状上提取手工特征， 进而将这些特征作为深度神经网络的输入，用以学习高层特征表示。其优势在于可以充分利用现有的低层特征描述深度...

• ### 点云深度学习的3D场景理解（下）

本文主要是关于 pointNet，pointNet++，frustum point 的一些整理和总结，内容包括如何将点云进行深度学习，如何设计新型的网络架构，如...

• ### 好记忆的机器学习面试--决策树

其实用一下图片能更好的理解LR模型和决策树模型算法的根本区别，我们可以思考一下一个决策问题：是否去相亲，一个女孩的母亲要给这个女海介绍对象。

• ### 融合机器学习模型：一种提升预测能力的方法

幸运的是，结合/融合/整合 (integration/ combination/ fusion)多个机器学习模型往往可以提高整体的预测能力。这是一种非常有效的提...

• ### 《机器学习》(入门1-2章)

这篇笔记适合机器学习初学者，我是加入了一个DC算法竞赛的一个小组，故开始入门机器学习，希望能够以此正式进入机器学习领域。 在网上我也找...