创建一个简单的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
这些是最基本的。使用各种层函数创建层,并使用layerGraph和connectLayers.然后你就可以像训练和使用其他网络一样训练和使用这个网络。
- 类别:
- 深度学习
评论
如欲留言,请点击在这里登录您的MathWorks帐户或创建一个新帐户。