U-net失去连接,成为线性而不是u型(unetLayers)

34视图(30天)
我试图效仿 多光谱图像的语义分割使用深度学习 ,目标是利用pretrained网络转变学习我自己的语义分割网络上使用其他地形图像。不幸的是,我和U-net成为线性的,不能找出原因。
训练时,输入图像大小(256、256、6)和有18类。为简单起见,我训练我的网络与数据有关的例子,使用函数 unetLayers (而不是helper函数中引用的例子)。
inputTileSize = (256256 6);
lgraph = unetLayers (inputTileSize, 18岁,“EncoderDepth”4);
情节(lgraph)
我训练网络使用:
%来自垫文件和randomPatchExtractionDatastore函数
%与matlab上面示例页面
imd = imageDatastore (“train_data.mat”FileExtensions =“.mat”ReadFcn = @matRead6Channels);
pxds = pixelLabelDatastore (“train_labels.png”一会,pixelLabelIds);
pxds dsTrain = randomPatchExtractionDatastore (imd, [256256], PatchesPerImage = 1000);
initialLearningRate = 0.05;
maxEpochs = 5;%低b / c的概念,不是实际的使用
minibatchSize = 8;
l2reg = 0.0001;
选择= trainingOptions (“个”,
InitialLearnRate = initialLearningRate,
动量= 0.9,
L2Regularization = l2reg,
MaxEpochs = MaxEpochs,
MiniBatchSize = MiniBatchSize,
LearnRateSchedule =“分段”,
洗牌=“every-epoch”,
GradientThresholdMethod =“l2norm”,
GradientThreshold = 0.05,
情节=“训练进步”,
VerboseFrequency = 20);
网= trainNetwork (dsTrain、lgraph选项);
保存(“my_multispectralUnet_2.mat”,“净”);
训练后,我的网络负载和阴谋。它是线性的,而不是一个u型曲线。
data =负载(“C: \ \ \ \工作CMFD \ \ my_multispectralUnet_2.mat”);
网= data.net;
情节(layerGraph (net.Layers))
没有错误发生在运行上面的代码。发生在编码器和解码器部分之间的联系?
2的评论
埃里森
埃里森 2023年6月14日16:58
我怎么能确保编码器和译码器之间的连接部分不迷路?因为连接有列车网络之前,而不是之后。

登录置评。

接受的答案

理查德。
理查德。 2023年6月15日13
这不是训练造成的,或保存和加载:网络可能是正确的。连接数据的损失是由于你的第二个调用图的形式()函数:
情节(layerGraph (net.Layers))
这条线是首先提取层作为一个线性表的时候调用。层,然后构造一个新的LayerGraph已没有原来的连接网络。如果你只是电话:
情节(净)
然后你会看到正确的网络。
1评论
埃里森
埃里森 2023年6月15日22:59
谢谢!这帮助我理解发生了什么。
其他检查的人在未来,为了有一个u型的网络传输学习(这个项目下一步),我必须包括:
layersTransfer = net.Layers (1: end-3);
层= [
layersTransfer
fullyConnectedLayer (numClasses“WeightLearnRateFactor”,20岁,“BiasLearnRateFactor”,20岁,“名字”,“fcl_a”)
softmaxLayer (“名字”,“sl_b”)
classificationLayer (“名字”,“cl_c”));
%创建层图和图中创建连接
lgraph = layerGraph(层);
%连接连接层
lgraph = connectLayers (lgraph,“Encoder-Stage-1-ReLU-2”,“Decoder-Stage-4-DepthConcatenation / in2”);
lgraph = connectLayers (lgraph,“Encoder-Stage-2-ReLU-2”,“Decoder-Stage-3-DepthConcatenation / in2”);
lgraph = connectLayers (lgraph,“Encoder-Stage-3-ReLU-2”,“Decoder-Stage-2-DepthConcatenation / in2”);
lgraph = connectLayers (lgraph,“Encoder-Stage-4-DropOut”,“Decoder-Stage-1-DepthConcatenation / in2”);
analyzeNetwork (lgraph)%现在已经想要的形状
%指定你的选项什么的
netTransfer = trainNetwork (dsTrain2、lgraph选项);
现在我有其他错误信息,但那只是编码丫

登录置评。

更多的答案(0)

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!