zoukankan      html  css  js  c++  java
  • 如何使用 libtorch 实现 VGG16 网络?

    参考地址:https://ethereon.github.io/netscope/#/preset/vgg-16

    按照上面的图来写即可。

    论文地址:https://arxiv.org/pdf/1409.1556.pdf

    // Define a new Module.
    struct Net : torch::nn::Module {
    	Net() {
    		conv1_1 = torch::nn::Conv2d(torch::nn::Conv2dOptions(3, 64, { 3,3 }).padding(1));
    		conv1_2 = torch::nn::Conv2d(torch::nn::Conv2dOptions(64, 64, { 3,3 }).padding(1));
    		conv2_1 = torch::nn::Conv2d(torch::nn::Conv2dOptions(64, 128, { 3,3 }).padding(1));
    		conv2_2 = torch::nn::Conv2d(torch::nn::Conv2dOptions(128, 128, { 3,3 }).padding(1));
    		conv3_1 = torch::nn::Conv2d(torch::nn::Conv2dOptions(128, 256, { 3,3 }).padding(1));
    		conv3_2 = torch::nn::Conv2d(torch::nn::Conv2dOptions(256, 256, { 3,3 }).padding(1));
    		conv3_3 = torch::nn::Conv2d(torch::nn::Conv2dOptions(256, 256, { 3,3 }).padding(1));
    		conv4_1 = torch::nn::Conv2d(torch::nn::Conv2dOptions(256, 512, { 3,3 }).padding(1));
    		conv4_2 = torch::nn::Conv2d(torch::nn::Conv2dOptions(512, 512, { 3,3 }).padding(1));
    		conv4_3 = torch::nn::Conv2d(torch::nn::Conv2dOptions(512, 512, { 3,3 }).padding(1));
    		conv5_1 = torch::nn::Conv2d(torch::nn::Conv2dOptions(512, 512, { 3,3 }).padding(1));
    		conv5_2 = torch::nn::Conv2d(torch::nn::Conv2dOptions(512, 512, { 3,3 }).padding(1));
    		conv5_3 = torch::nn::Conv2d(torch::nn::Conv2dOptions(512, 512, { 3,3 }).padding(1));
    
    		fc1 = torch::nn::Linear(512*7*7,4096);
    		fc2 = torch::nn::Linear(4096, 4096);
    		fc3 = torch::nn::Linear(4096, 1000);
    	}
    
    	// Implement the Net's algorithm.
    	torch::Tensor forward(torch::Tensor x) {
    		x = conv1_1->forward(x);
    		x = torch::relu(x);
    		x = conv1_2->forward(x);
    		x = torch::relu(x);
    		x = torch::max_pool2d(x, { 2,2 }, { 2,2 });
    
    		x = conv2_1->forward(x);
    		x = torch::relu(x);
    		x = conv2_2->forward(x);
    		x = torch::relu(x);
    		x = torch::max_pool2d(x, { 2,2 }, { 2,2 });
    
    		x = conv3_1->forward(x);
    		x = torch::relu(x);
    		x = conv3_2->forward(x);
    		x = torch::relu(x);
    		x = conv3_3->forward(x);
    		x = torch::relu(x);
    		x = torch::max_pool2d(x, { 2,2 }, { 2,2 });
    
    		x = conv4_1->forward(x);
    		x = torch::relu(x);
    		x = conv4_2->forward(x);
    		x = torch::relu(x);
    		x = conv4_3->forward(x);
    		x = torch::relu(x);
    		x = torch::max_pool2d(x, { 2,2 }, { 2,2 });
    
    		x = conv5_1->forward(x);
    		x = torch::relu(x);
    		x = conv5_2->forward(x);
    		x = torch::relu(x);
    		x = conv5_3->forward(x);
    		x = torch::relu(x);
    		x = torch::max_pool2d(x, { 2,2 }, { 2,2 });
    
    		x = x.view({ x.size(0), -1 });//512x7x7 = 25088
    
    		x = fc1->forward(x);
    		x = torch::relu(x);
    		x = torch::dropout(x, 0.5, is_training());
    
    		x = fc2->forward(x);
    		x = torch::relu(x);
    		x = torch::dropout(x, 0.5, is_training());
    
    		x = fc3->forward(x);
    
    		x = torch::log_softmax(x, 1);
    
    		return x;
    	}
    
    	// Use one of many "standard library" modules.
    	torch::nn::Conv2d conv1_1{ nullptr };
    	torch::nn::Conv2d conv1_2{ nullptr };
    	torch::nn::Conv2d conv2_1{ nullptr };
    	torch::nn::Conv2d conv2_2{ nullptr };
    	torch::nn::Conv2d conv3_1{ nullptr };
    	torch::nn::Conv2d conv3_2{ nullptr };
    	torch::nn::Conv2d conv3_3{ nullptr };
    	torch::nn::Conv2d conv4_1{ nullptr };
    	torch::nn::Conv2d conv4_2{ nullptr };
    	torch::nn::Conv2d conv4_3{ nullptr };
    	torch::nn::Conv2d conv5_1{ nullptr };
    	torch::nn::Conv2d conv5_2{ nullptr };
    	torch::nn::Conv2d conv5_3{ nullptr };
    	torch::nn::Linear fc1{ nullptr };
    	torch::nn::Linear fc2{ nullptr };
    	torch::nn::Linear fc3{ nullptr };
    };
    
  • 相关阅读:
    推荐系统 蒋凡译 第一章 引言 读书笔记
    神经网络与深度学习 邱锡鹏 第5章 卷积神经网络 读书笔记
    神经网络与深度学习 邱锡鹏 第4章 前馈神经网络 读书笔记
    神经网络与深度学习 邱锡鹏 第3章 线性模型 读书笔记
    神经网络与深度学习 邱锡鹏 第2章 机器学习概述 读书笔记
    神经网络与深度学习 邱锡鹏 第1章 绪论 作业
    神经网络与深度学习 邱锡鹏 第1章 绪论 读书笔记
    算法笔记 上机训练实战指南 第13章 专题扩展 学习笔记
    算法笔记 第13章 专题扩展 学习笔记
    算法笔记 上机训练实战指南 第11章 提高篇(5)--动态规划专题 学习笔记
  • 原文地址:https://www.cnblogs.com/cheungxiongwei/p/10714974.html
Copyright © 2011-2022 走看看