gpt4 book ai didi

matlab - 训练用于图像分割的神经网络

转载 作者:行者123 更新时间:2023-12-01 15:12:13 26 4
gpt4 key购买 nike

我有一组原始图像 block (101x101 矩阵)和另一组相应的二进制图像 block (相同大小 101x101),它们是训练神经网络的“答案”。我想训练我的神经网络,以便它可以学习,识别它从给定图像训练的形状,并在输出矩阵(作为分割的结果)处生成图像(可能以相同的矩阵形式 150x10201?)。

原始图像在左边,所需的输出在右边。

enter image description here enter image description here

因此,对于数据的预处理阶段,我将原始图像 block 重新整形为每个图像 block 的 1x10201 向量矩阵。组合其中的 150 个,我得到一个 150x10201 矩阵作为我的输入,另一个 150x10201 矩阵来自二进制图像补丁。然后我将这些输入数据提供给深度学习网络。在这种情况下,我使用了 Deep Belief Network。

我用于设置和训练 DBN 的 Matlab 代码如下:

%训练一个 4 层 100 个隐藏单元的 DBN 并使用它的权重来初始化一个 NN

rand('state',0)

%火车数据库

dbn.sizes = [100 100 100 100];
opts.numepochs = 5;
opts.batchsize = 10;
opts.momentum = 0;
opts.alpha = 1;
dbn = dbnsetup(dbn, train_x, opts);
dbn = dbntrain(dbn, train_x, opts);

%展开 dbn 到 nn

nn = dbnunfoldtonn(dbn, 10201);
nn.activation_function = 'sigm';

%train nn

opts.numepochs =  1;
opts.batchsize = 10;

assert(isfloat(train_x), 'train_x must be a float');
assert(nargin == 4 || nargin == 6,'number ofinput arguments must be 4 or 6')

loss.train.e = [];
loss.train.e_frac = [];
loss.val.e = [];
loss.val.e_frac = [];
opts.validation = 0;
if nargin == 6
opts.validation = 1;
end

fhandle = [];
if isfield(opts,'plot') && opts.plot == 1
fhandle = figure();
end

m = size(train_x, 1);

batchsize = opts.batchsize;
numepochs = opts.numepochs;

numbatches = m / batchsize;

assert(rem(numbatches, 1) == 0, 'numbatches must be a integer');

L = zeros(numepochs*numbatches,1);
n = 1;
for i = 1 : numepochs
tic;

kk = randperm(m);
for l = 1 : numbatches
batch_x = train_x(kk((l - 1) * batchsize + 1 : l * batchsize), :);

%Add noise to input (for use in denoising autoencoder)
if(nn.inputZeroMaskedFraction ~= 0)
batch_x = batch_x.*(rand(size(batch_x))>nn.inputZeroMaskedFraction);
end

batch_y = train_y(kk((l - 1) * batchsize + 1 : l * batchsize), :);

nn = nnff(nn, batch_x, batch_y);
nn = nnbp(nn);
nn = nnapplygrads(nn);

L(n) = nn.L;

n = n + 1;
end

t = toc;

if opts.validation == 1
loss = nneval(nn, loss, train_x, train_y, val_x, val_y);
str_perf = sprintf('; Full-batch train mse = %f, val mse = %f',
loss.train.e(end), loss.val.e(end));
else
loss = nneval(nn, loss, train_x, train_y);
str_perf = sprintf('; Full-batch train err = %f', loss.train.e(end));
end
if ishandle(fhandle)
nnupdatefigures(nn, fhandle, loss, opts, i);
end

disp(['epoch ' num2str(i) '/' num2str(opts.numepochs) '. Took ' num2str(t) ' seconds' '. Mini-batch mean squared error on training set is ' num2str(mean(L((n-numbatches):(n-1)))) str_perf]);
nn.learningRate = nn.learningRate * nn.scaling_learningRate;
end

任何人都可以告诉我,像这样对神经网络进行训练是否使其能够进行分割工作?或者我应该如何修改代码来训练 NN,以便它可以生成输出/结果作为 150x10201 形式的图像矩阵?

非常感谢..

最佳答案

您的输入太大。您应该尝试使用从 19x19 到最大 30x30 的较小补丁(这已经表示输入层中的 900 个神经元)。

然后是您的主要问题:您只有 150 张图像!当您训练神经网络时,您需要的训练实例至少是神经网络权重的三倍。所以要非常小心你选择的架构。

CNN 可能更适合您的问题。

关于matlab - 训练用于图像分割的神经网络,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29150020/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com