Pytorch 与 Tensorflow对比学习 第3周:进阶主题 Day 15-16: 卷积神经网络(CNN)

第3周:进阶主题
Day 15-16: 卷积神经网络(CNN)

在这两天中,我专注于学习卷积神经网络(CNN)的基础知识,包括卷积层和池化层的工作原理以及它们在图像处理中的应用。

卷积神经网络基础:

卷积层:学习了卷积层如何通过滤波器(或称为核)提取图像的特征。每个滤波器负责捕捉图像中的不同特征。

激活函数:理解了ReLU(Rectified Linear Unit)作为激活函数在CNN中的广泛应用,用于增加非线性。

池化层:了解了池化层(尤其是最大池化)如何帮助减少参数数量并防止过拟合,同时保留重要特征。

实践构建CNN:

设计并实现了一个简单的CNN模型,用于处理图像数据。

模型包括卷积层、激活函数、池化层以及全连接层来进行分类。

PyTorch实现:

在PyTorch中,我使用torch.nn模块定义了CNN的各个组件。

实现了一个包含卷积层、ReLU激活和最大池化层的简单网络。

下面是一个简单的CNN模型的PyTorch实现示例:

import torch

import torch.nn as nn

import torch.optim as optim

定义一个简单的CNN

class SimpleCNN(nn.Module):

def init (self):

super(SimpleCNN, self).init ()

self.conv1 = nn.Conv2d(1, 32, kernel_size=3, stride=1, padding=1)

self.relu = nn.ReLU()

self.maxpool = nn.MaxPool2d(kernel_size=2, stride=2)

self.fc = nn.Linear(32 * 14 * 14, 10) # 假设输入图像大小为28x28

复制代码
def forward(self, x):
    x = self.conv1(x)
    x = self.relu(x)
    x = self.maxpool(x)
    x = x.view(-1, 32 * 14 * 14)  # 展平操作
    x = self.fc(x)
    return x

实例化模型、定义损失函数和优化器

model = SimpleCNN()

criterion = nn.CrossEntropyLoss()

optimizer = optim.Adam(model.parameters(), lr=0.001)、

TensorFlow实现

在TensorFlow中,我们将使用Keras API来构建相似的CNN结构。这个例子同样包含卷积层、ReLU激活函数、池化层和一个全连接层。

import tensorflow as tf

from tensorflow.keras.models import Sequential

from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense

定义一个简单的CNN

model = Sequential([

Conv2D(32, kernel_size=(3, 3), strides=(1, 1), padding='same', activation='relu', input_shape=(28, 28, 1)),

MaxPooling2D(pool_size=(2, 2), strides=(2, 2)),

Flatten(),

Dense(10, activation='softmax')

])

编译模型

model.compile(optimizer='adam',

loss='sparse_categorical_crossentropy',

metrics='accuracy')

模型概要

model.summary()

在这个TensorFlow实现中,我们使用了Sequential模型来顺序地添加层。这种方法使得模型的构建过程更加直观和简洁。Conv2D和MaxPooling2D分别对应于PyTorch中的nn.Conv2d和nn.MaxPool2d。Flatten层用于将卷积层的输出展平,以便输入到全连接层(Dense层)。

通过对比PyTorch和TensorFlow的实现,可以看出两个框架在构建CNN方面的异同,这有助于更深入地理解这些概念,并在不同框架间转换思维方式。

相关推荐
小李不想当小白37 分钟前
BKP备份寄存器与RTC实时时钟(STM32标准库学习笔记)
笔记·stm32·单片机·嵌入式硬件·学习·嵌入式
陈飞EXCEL2 小时前
北京杰飞 IT 旗下妙码生花少儿Python编程上线两大学习系统
开发语言·python·学习
SLAM必须dunk2 小时前
Agent入门学习一
学习
承渊政道4 小时前
Linux网络学习【从NAT与代理服务理解网络转发、探索内网穿透原理、再到认识DNS与ICMP、最后动手部署并测试内网穿透】
linux·网络·学习·内网穿透·dns·nat
栉甜4 小时前
Vue2学习内容(上)
前端·javascript·vue.js·学习
shangjian0075 小时前
K8S学习-基础组件
学习·容器·kubernetes
lifallen5 小时前
ub-mode skill:软件工程原则
人工智能·学习·ai·软件工程·ai编程
凉、介6 小时前
深入理解 ARMv7-A | Generic Timer
笔记·学习·嵌入式·arm
椒颜皮皮虾྅6 小时前
让文档不止于文字:DeploySharp + PP-Structure,打通版面分析与表格重建
开发语言·学习·c#·.net·cuda
CCIE-Yasuo7 小时前
网络安全-学习web开发-基础概念、常用标签
前端·学习