卷积|深度学习:全卷积网络( 四 )
现在可以开始训练模型了 。 这里的损失函数和准确率计算与图像分类中的并没有本质上的不同 。 因为我们使用转置卷积层的通道来预测像素的类别 , 所以在SoftmaxCrossEntropyLoss里指定了axis=1(通道维)选项 。 此外 , 模型基于每个像素的预测类别是否正确来计算准确率 。
In [16]: ctx = d2l.try_all_gpus() loss = gloss.SoftmaxCrossEntropyLoss(axis=1) net.collect_params().reset_ctx(ctx) trainer = gluon.Trainer(net.collect_params(), "sgd", {"learning_rate": 0.1, "wd": 1e-3}) d2l.train(train_iter, test_iter, net, loss, trainer, ctx, num_epochs=5)training on [gpu(0), gpu(1), gpu(2), gpu(3)]epoch 1, loss 1.3306, train acc 0.726, test acc 0.811, time 17.5 secepoch 2, loss 0.6524, train acc 0.811, test acc 0.820, time 16.6 secepoch 3, loss 0.5364, train acc 0.838, test acc 0.812, time 16.3 secepoch 4, loss 0.4650, train acc 0.856, test acc 0.842, time 16.5 secepoch 5, loss 0.4017, train acc 0.872, test acc 0.851, time 16.3 sec
9.10.6预测像素类别
在预测时 , 我们需要将输入图像在各个通道做标准化 , 并转成卷积神经网络所需要的四维输入格式 。
In [17]: def predict(img): X = test_iter._dataset.normalize_image(img) X = X.transpose((2, 0, 1)).expand_dims(axis=0) pred = nd.argmax(net(X.as_in_context(ctx[0])), axis=1) return pred.reshape((pred.shape[1], pred.shape[2]))
为了可视化每个像素的预测类别 , 我们将预测类别映射回它们在数据集中的标注颜色 。
In [18]: def label2image(pred): colormap = nd.array(d2l.VOC_COLORMAP, ctx=ctx[0], dtype="uint8") X = pred.astype("int32") return colormap[X, :]
测试数据集中的图像大小和形状各异 。 由于模型使用了步幅为32的转置卷积层 , 当输入图像的高或宽无法被32整除时 , 转置卷积层输出的高或宽会与输入图像的尺寸有偏差 。 为了解决这个问题 , 我们可以在图像中截取多块高和宽为32的整数倍的矩形区域 , 并分别对这些区域中的像素做前向计算 。 这些区域的并集需要完整覆盖输入图像 。 当一个像素被多个区域所覆盖时 , 它在不同区域前向计算中转置卷积层输出的平均值可以作为 softmax 运算的输入 , 从而预测类别 。
简单起见 , 我们只读取几张较大的测试图像 , 并从图像的左上角开始截取形状为 320 × 480的区域:只有该区域用于预测 。 对于输入图像 , 我们先打印截取的区域 , 再打印预测结果 , 最后打印标注的类别(另见彩插图20) 。In [19]: test_images, test_labels = d2l.read_voc_images(is_train=False) n, imgs = 4, [] for i in range(n): crop_rect = (0, 0, 480, 320) X = image.f ixed_crop(test_images[i], *crop_rect) pred = label2image(predict(X)) imgs += [X, pred, image.f ixed_crop(test_labels[i], *crop_rect)] d2l.show_images(imgs[::3] + imgs[1::3] + imgs[2::3], 3, n)
本文插图
小结 可以通过矩阵乘法来实现卷积运算 。全卷积网络先使用卷积神经网络抽取图像特征 , 然后通过1 × 1卷积层将通道数变换为类别个数 , 最后通过转置卷积层将特征图的高和宽变换为输入图像的尺寸 , 从而输出每个像素的类别 。在全卷积网络中 , 可以将转置卷积层初始化为双线性插值的上采样 。
本书旨在向读者交付有关深度学习的交互式学习体验 。 书中不仅阐述深度学习的算法原理 , 还演示它们的实现和运行 。 与传统图书不同 , 本书的每一节都是一个可以下载并运行的 Jupyter记事本 , 它将文字、公式、图像、代码和运行结果结合在了一起 。 此外 , 读者还可以访问并参与书中内容的讨论 。 全书的内容分为3个部分:第一部分介绍深度学习的背景 , 提供预备知识 , 并包括深度学习基础的概念和技术;第二部分描述深度学习计算的重要组成部分 , 还解释近年来令深度学习在多个领域大获成功的卷积神经网络和循环神经网络;第三部分评价优化算法 , 检验影响深度学习计算性能的重要因素 , 并分别列举深度学习在计算机视觉和自然语言处理中的重要应用 。 本书同时覆盖深度学习的方法和实践 , 主要面向在校大学生、技术人员和研究人员 。 阅读本书需要读者了解基本的Python编程或附录中描述的线性代数、微分和概率基础 。
推荐阅读
- 蓝橡树|牛娃爸爸分享: 孩子如何通过学习编程, 激活大脑, 提升成绩, 逆袭名校?
- |更精确地预估到达时间,滴滴新研究提出异质时空图卷积网络
- 行业互联网,AI人工智能|苹果公布新的AI和机器学习培训计划
- 数据|同盾李晓林谈联邦学习实现数据安全共享
- 学习|敲黑板:刷课学习、提笔速记,华为MatePad 10.8值得拥有
- 科大讯飞|科大讯飞到底好不好?科大讯飞智能学习机告诉你!
- 青年|200824 可以与防弹少年团 一起学习韩国语的教材今日正式问世了
- |初学者友好,麦吉尔大学助理教授新书《图表示学习》开放下载
- 中年|俄罗斯为何从不担心芯片卡脖?美国拿它也没辙,方法值得中国学习
- 中年|拒绝学习美国,俄罗斯外长力挺中国华为,顺便还羞辱了一番美国