改神经网络模型的方法(1)

Bag of Tricks for Image Classification with Convolutional Neural Networks(2018)》,论文中以ResNet为例提出了一些简单的微调技巧,并且取得了一定的成果。且不说准确率如何,论文中除了分析准确率有着怎样怎样的提升之外,还关注了产生了额外开销,并且通过分析、实验量化了这些开销,这是值得肯定的(比那些不考虑开销,盲目微调,通过牺牲很多速度来提高那一点点准确率的论文,不知道要高到哪里去!)

先大致归纳一下改模型的一些trick:

1)针对网络宽度与深度,如ResNeXt

2)针对残差网络的一些skip方法,还有如FCN

3)类似U-net、segnet的对称非对称连接或多尺度方法

4)多支、分组卷积设计方法,如Siamese网络

5)利用注意力机制改进

6)引入动态网络改进

7)损失函数设计

8)卷积核(动态卷积核、随机卷积)、池化操作

.......(陆续补充)


以ResNet为例

原始的ResNet模型可以参考《经典的CNN分类架构 - ResNet | Hey~YaHei!》,其核心在于应用了shortcut(原文称为skip connection)技术使得深层网络也能够被有效训练,具体细节这里就不再赘述。

resnet_a

改进1:推迟下采样

该改进方法最初是在Torch上提出的,目前这一改进也已经被广泛地应用。
首先观察原始模型的下采样模块——

resnet_downsample


其PathA依次经过
1. 1x1的卷积,完成通道的收缩,并且步长为2以实现下采样
2. 3x3的卷积,通道数量不变,主要用于提取特征
3. 1x1的卷积,完成通道的扩张


其中第一个卷积用来作为下采样,所以步长设为了1——但你仔细想想会发现,核大小1x1、步长2的卷积会造成3/4的信息丢失!以6x6的特征图为例,如下图所示,只有红色部分的信息能够传递到下一层去,非红色部分均不参与卷积计算。

conv_k1s2

由此可见,在1x1的卷积层作下采样是不明智的,更好的做法是把下面1x1下采样过程(stride=2)放到3x3的这一层卷积,如下图所示,由于卷积核宽度大于步长,卷积核在移动过程中能够遍历输入特征图上的所有信息(甚至还能有重叠):(原文stride默认为1)

conv_k3s2

下采样模块就变为——

resnet_b_downsample

改进2:拆解大核卷积

如《卷积神经网络CNN - 卷积层(Conv) | Hey~YaHei!》所述,大核卷积层可以由多层小核卷积替代实现,这不仅可以减少参数,还能加深网络深度以增加网络容量和复杂度。
Inception也早在《Rethinking the Inception Architecture for Computer Vision(2015)》一文中对Inceptionv1做出改进,分别用三个和两个3x3卷积的级联去替代7x7和5x5的卷积
这一技巧同样适用于ResNet——

resnet_c_input

改进3:用平均池化替代1x1卷积做下采样

下采样模型的PathA和PathB都需要做下采样才能正确地加和,改进1只针对PathA做了改进,其实PathB也用了1x1的卷积做下采样。为此,论文《Bag of Tricks for Image Classification with Convolutional Neural Networks(2018)》用平均池化接替了PathB中的降采样工作:

resnet_d_downsample

实验结果

model_tweak_results


其中A、B、C、D分别代表原始、改进1、改进2、改进3的模型。

经过改进之后,最终的ResNet-50-D准确率提高了0.95%。但也不得不承认,以上的改进都增加了模型的运算复杂度,FLOPs增加了约13%,但实测速度只下降了3%。

