之前整理过Matlab序列+序列、序列+图像双输入的网络,在本人闲鱼主页下都可以找到。近来发现,Matlab对于矩阵的输入好像是不太一样的。起初是想将序列+图像的网络中,直接把图像输入层改为通道1就可以,实际上是行不通的。这要归咎于这个arrayDatastore函数(在双输入网络中,序列和矩阵的数据都必须经过arrayDatastore转化,图像可以用imageDatastore函数)。
但方法总比困难多的,好在Matlab 2023之后的版本引入了3d卷积这个层(image3dInputLayer)。是的,用3d卷积是比较容易处理矩阵的,虽然这有些大材小用,但是方便第一。
网络:如下是本程序构建的网络,一端输入1x100的序列,一端输入100x100的矩阵。网络可以自己写代码构建,也可以用Matlab里的深度学习app搭积木。个人非常建议app搭积木,真的非常方便,app里搭完也可以导出成代码。
这个数据是直接rand生成的,在源代码里也有。为了区分两类样本,制造了些差异。因只是示例作用,数据弄得很简单。
数据:10条序列数据,1x100。10条矩阵数据,100x100。序列和矩阵一一对应,8条训练,2条测试。
在整理数据的时候是非常令人头疼的,稍有不慎就会报错:输入维度不匹配,网络期待的输入是什么什么样,