unet代码实践

博主记录uNet代码问题供大家参考。一是网络输入处因通道格式不同(Channel_first和Channel_last)会报Tensor尺寸错误,可修改通道文件或代码;二是部分代码网络特征拼接与原文不符,需调整降维及拼接轴参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近看了一下uNet的代码,发现了一些问题,再次记录一下,供大家参考和学习。

1)网上的代码有一些在网络输入位置为inputs=((C,w,h)),但是你在运行的过程中会报一些Tensor的尺寸存在问题的错误,这是因为别人的代码是使用了Channel_first,而你的后端的通道格式是Channel_last,所以会出现尺寸问题,这里请大家注意。怎么改,大家网上搜一下,无非就是,要么你把你的通道文件改成Channel_first的形式,要么你就把代码改了就可以了。
2)有的代码在网络的特征拼接位置和原始的论文不符。
下面是原始代码里的拼接部分。

conv4 = Conv2D(512, (3, 3), activation="relu", padding="same")(pool3)
conv4 = Conv2D(512, (3, 3), activation="relu", padding="same")(conv4)
pool4 = MaxPooling2D(pool_size=(2, 2))(conv4)

conv5 = Conv2D(1024, (3, 3), activation="relu", padding="same")(pool4)
conv5 = Conv2D(1024, (3, 3), activation="relu", padding="same")(conv5)
up6 = UpSampling2D(size(2,2))(conv5)
up6 = concatenate([up6,conv4])

这里将up6和conv4进行特征拼接,最后获得的通道数不是原文中的1024,因为他没有给up6降为到512,
原始文章unet原理图
这里拼接的时候是512+512,所以最后一层中的1024需要降维到512,但是论文中没有降维,只给长款做了升采样。
这里我直接给代码改成如下:

conv4 = Conv2D(512, (3, 3), activation="relu", padding="same")(pool3)
conv4 = Conv2D(512, (3, 3), activation="relu", padding="same")(conv4)
pool4 = MaxPooling2D(pool_size=(2, 2))(conv4)

conv5 = Conv2D(1024, (3, 3), activation="relu", padding="same")(pool4)
conv5 = Conv2D(1024, (3, 3), activation="relu", padding="same")(conv5)
up6 = Conv2DTranspose(512, (2, 2), strides=2, padding="same")(conv5)
up6 = concatenate([up6, conv4],axis=3)

这样就符合原文的内容了,这里参数axis也要注意,他是说你要选择那个轴作为拼接轴,如果你是channel_last格式就是axis=3,但是如果你是channel_first那么,axis=1。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

能量鸣新

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

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

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

打赏作者

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

抵扣说明:

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

余额充值