如何在 MATLAB 中为图像使用自定义神经网络函数 [关闭]
Posted
技术标签:
【中文标题】如何在 MATLAB 中为图像使用自定义神经网络函数 [关闭]【英文标题】:How to use the custom neural network function in the MATLAB for images [closed] 【发布时间】:2018-02-21 21:31:53 【问题描述】:我必须在 Matlab (2-10-2) 中制作一个简单的 3 层神经网络。
我曾在 Matlab 中研究过卷积神经网络,并希望将其与简单的神经网络架构进行比较。
每个类有 14000 张图像,输入有两个类,输出有两个类。输入时的图像大小为 56x56=3136。 1) 如何制作 2-10-2 NN 架构。
2) 我拥有的图像也是 RGB 的,所以它的 56x56x3
所以输入矩阵将是 9408?关于输入 x
如果有两个类。对于每个类,x1 的大小为 3161x700,x2 的大小为 9408x700,x
输入的最终大小为9408x1400
,标签为1x1400
?
【问题讨论】:
@Cody Gray。问题已更新 【参考方案1】:如果您查看前馈网络MATLAB help page,就会看到这个例子:
[x,t] = simplefit_dataset;
net = feedforwardnet(10);
net = train(net,x,t);
view(net)
y = net(x);
perf = perform(net,y,t)
这几乎就是你想要的。前馈网络可以采用不同隐藏层大小的数组,所以我们可以这样做:
net = feedforwardnet([2 10 2]);
得到你想要的架构。您无需担心输入层大小或输出层大小。这些设置为“0”,并根据您在训练期间提供给网络的输入和输出(示例中为net
)自动设置为正确的大小。在您的情况下,您可以将 56x56 矩阵重塑为 3136x1 向量:
x = reshape(x,3161,1);
因此,按照上面的示例,请确保您的类/目标标签位于 t
中,并且您的相应输入位于 x
中,然后您就可以开始了。
话虽如此,我不会使用这些网络之一对图像进行分类。 ConvNets 通常是要走的路。
要将输入数据(x 和 t)拆分为训练集、验证集和测试集,并让训练函数自动处理这样的泛化能力,请在训练之前执行以下操作:
net.divideFcn = 'dividerand';
net.divideParam.trainRatio = 0.7;
net.divideParam.valRatio = 0.15;
net.divideParam.testRatio = 0.15;
综合起来,我们有:
[x,t] = simplefit_dataset;
net = feedforwardnet(10);
net.divideFcn = 'dividerand';
net.divideParam.trainRatio = 0.7;
net.divideParam.valRatio = 0.15;
net.divideParam.testRatio = 0.15;
net = train(net,x,t);
view(net)
y = net(x);
perf = perform(net,y,t)
【讨论】:
马丁,我了解feedforwardnet
。 1)关于输入x
如果有两个类。每个班级x1
的大小为3161x700
,x2
的大小为3161x700
,对吗? 2)我们将使用多少数据进行训练和验证?我该如何划分 3)测试数据将类似于每个类的输入,如3161x100
如何进行测试?
查看我的更新答案。诀窍是使用内置的 divideFcn,它根据你给它的比例划分你的训练数据。
Martin 我已经更新了我的问题,正在回答中。只是对第二部分有些困惑。如果您请更新您的问题
如果您希望两个类 x1 和 x2 具有相同数量的特征(例如 9408),您需要确保它们为两个类训练一个模型 - 这可能是一个好主意,因为可以由 NN 建模的两个类的特征之间可能存在相关性。不过,如果特征数量不同,您可以训练两个独立的神经网络。但是,是的,如果您有 9408x1400,那么 9408 将是您的输入(例如像素值),而 1400 将是您的示例数。这是否充分解释了您的第二个问题?【参考方案2】:
对于 2 类分类问题,单个输出逻辑神经元就足够了。 (2-10-1) 的 NN 架构就足够了。
【讨论】:
我了解前馈网络。 1)关于输入 x if 两个类。对于每个类,x1 的大小为 3161x700,x2 的大小为 3161x700,对吗? 2)我们将使用多少数据进行训练和验证?我该如何划分 3)测试数据将类似于每个类的输入,如 3161x100 如何进行测试? 虽然这是真的,但单个输出足以区分两个类别,但拥有两个单独的输出神经元也有好处。一方面,在两个输出神经元上使用 softmax 输出可以得到一个概率输出,即它与一个类的相似程度,对所有类输出进行归一化。以上是关于如何在 MATLAB 中为图像使用自定义神经网络函数 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
如何在 MATLAB 中为基于内容的图像检索绘制 Precision-Recall 图?
如何在android中为自定义视图创建setter和getter
如何在 swift 中为 uiimageview 制作自定义边框