Matconvnet 空洞卷积导致维度错误以及vl_smplenn.m文件修改

2 篇文章 0 订阅
1 篇文章 0 订阅

MATLAB下使用matconvnet框架,使用空洞卷积时,可能会出现以下错误:

错误使用  - 
矩阵维度必须一致。

出错 Demo_denoising_gray (line 80)
        output = input - res(end).x;

错误的原因在于vl_smplenn.m没有添加空洞卷积。需要进入matconvnet的框架内部,修改vl_smplenn.m。解决方案如下:

  1. 找到vl_smplenn.m
    vl_smplenn.m的文件位置为:matconvnet安装位置+\matlab\simplenn
    我的安装目录为:D:\software\Matlab2017a\matconvnet\matconvnet-1.0-beta25\matconvnet-1.0-beta25\matlab\simplenn

  2. 定位到函数的第301行和302行之间
    如下图所示
    在这里插入图片描述

  3. 第301行和302行之间加上一行
    加完后如下图所示
    在这里插入图片描述
    然后,因为空洞卷积带来的维度不匹配的问题就解决了

您遇到的错误提示“矩阵维度必须一致”表明在执行除法操作时,被除数和除数的维度不匹配。在您提供的表达式中,`F_ji = 1/2 * M_ji * (V_ji).^2 * r_0 * (1/r_ji_trans.^2 - 1/r_max.^2);` 要求`r_ji_trans.^2`、`r_max`以及它们的倒数都是同一维度的数组,以便进行逐元素的运算。 为了解决这个问题,请确认以下几点: 1. `M_ji` 和 `(V_ji).^2` 应该是标量或者与 `r_ji_trans.^2` 同维度的数组。 2. `r_0` 应该是一个标量或者与 `r_ji_trans.^2` 同维度的数组。 3. `r_max` 应该是一个标量或者与 `r_ji_trans.^2` 同维度的数组。 4. 如果 `r_max` 是一个标量,您需要确保它被正确地扩展到与 `r_ji_trans.^2` 相同的维度。 如果 `r_max` 是一个标量,您可以通过增加一个维度来匹配其他数组的维度。例如,如果 `r_max` 是一个1x1的标量值,您可以使用 `r_max(:)` 或者 `r_max * ones(size(r_ji_trans.^2))` 来确保维度匹配。 下面是一个调整后的代码示例: ```matlab % 假设以下变量已经定义并且具有正确的维度 % M_ji, V_ji, r_ji_trans, r_max % 确保 M_ji 和 V_ji 是正确的维度 % 如果它们是标量,则不需要变化 % 如果它们不是标量,确保它们与 r_ji_trans 的维度一致 % r_max 应该是一个标量,如果是,我们需要将其转换成与 r_ji_trans 同维度的数组 r_max_expanded = r_max * ones(size(r_ji_trans.^2)); % 现在我们可以执行计算 F_ji = 1/2 * M_ji .* (V_ji).^2 .* r_0 .* (1 ./ r_ji_trans.^2 - 1 ./ r_max_expanded.^2); ``` 在这个例子中,我使用了 `.*` 和 `./` 来执行逐元素的乘法和除法操作。请确保所有的变量都具有正确的维度,这样就不会出现维度不匹配的错误了。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值