当我用ChatGPT中学习CNN卷积神经网络时...

news2024/11/16 8:25:31

本文节选自本人博客:https://www.blog.zeeland.cn/archives/chatgpt-asoihgoihrx

Introduction

ChatGPT大火,在这一段时间并没有觉得ChatGPT特别厉害,最多就是一个基于生成式对话的NLP模型罢了,直到我看到了AI扮演Linux虚拟机,能管理文件&编程&开浏览器,还能跟自己「套娃」聊天 | ChatGPT新玩法,于是好奇的我打算去讨教一下ChatGPT,于是就有了以下的场面。

我和ChatGPT的对话

Q: 现在你需要给出一个详细基于CNN和Pytorch预测mnist的过程和解释,并附上一个example

ChatGPT:
让我们来讲解一下如何使用CNN和PyTorch来预测MNIST数据集。

首先,MNIST数据集是一个手写数字识别数据集,包含60000张训练图片和10000张测试图片。每张图片都是28x28像素的灰度图片,并且包含0到9的数字。

首先,我们需要安装PyTorch。要安装PyTorch,请执行以下操作:

  1. 安装Anaconda(如果您还没有安装)。
  2. 打开终端/命令提示符,并使用以下命令安装PyTorch:
conda install pytorch torchvision -c pytorch

安装完成后,我们可以开始编写代码。首先,我们需要导入一些必要的库,如下所示:

import torch
import torchvision
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim

然后,我们需要准备MNIST数据集。为此,我们可以使用PyTorch的 torchvision 库来下载和加载MNIST数据集,如下所示:

train_dataset = torchvision.datasets.MNIST(root='./data', train=True, transform=torchvision.transforms.ToTensor(), download=True)
test_dataset = torchvision.datasets.MNIST(root='./data', train=False, transform=torchvision.transforms.ToTensor(), download=True)

接下来,我们需要将数据集分成两部分,一部分用于训练,另一部分用于验证。为此,我们可以使用PyTorch中的 DataLoader 函数,

Q: 继续

ChatGPT:
好的,接下来我们需要使用PyTorch的DataLoader函数来将数据集分成训练集和验证集,如下所示:

train_loader = torch.utils.data.DataLoader(dataset=train_dataset, batch_size=64, shuffle=True)
test_loader = torch.utils.data.DataLoader(dataset=test_dataset, batch_size=64, shuffle=False)

现在,我们需要定义一个网络模型来进行图像分类。为此,我们可以定义一个继承自nn.Module的类,并定义其中的前向传播函数,如下所示:

class CNN(nn.Module):
    def __init__(self):
        super(CNN, self).__init__()
        self.conv1 = nn.Conv2d(in_channels=1, out_channels=16, kernel_size=5, stride=1, padding=2)
        self.pool = nn.MaxPool2d(kernel_size=2, stride=2)
        self.conv2 = nn.Conv2d(in_channels=16, out_channels=32, kernel_size=5, stride=1, padding=2)
        self.fc1 = nn.Linear(32 * 7 * 7, 10)
    
    def forward(self, x):
        x = self.pool(F.relu(self.conv1(x)))
        x = self.pool(F.relu(self.conv2(x)))
        x = x.view(x.size(0), -1)
        x = self.fc1(x)
        return x

这里我们定义了一个包含两个卷积层和两个池化层的网络,并使用一个全连接层将最后的特征映射到输出类别。

接下来,我们需要定义一个损失函数来计算预测和真实值之间的差距。在这里,我们使用交叉熵损失函数,如下所示:

Q: 继续

ChatGPT:
好的,接下来我们定义交叉熵损失函数,如下所示:

criterion = nn.CrossEntropyLoss()

接下来,我们需要定义一个优化器来更新网络参数。在这里,我们使用随机梯度下降(SGD)优化器,并指定学习率为0.01,如下所示:

optimizer = optim.SGD(model.parameters(), lr=0.01)

现在我们已经准备好训练网络了。为此,我们需要迭代训练数据集中的每一个批次,并在每个批次上运行以下步骤:

  1. 将数据输入网络,并使用前向传播函数计算预测值。
  2. 计算损失函数的值。
  3. 计算损失函数的梯度。
  4. 使用优化器更新网络参数。

