ConvLSTM Pytorch学习笔记(一)

上周主要工作是跑通ConvLSTM网络,原先找到的代码是基于pytorch的,但是在调试的过程中遇到了几个问题,内存不够,后来换服务器跑也跑不通,考虑代码本身问题,后来尝试了一下基于Keras的ConvLSTM网络,发现接受一个新网络和新的代码形式更痛苦(调了两天左右,问题一直停留在数据集加载的问题),而且问题更多,于是决定继续回归基于pytorch。 在调试过程中,遇到以下几个问题:  

问题一:得不到想要的输出

在经过图片维度调整之后可以得到上述这样的结果,发现第一列对应的结果不对劲,按理说应该是batch_size的值,但得到的记过确实步长(这里步长表示图片帧数,由于只有一张图片,因此为1。),回溯后发现问题出在构建网络的时候batch_first=True,这里由于输入图片的时候不是将其放置在第一位,为此将这个值改成False。 但是到底哪个才是最终的输出呢,又重新回过头看了一遍传统LSTM、卷积ConvLSTM网络的定义,发现了一个点,在经过LSTM和卷积ConvLSTM网络后得到的是最后一层的隐藏层h的输出结果,这并不能得到我们想要的分类结果,为此需要在网络的最后添加一个全连接层,进一步做维度变换,从而得到想要的分类结果。 LSTM输出的向量的维度是指定的units,但是最后在计算损失的时候是用的标签,标签也是向量,但是标签的向量维数和units不一致,这样就没有办法计算损失了,所以要加一个Dense将输出的向量转换成标签向量的维度,这样就可以计算损失了。如下图所示,一个完整的神经网络流程大概是这样的。   网络已经调通了,证明这个代码是可行的,但是问题是还得不到分类的结果。

问题二:得到的输出维度不对

继续前进,我要把分类结果弄出来。  

具体的问题是出在,从ConvLSTM网络得到的输出结果无法直接与全连接层相连,所以需要将输出的张量降维处理得到目标张量,由于经过ConvLSTM得到的结果是一个四维的张量,所以运用pytorch的骚操作h[:,-1,-1,:]将其中的两维删掉,通过这样处理之后就可以了,网络继续运行。

问题三:得到的结果不对

成功了可以正常运行了,但是问题是解决不完的。准确率居然一直都徘徊在24%,这这这一定是出了点什么毛病。猜想是网络的输出我对应错了,所以这里我要回归一下输出的数据与传统的LSTM网络的输出结果相比对,尽量靠紧一点。

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值