如何在Azure机器学习中构建卷积神经网络?

有人应该添加”net#”作为标签。我正在尝试通过使用以下教程,将我的Azure机器学习工作室中的神经网络改造成卷积神经网络:

https://gallery.cortanaintelligence.com/Experiment/Neural-Network-Convolution-and-pooling-deep-net-2

我的网络和教程之间的区别在于,我正在进行35个特征和1个标签的回归分析,而他们进行的是28×28个特征和10个标签的分类任务。

我从基本和第二个示例开始,并使它们工作如下:

input Data [35];hidden H1 [100]    from Data all;hidden H2 [100]    from H1 all;output Result [1] linear    from H2 all;

现在我对卷积的转换有些误解。在教程和这里的文档中:https://learn.microsoft.com/en-us/azure/machine-learning/machine-learning-azure-ml-netsharp-reference-guide 并未提及如何计算隐藏层的节点元组值。教程中说:

hidden C1 [5, 12, 12]  from Picture convolve {    InputShape  = [28, 28];    KernelShape = [ 5,  5];    Stride      = [ 2,  2];    MapCount = 5;  }hidden C2 [50, 4, 4]   from C1 convolve {     InputShape  = [ 5, 12, 12];     KernelShape = [ 1,  5,  5];     Stride      = [ 1,  2,  2];     Sharing     = [ F,  T,  T];     MapCount = 10;  }

看起来[5, 12, 12]和[50,4,4]以及KernelShape、Stride和MapCount这些值似乎凭空出现。我如何知道哪些值对我来说是有效的?我尝试使用相同的值,但它不起作用,我感觉因为他有[28,28]的输入而我有[35],我需要使用两个整数而不是三个的元组。

我刚刚尝试了一些与教程相关的随机值:

const { T = true; F = false; }input Data [35];hidden C1 [7, 23]  from Data convolve {    InputShape  = [35];    KernelShape = [7];    Stride      = [2];    MapCount = 7;  }hidden C2 [200, 6]   from C1 convolve {     InputShape  = [ 7, 23];     KernelShape = [ 1,  7];     Stride      = [ 1,  2];     Sharing     = [ F,  T];     MapCount = 14;  }hidden H3 [100]  from C2 all;output Result [1] linear  from H3 all;

目前似乎无法调试,因为Azure机器学习工作室唯一给出的错误代码是:

Exception":{"ErrorId":"LibraryException","ErrorCode":"1000","ExceptionType":"ModuleException","Message":"Error 1000: TLC library exception: Exception of type 'Microsoft.Numerics.AFxLibraryException' was thrown.","Exception":{"Library":"TLC","ExceptionType":"LibraryException","Message":"Exception of type 'Microsoft.Numerics.AFxLibraryException' was thrown."}}}Error: Error 1000: TLC library exception: Exception of type 'Microsoft.Numerics.AFxLibraryException' was thrown. Process exited with error code -2

最后,我的设置是Azure机器学习设置

感谢帮助!


回答:

对于35列长度的输入,使用给定的内核和步长,正确的网络定义如下:

const { T = true; F = false; }input Data [35];hidden C1 [7, 15]  from Data convolve {    InputShape  = [35];    KernelShape = [7];    Stride      = [2];    MapCount = 7;  }hidden C2 [14, 7, 5]   from C1 convolve {     InputShape  = [ 7, 15];     KernelShape = [ 1,  7];     Stride      = [ 1,  2];     Sharing     = [ F,  T];     MapCount = 14;  }hidden H3 [100]  from C2 all;output Result [1] linear  from H3 all;

首先,C1 = [7,15]。第一个维度简单地是MapCount。对于第二个维度,内核形状定义了用于扫描输入列的“窗口”的长度,步长定义了每次移动的距离。因此,内核窗口将覆盖列1-7、3-9、5-11、…、29-35,当你计算窗口时,第二个维度为15。

接下来,C2 = [14,7,5]。第一个维度再次是MapCount。对于第二个和第三个维度,1乘7的内核“窗口”必须覆盖7乘15的输入大小,使用沿相应维度的1和2的步长。

请注意,如果你想平展输出,你可以指定C2隐藏层的形状为[98,5]甚至[490]。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注