【PyTorch细节】卷积后的bias什么时候加,什么时候不加

我们在进行写代码的时候,有时候会发现有的m = nn.Conv2d(16, 33, 3, stride=2,bias=False) ,biasFalse,而默认的是True。为啥呢?是因为一般为False的时候,nn.Conv2d()后面通常接nn.BatchNorm2d(output)
是因为BN里面有一个关键操作,
在这里插入图片描述
其中x1 = x0 * w0 + b0,而E[x1] = E[x0*w0] + b0, 所以对于分子而言,加没加偏置,没有影响;而对于下面分母而言,因为Var是方差操作,所以也没有影响(为什么没影响,回头问问你的数学老师就知道了)。所以,卷积之后,如果要接BN操作,最好是不设置偏置,因为不起作用,而且占显卡内存。

### 双流卷积神经网络(Two-Stream Convolutional Network)的 PyTorch 实现 双流卷积神经网络是一种经典的架构,旨在通过空间和时间信息分别捕捉静态图像特征和动态运动特征来完成视频中的动作识别任务。以下是基于 PyTorch 的实现方法。 #### 架构概述 双流卷积网络由两个分支组成:一个是处理 RGB 图像的空间流(Spatial Stream),另一个是处理光流(Optical Flow)的时间流(Temporal Stream)。这两个分支可以共享相同的 CNN 结构,但在输入数据上有所不同[^4]。 #### 数据准备 为了训练双流模型,需要准备两种类型的数据: 1. **RGB 帧**:作为空间流的输入。 2. **光流帧**:表示连续帧之间的像素位移,通常计算水平和垂直方向上的光流场[^5]。 可以通过 OpenCV 或其他工具生成光流序列并保存为图片文件以便载到 PyTorch 中。 #### 模型定义 下面是一个简单的双流卷积网络的 PyTorch 定义: ```python import torch.nn as nn import torchvision.models as models class TwoStreamCNN(nn.Module): def __init__(self, num_classes=101): # Assuming UCF-101 dataset with 101 classes super(TwoStreamCNN, self).__init__() # Load pre-trained ResNet model for spatial stream resnet_spatial = models.resnet18(pretrained=True) self.spatial_stream = nn.Sequential(*list(resnet_spatial.children())[:-1]) # Remove last FC layer # Load pre-trained ResNet model for temporal stream and modify input channels to handle optical flow images resnet_temporal = models.resnet18(pretrained=True) resnet_temporal.conv1 = nn.Conv2d(20, 64, kernel_size=7, stride=2, padding=3, bias=False) # Adjusted for stacked optical flows self.temporal_stream = nn.Sequential(*list(resnet_temporal.children())[:-1]) # Fully connected layers combining both streams' outputs self.fc = nn.Linear(512 * 2, num_classes) def forward(self, rgb_frames, optical_flow_frames): spatial_out = self.spatial_stream(rgb_frames).view(rgb_frames.size(0), -1) temporal_out = self.temporal_stream(optical_flow_frames).view(optical_flow_frames.size(0), -1) combined = torch.cat((spatial_out, temporal_out), dim=1) out = self.fc(combined) return out ``` 上述代码中,`resnet18` 被用作基础骨干网络,并针对时间流调整了第一个卷积层以接受堆叠的光流图像作为输入。 #### 训练脚本配置 在实际部署时,需编写 shell 脚本来控制 GPU 使用情况以及调用 Python 脚本执行训练过程。例如,在 `trainTwoStreamNet.sh` 文件中可入以下命令设置特定 GPU 进行训练: ```bash #!/bin/bash export CUDA_VISIBLE_DEVICES=0 # Specify the GPU index here python train_two_stream.py --data_path /path/to/dataset --model_save_path /path/to/save/model ``` 其中,`CUDA_VISIBLE_DEVICES` 参数决定了程序运行所使用的显卡编号。 #### 总结 以上展示了如何利用 PyTorch 来构建一个基本版本的双流卷积神经网络。具体细节可能依据不同应用场景有所变化,比如更复杂的融合策略或者更深的基础网络结构等。 ---
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gorgeous(๑>؂<๑)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值