library(torch)
convnet <- nn_module(
"convnet",
initialize = function() {
# nn_conv2d(in_channels, out_channels, kernel_size)
self$conv1 <- nn_conv2d(1, 16, 3)
self$conv2 <- nn_conv2d(16, 32, 3)
self$conv3 <- nn_conv2d(32, 64, 3)
self$output <- nn_linear(2304, 3)
},
forward = function(x) {
x %>%
self$conv1() %>%
nnf_relu() %>%
nnf_max_pool2d(2) %>%
self$conv2() %>%
nnf_relu() %>%
nnf_max_pool2d(2) %>%
self$conv3() %>%
nnf_relu() %>%
nnf_max_pool2d(2) %>%
torch_flatten(start_dim = 2) %>%
self$output()
}
)
model <- convnet()
简要解析如下:
- 导入库:
library(torch)用于加载torch库,这是 R 的一个深度学习框架。 - 定义模型结构:
- 使用
nn_module定义一个新的模块类convnet。 - 初始化函数
initialize中:nn_conv2d(1, 16, 3):定义了一个二维卷积层,输入通道数为1,输出通道数为16,卷积核大小为3×3。nn_conv2d(16, 32, 3)和nn_conv2d(32, 64, 3):后续的卷积层,分别从16通道转换到32通道,再到64通道。nn_linear(2304, 3):定义一个全连接层,输入大小2304,输出大小为3。
- 使用
- 前向传播函数
forward:- 数据流动通过各层,依次经过卷积、ReLU激活、最大池化(
nnf_max_pool2d(2),池化窗口大小为2)。 - 在经过三次卷积-激活-池化之后,将输出展平成一维(
torch_flatten(start_dim = 2)),再通过全连接层生成最终输出。
- 数据流动通过各层,依次经过卷积、ReLU激活、最大池化(
- 模型实例化:
model <- convnet()创建了一个新的convnet模型实例。
这个卷积神经网络主要用于处理二维图像输入,并通过特征提取和降维,最终输出一个具有3个类别的预测结果。