下面是完整的训练过程:

# 训练网络
for epoch in range(5):
    for batch_idx, (data, targets) in enumerate(train_loader):
        # 计算预测值
        outputs = model(data)
        # 计算损失函数
        loss = criterion(outputs, targets)
        # 梯度清零
        optimizer.zero_grad()
        # 反向传播
        loss.backward()
        # 更新参数
        optimizer.step()

最后,我们可以使用测试数据集来评估网络的性能。为此,我们可以迭代测试数据集中的每一个批次。

Q: 继续

ChatGPT:
好的,接下来我们使用测试数据集来评估网络的性能。为此,我们可以迭代测试数据集中的每一个批次,并在每个批次上运行以下步骤:

  1. 将数据输入网络,并使用前向传播函数计算预测值。
  2. 计算损失函数的值。
  3. 计算精度。

下面是完整的评估过程:

# 评估网络
model.eval()
with torch.no_grad():
    correct = 0
    total = 0
    for data, targets in test_loader:
        outputs = model(data)
        _, predicted = torch.max(outputs.data, 1)
        total += targets.size(0)
        correct += (predicted == targets).sum().item()
    print('精度:{}%'.format(100 * correct / total))

这就是使用CNN和PyTorch预测MNIST数据集的一个完整示例。希望这对你有所帮助。

Summary

事实上我被震惊到了,从上文的对话可以看到,我唯一做的事情就是“继续”,所有的工作都是ChatGPT做完的,从ChatGPT介绍了数据预处理、CNN构建、训练到预测的一整套方法论,从一定程度上说,他就是一个知识渊博的人,所以是否可以将它作为一个搜索引擎+老师的复合体,使用ChatGPT进行学习呢?

我曾经一直很关注人工智能的伦理问题,包括如果人工智能拥有类人的智慧,它是否可以被定义为人等问题,我想未来几年人工智能的伦理问题会越来越凸显,事实上,我们可以看到,基本每年机器学习领域都会有一些让人意向不到的扩展面技术出来,这些技术和运用不仅在某些程度上会取代一部分人类的工作,更会催生出一些新的领域和行业,从一个方面说,这或许是创新驱动发展的一种体现?从另外一个方面来说,当前人类社会的价值观是否能够跟上这样高速发展地科技水平呢?

在未来,人工智能的伦理问题及其带来的矛盾会逐渐凸显,一方面,这是一个很好的发展机遇,另一方面,人类更需要好好地审视一下人类社会发展的意义,审视一下哲学三问,以及我们需要构建一个怎样的科技树?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/78538.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[附源码]计算机毕业设计基于web的建设科技项目申报管理系统Springboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

【Redis】Redisson 分布式锁主从一致性问题

一、主从一致性问题的产生 Redis 主从集群使用如下: 在主节点进行数据的写操作;在节点进行数据的读操作;主节点向从节点同步数据。 主从一致性问题: 当主节点还没来得及将锁信息同步到从节点时,此时主节点宕机了。然…

【产品分析】高德手机地图产品:未来搜索将从地图开始

未来的搜索从地图开始。今后的所有商务活动都将通过地图展开,使之成为兵家必争之地。要将移动流量变现为真金白银,地图将发挥至关重要的作用。 目前整个中国电子地图市场目前处于应用成熟期。在多年的快速发展和数次大型收购后,各互联网巨头已…

[附源码]计算机毕业设计家庭教育appSpringboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

腾讯在线文档根据单选的内容修改背景颜色

目录 [介绍] [条件格式] [添加条件格式] [选择单元格范围] [条件选择] [格式预览] [管理条件格式] [介绍] 类似我这种场景(见下图),单选选择不同的状态,有时为了一目了然的看清状态,需要给单元格加上不同的背景颜色,但手动使用格式刷比较麻烦,琢磨了下根据单元格选项动态…

【云原生】Nacos 监控手册

Nacos 0.8.0版本完善了监控系统,支持通过暴露metrics数据接入第三方监控系统监控Nacos运行状态,目前支持prometheus、elastic search和influxdb,下面结合prometheus和grafana如何监控Nacos,官网grafana监控页面。 搭建Nacos集群暴…

HTML入门零基础教程(六)