<think>好的,现在我要处理用户的问题:MacOS上的虚拟机异常退出,并出现E_FAIL (0x80004005)错误代码。用户之前已经询问过类似的问题,我之前给出了关于VirtualBox的解决方案。现在用户再次提问,并且提到了Samba相关的引用,但看起来引用可能不太相关,用户的主要问题还是关于虚拟机的错误。 首先,我需要回忆之前给出的解决方案,确保这次回答不重复,同时补充更多细节。用户提到E_FAIL 0x80004005错误,这是VirtualBox常见的通用错误代码,可能由多种原因引起,比如权限问题、配置错误、兼容性等。 我需要先检查用户之前的问题和我的回答。用户之前的问题是关于VirtualBox异常退出,我提供了版本检查、SMC配置、显存调整等方法。现在用户可能已经尝试过这些步骤,但问题仍然存在,或者需要更深入的分析。 接下来,我需要分析E_FAIL错误的具体原因。根据经验,可能的原因包括虚拟机文件损坏、磁盘空间不足、权限问题、硬件加速设置不正确、网络配置冲突等。同时,用户的环境是MacOS,可能需要考虑MacOS特有的设置,比如系统完整性保护(SIP)、内核扩展权限等。 用户提供的引用是关于Samba配置中的Bad Uid问题,但用户的问题是关于虚拟机错误,可能用户误粘贴了引用内容,或者有其他意图。需要确认是否与当前问题相关,但看起来无关,所以可以忽略,除非用户特别说明。 接下来,我需要整理解决步骤: 1. 确认VirtualBox和Extension Pack的版本是否最新,特别是MacOS更新后可能需要更新VirtualBox。 2. 检查虚拟机配置,尤其是存储设置,如VDI文件路径是否正确,磁盘空间是否足够。 3. 检查系统权限,包括VirtualBox的权限设置,是否允许内核扩展。 4. 禁用硬件加速功能,如3D加速或嵌套分页,看是否解决问题。 5. 检查日志文件,具体路径可能在~/Library/VirtualBox/*.log,寻找具体的错误信息。 6. 重置虚拟机配置或创建新的虚拟机测试是否存在同样的问题。 7. 考虑宿主机的资源问题,如内存不足或CPU过热。 8. 可能涉及网络配置问题,如NAT设置冲突,尝试禁用网络适配器测试。 9. 检查是否有安全软件或防火墙干扰虚拟机的运行。 10. 如果所有方法无效,建议使用替代虚拟机软件如UTM或VMware Fusion。 需要确保回答结构清晰,步骤详细,并引用之前的解决方案中的相关部分,比如SMC配置、显存调整等。同时,要针对E_FAIL错误给出具体的解决方法,比如检查存储配置、权限等。 另外,用户可能没有提到的潜在问题,比如虚拟机文件损坏,可能需要使用VBoxManage命令修复或重新创建虚拟机。或者宿主机的某些服务冲突,比如Hyper-V或Docker,但在MacOS上可能不适用,不过需要确认是否有其他虚拟化工具在运行。 最后,生成相关问题,引导用户进一步排查,如如何导出和分析VirtualBox日志,如何调整虚拟机资源分配等。</think>针对macOS下虚拟机异常退出并出现$E\_FAIL\ (0x80004005)$错误的问题,请按以下优先级排查: --- ### 一、存储子系统修复(70%概率触发此错误) 1. **磁盘映像完整性验证** 执行以下命令检查VDI/VMDK文件: ```bash VBoxManage checkmediumdisk "/path/to/virtual_disk.vdi" --verbose ``` 若输出`VERR_VD_IMAGE_READ_ONLY`,需重新克隆磁盘: ```bash VBoxManage clonemedium disk "损坏文件.vdi" "新文件.vdi" --variant Fixed ``` 2. **文件权限重置** macOS系统更新可能破坏虚拟机目录权限: ```bash sudo chmod -R 755 ~/VirtualBox\ VMs/ sudo chflags -R nouchg ~/VirtualBox\ VMs/ ``` --- ### 二、硬件虚拟化配置 || 症状 | 解决方案 | |---|---|---| | **启动时立即报错** | VT-x/AMD-V被占用 | 关闭Docker/HyperKit:`killall -9 com.docker.hyperkit` | | **运行中随机崩溃** | 内存越界访问 | 添加:`VBoxManage modifyvm "VM名称" --pae off` | | **安装过程失败** | EFI固件冲突 | 强制使用Legacy BIOS: ```bash VBoxManage modifyvm "VM名称" --firmware bios ``` --- ### 三、深度日志分析 1. **提取错误上下文** 通过时间戳定位崩溃点: ```bash grep -C 50 '0x80004005' ~/Library/VirtualBox/*.log > error_dump.txt ``` 2. **典型错误模式对照表** | 日志关键词 | 根本原因 | 修复方案 | |---|---|---| | `VERR_PDM_DEVHLP_VERSION_MISMATCH` | 扩展包版本不匹配 | 完全卸载后重装VirtualBox[^1] | | `NS_ERROR_FAILURE (0x80004005)` | 显卡直通冲突 | 执行: ```bash VBoxManage modifyvm "VM名称" --graphicscontroller vmsvga ``` | `VINF_EM_TRIPLE_FAULT` | CPU指令集缺失 | 添加: ```bash VBoxManage modifyvm "VM名称" --cpu-profile "Intel Xeon X5482 3.20GHz" ``` --- ### 四、高级修复方案 **创建诊断快照**: ```bash VBoxManage debugvm "VM名称" dumpvmcore --filename=crash.dmg ``` 使用[VirtualBox Debugger](https://www.virtualbox.org/wiki/Debugging)分析内存转储文件: ``` vboxdbg -f crash.dmg -c "lm" # 列出加载的模块 vboxdbg -f crash.dmg -c "log all" # 导出完整日志 ``` --- ### 五、替代运行方案 若持续出现0x80004005错误,可尝试: 1. 使用RAW模式直接访问物理分区: ```bash VBoxManage internalcommands createrawvmdk -filename ~/VirtualBox\ VMs/MyVM/rawdisk.vmdk -rawdisk /dev/disk0s3 ``` 2. 切换至QEMU+libvirt架构: ```bash brew install qemu libvirt virt-install --name macOS_alt --memory 4096 --disk path=/path/to/ISO --os-variant macos1012 ``` --- ### 六、企业级解决方案 对于持续发生的E_FAIL错误,建议: 1. 在`/etc/vbox/networks.conf`中添加例外规则: ``` * 192.168.56.0/21 ``` 2. 启用内核调试模式: ```bash sudo sysctl -w kern.nvram.smc.skip=1 sudo kextload -b org.virtualbox.kext.VBoxDrv ``` --- --相关问题--: 1. 如何分析VirtualBox的VBox.log文件定位具体错误? 2. VirtualBox虚拟机出现VERR_PDM_DEVHLP_VERSION_MISMATCH错误如何解决? 3. 在macOS Monterey上运行VirtualBox需要注意哪些特殊配置? [^1]: VirtualBox官方文档指出扩展包版本必须与主程序完全匹配 [^2]: macOS系统更新会重置内核扩展授权状态 [^3]: 显存分配超过128MB可能引发图形子系统故障 [^4]: SMC设备密钥错误是导致苹果虚拟机崩溃的常见原因 [^5]: 新版Unlocker工具修复了TPM芯片模拟缺陷
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值