人工智能

应用机器学习和深度学习

创建一个简单的DAG网络

创建简单DAG网络

今天,我想向您展示构建用于深度学习的DAG(有向无环图)网络所需的基本工具。我要建立这个网络并在数字数据集上训练它。

作为第一步,我将创建主分支,它遵循上面所示的左边路径。的layerGraph函数将保存一堆连接步骤;它从一个简单的层数组创建一个图形网络,将层按顺序连接在一起。

图层= [imageInputLayer([28 28 1],“名字”“输入”16) convolution2dLayer(5日,“填充”“相同”“名字”“conv_1”) batchNormalizationLayer (“名字”“BN_1”) reluLayer (“名字”“relu_1”32岁的)convolution2dLayer (3“填充”“相同”“步”2,“名字”“conv_2”) batchNormalizationLayer (“名字”“BN_2”) reluLayer (“名字”“relu_2”32岁的)convolution2dLayer (3“填充”“相同”“名字”“conv_3”) batchNormalizationLayer (“名字”“BN_3”) reluLayer (“名字”“relu_3”) additionLayer (2“名字”“添加”) averagePooling2dLayer (2“步”2,“名字”“avpool”) fullyConnectedLayer (10“名字”“俱乐部”) softmaxLayer (“名字”“softmax”) classificationLayer (“名字”“classOutput”));

使用连接层layerGraph

lgraph = layerGraph(图层)
lgraph = LayerGraph with properties: Layers: [15×1 nnet.cnn.layer.Layer] Connections: [14×2 table]

情节函数知道如何可视化DAG网络。

情节(lgraph)轴

接下来,我需要创建将在另一个分支上的单层。它是一个1乘1的卷积层。它的参数(过滤器的数量和步幅)被设置为匹配的激活大小“relu_3”层。一旦图层创建完成,addLayers添加到lgraph

skip_conv_layer =卷积2dlayer (1,32,“步”2,“名字”“skipConv”);lgraph = addLayers(lgraph,skip_conv_layer);情节(lgraph)轴

你可以看到新图层在那里,但它看起来有点孤独。我需要连接到其他图层使用connectLayers

lgraph = connectLayers(“relu_1”“skipConv”);lgraph = connectLayers(“skipConv”“添加/ in2”);情节(lgraph);轴

现在我已经构建了网络,下面是使用数字数据集训练它的步骤。

[trainImages,trainLabels] = digitTrain4DArrayData;[valImages,valLabels] = digitTest4DArrayData;

指定培训选项并对网络进行培训。

选项= trainingOptions(“个”“MaxEpochs”6“洗牌”“every-epoch”“ValidationData”{valImages, valLabels},“ValidationFrequency”, 20岁,“VerboseFrequency”, 20);net = trainNetwork(trainImages,trainLabels,lgraph,options)
单GPU训练。初始化图像归一化。|=======================================================================================================================| | 时代| |迭代时间| Mini-batch | |验证Mini-batch | |验证基地学习| | | |(秒)| | | | |精度损失精度损失  | |=======================================================================================================================| | 1 | 1 | 0.03 | 2.3317 | 2.2729 | | 11.72% 14.38% | 0.0100 | | 1 | 20 | 0.81 | 0.9775 |72.24% 71.88% 0.9119 | | | 0.0100 | | 2 | 40 | 1.61 | 0.3783 | 0.4352 | | 92.19% 88.86% | 0.0100 | | 2 | 60 | 2.38 | 0.3752 | 0.3111 | | 89.06% 92.06% | 0.0100 | | 3 | 80 | 3.21 | 0.1935 | 0.1945 | | 96.88% 96.18% | 0.0100 | | 3 | 100 | 4.04 | 0.1777 | 0.1454 | | 97.66% 97.32% | 0.0100 | | 4 | 120 | 4.89 | 0.0662 | 0.0956 | | 100.00% 98.50% | 0.0100 | | 4 | 140 | 5.77 | 0.0764 | 0.0694 | | 99.22% 99.30% | 0.0100 | | 160 | | 6.58 | 0.0466 | 0.0540 | | 100.00% 99.52% | 0.0100 | | 180 | | 7.36| | 0.0459 | 0.0459 | 99.22% 99.60% | 0.0100 | | 6 | 200 | 8.12 | 0.0276 | 0.0390 | | 100.00% 99.56% | 0.0100 | | 6 | 220 | 9.01 | 0.0242 | 0.0354 | | 100.00% 99.62% | 0.0100 | | 6 | 234 | 9.84 | 0.0160 | | 100.00% | | 0.0100  | |=======================================================================================================================| 网= DAGNetwork属性:层:[16×1 nnet.cnn.layer.Layer]连接:[16×2表)

的输出trainNetwork是一个DAGNetwork对象。的连接属性记录各个层之间是如何连接的。

网连接
ans = 16×2表源目的地  __________ _____________ ' 输入“conv_1“conv_1“BN_1“BN_1“relu_1“relu_1“conv_2“relu_1“skipConv“conv_2“BN_2“BN_2“relu_2“relu_2“conv_3“conv_3“BN_3“BN_3“relu_3“relu_3“添加/ in1 ' '添加' ' avpool“avpool“fc“fc“softmax“softmax“classOutput“skipConv”“添加/ in2”

对验证图像进行分类并计算精度。

predictedLabels =分类(net,valImages);accuracy = mean(predictedLabels == valLabels)
准确度= 0.9974

这些是最基本的。使用各种层函数创建层,并使用layerGraphconnectLayers.然后你就可以像训练和使用其他网络一样训练和使用这个网络。

参考:创建并训练用于深度学习的DAG网络




发布与MATLAB®R2017b

|
  • 打印
  • 发送电子邮件

评论

如欲留言,请点击在这里登录您的MathWorks帐户或创建一个新帐户。