嗨,大家好,我是异星球的小怪同志 一个想法有点乱七八糟的小怪 如果觉得对你有帮助,请支持一波。 希望未来可以一起学习交流。 目录 一、图像的路径 1.路径(前期铺垫知识) 2.VSCode打开目录文件夹: 3.路…

java计算机毕业设计ssm医院病床管理系统ft4fz(附源码、数据库)

java计算机毕业设计ssm医院病床管理系统ft4fz(附源码、数据库) 项目运行 环境配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff0…

Kafka集群搭建

集群应用场景 (1)消息传递 Kafka可以很好地替代传统邮件代理。消息代理的使用有多种原因(将处理与数据生产者分离,缓冲未处理的消息等)。与大多数邮件系统相比,Kafka具有更好的吞吐量,内置的分…

Java项目:SSM会议室预约系统

作者主页:源码空间站2022 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 本项目包含管理员与用户两种角色; 管理员角色包含以下功能: 管理员登陆,会议室管理,预约审核管理,用户注册等功能。 用…

半路出家的菜鸡程序员,北漂五年,给刚入行朋友的一些忠告,发自肺腑

从高中(s1)到大学(s7)打了7年的LOL,电一大师、网一王者,一度准备打职业。多的不再赘述,要知道,那些除了纪念和情怀,对我都不再有意义。 难以启齿,LOL算是陪伴…

【OpenCV学习】第8课:形态学操作-开丶闭丶形态学梯度丶顶帽丶黑帽

仅自学做笔记用,后续有错误会更改 理论 开:先腐蚀 后膨胀(效果:可以去掉小对象)闭:先膨胀 后腐蚀(效果: 可以填洞,去污渍)形态学梯度(基本梯度)&#xff1a…

委托(delegate)

委托(delegate) 委托概述 将方法调用者和目标方法动态关联起来,委托是一个类,所以它和类是同级的,可以通过委托来掉用方法,不要误以为委托和方法同级的,方法只是类的成员。委托定义了方法的类…

Flutter - DecoratedBox(装饰容器)及内部控件使用详解

DecoratedBox. 可以在其子组件绘制前(或后)绘制一些装饰(Decoration),如背景、边框、渐变等 比如 这样 这样 这样 // DecoratedBox 的源码 const DecoratedBox({super.key,required this.decoration, // Decorationthis.position Decor…

产品新说 | 重磅,刚刚正式发布

在当代术加持和需求迭代的背景下,运维人员更需要透过现象看本质,也就是通过复杂的表象数据去挖掘其背后的信息价值。而运维数据经过各种技术手段的治理后,通常的呈现方式是数据空间的形式,比如表格、纯文字等。为了更形象地表达数…

层次遍历二叉树

层次遍历二叉树 文章目录层次遍历二叉树♥ 做法♥算法构思♥ 数据结构设计♥ 层次遍历过程♥ 算法实现应用:用层次遍历求路径之逆♥ 问题♥ 解题思路:♥ 算法框架:♥ 算法实现♥ 做法 ▪ 逐层进行访问 ▪ 对某一层的节点访问完后,再按照其访问次序对各个节点的左、…

[附源码]Python计算机毕业设计SSM基于的在线怀旧电影歌曲听歌系统(程序+LW)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

MATLAB算法实战应用案例精讲-【神经网络】扩散模型(Diffusion Models)

前言 广播模型、扩散模型和传染模型可以用于分析信息、技术、行为、信念和传染病在人群中的传播。这些模型在通信科学、市场营销学和流行病学的研究中发挥着核心作用。 在计算机视觉中,生成模型是一类能够生成合成图像的模型。例如,一个被训练来生成人脸的模型,每次都会生…

Java项目:SSM电子书网站管理系统

作者主页:源码空间站2022 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 本项目包含管理员、用户两种角色; 管理员角色包含以下功能: 登录页面,管理员管理书籍,用户管理等功能。 用户角色包含…

Docker学习笔记4(狂神)

DockerFile 很多官方镜像都是基础包,很多功能没有,我们通常会自己搭建自己的镜像! 官方既然可以制作镜像,那我们也可以! DockerFile的构建过程 很多指令: 创建一个自己的centos: 我们可以看到我们从docke…