当前位置: 首页 > news >正文

pytorch框架实现cnn四种天气图片多分类问题-添加dropout和bn层

目录

1.导包

 2.加载数据、拼接训练、测试文件夹

3. 查看当前目录下的所有文件名,以列表的形式输出

4.原数据集dataset中存在的数据的目标类别 

5.创建train和test目录 及其需要分类的子文件夹

6.使用torchvision 的transforms进行数据预处理 

6.1数据统一缩放resize、ToTensor 、正则化Normalize

6.2用 torchvision.datasets.ImageFolder()加载数据集

 6.3创建dataloader

6.4从迭代器dataloader中取一批数据 

6.5可视化一张图片数据 

7.搭建cnn对四类天气图片进行多分类

7.1搭建CNN模型

 7.2定义设备

7.3创建模型 

7.4 定义优化器与损失函数

7.5定义训练过程 

7.6测试运行 

8. 在CNN中添加BN层

8.1定义cnn模型

8.2创建模型、将模型拷到GPU上 、定义优化器与损失函数

8.3调用 封装的训练函数 进行测试 

9.保存模型参数 

10.加载保存好的模型 

10.1定义一个新模型

10.2新模型加载已保存的模型参数 

10.3查看模型信息 

10.4 把新的模型拷到GPU上, 进行测试

11.保存最优参数 

12.保存完成模型 

13.跨设备的模型保存和加载 


 

1.导包

import torch  #导入pyTorch模块
import torch.nn as nn     #pyTorch中的神经网络模块
import torch.nn.functional as F   #神经网络方法模块
import torch.optim as optim  #定义优化器的模块
import numpy as np   #数据处理的三剑客之一
import matplotlib.pyplot as plt  #画图的模块
import torchvision   #数据预处理方法组合的模块import os    #目录操作需要用到的模块

 2.加载数据、拼接训练、测试文件夹

base_dir = './dataset/'   # './' 读取当前目录下的数据
#拼接两个文件夹路径,用于分割训练数据和测试数据
train_dir = os.path.join(base_dir, 'train')
test_dir = os.path.join(base_dir, 'test')

3. 查看当前目录下的所有文件名,以列表的形式输出

#查看当前目录下的所有文件名,以列表的形式输出
filenames = os.listdir('./dataset')#列表长度 就代表 文件名的数量
len(filenames)
1125

4.原数据集dataset中存在的数据的目标类别 

#原数据集dataset中存在的数据的目标类别
species = ['cloudy', 'rain', 'shine', 'sunrise']

5.创建train和test目录 及其需要分类的子文件夹

# 判断不存在时,创建train和test目录
if not os.path.exists(train_dir):os.mkdir(train_dir)if not os.path.exists(test_dir):os.mkdir(test_dir)
# 分别在train和test目录下创建4种类别的目录
for train_or_test in ['train', 'test']:for spec in species:path = os.path.join(base_dir, train_or_test, spec)os.mkdir(path)

6.将原始数据拷贝到创建的类别文件夹中 

# python中的自带的拷贝工具
import shutil

# 要判断一个图片属于哪个类别.
#'cloudy' in img

# 要把dataset中的图片全部拷贝到train, test目录下的4个子目录中. 
#enumerate() 将遍历对象产生对应的位置索引
#一般,训练数据多于测试数据
#每隔五个,就把一个原始数据放到test目录下,  即 每5个数据,就产生4个训练数据、1个测试数据,  训练数据:测试数据=4:1   
for i, img in enumerate(filenames):for spec in species:if spec in img:img_path = os.path.join(base_dir, img)if i % 5 == 0:path = os.path.join(base_dir, 'test', spec, img)else: path = os.path.join(base_dir, 'train', spec, img)shutil.copy(img_path, path)
# 打印每个类别训练数据和测试数据分别有多少图片
for train_or_test in ['train', 'test']:for spec in species:print(train_or_test, spec, len(os.listdir(os.path.join(base_dir, train_or_test, spec))))
train cloudy 240
train rain 172
train shine 202
train sunrise 286
test cloudy 60
test rain 43
test shine 51
test sunrise 71

6.使用torchvision 的transforms进行数据预处理 

from torchvision import transforms

6.1数据统一缩放resize、ToTensor 、正则化Normalize

transform = transforms.Compose([# 统一缩放到96 * 96transforms.Resize((96, 96)),transforms.ToTensor(),   #数据变成tensor, 0-1之间均匀分布 ,把图片数据的通道数放到第二维度# 正则化   标准化 : (一个数值-均值 )/ 标准偏差 #彩色图片RGB有三个通道,每个通道(ToTensor()使数都是0-1之间的数)分别减去均值0.5#std标准偏差transforms.Normalize(mean=[0.5, 0.5, 0.5], std=[0.5, 0.5, 0.5])
])

6.2用 torchvision.datasets.ImageFolder()加载数据集

torchvision.datasets.ImageFolder()用于加载图像数据集。它假设图像数据集的组织方式是按照类别进行文件夹分组,每个文件夹包含属于该类别的图像。这种组织方式使得ImageFolder能够自动识别和分类图像,并生成相应的标签‌ 

#torchvision.datasets.ImageFolder()返回的就是dataset

train_ds = torchvision.datasets.ImageFolder(train_dir, transform=transform)
train_ds
#torchvision.datasets.ImageFolder()输出返回的数据本身就是一个datatset,后续可以直接创建dataloader
Dataset ImageFolderNumber of datapoints: 900Root location: ./dataset/trainStandardTransform
Transform: Compose(Resize(size=(96, 96), interpolation=bilinear, max_size=None, antialias=True)ToTensor()Normalize(mean=[0.5, 0.5, 0.5], std=[0.5, 0.5, 0.5]))
test_ds = torchvision.datasets.ImageFolder(test_dir, transform=transform)train_ds.classes  #数据类别,  原数据有多少个文件夹就有多少个类别
['cloudy', 'rain', 'shine', 'sunrise']
train_ds.class_to_idx   #类别对应的索引数字
{'cloudy': 0, 'rain': 1, 'shine': 2, 'sunrise': 3}
len(train_ds)
900
len(test_ds)
225

 6.3创建dataloader

#在Python中没有常量,但全局变量一般会全大写:表示全局通用,值不变,当常量用
#在这里batch_size作为全局变量使用,可以全大写
batch_size = 32
train_dl = torch.utils.data.DataLoader(train_ds, batch_size=batch_size, shuffle=True, )
test_dl = torch.utils.data.DataLoader(test_ds, batch_size=batch_size)

6.4从迭代器dataloader中取一批数据 

imgs, labels = next(iter(train_dl))
imgs.shape
#transforms.ToTensor() 把图片数据的通道数放到第二维度,例如这里的3
# (batch_size, 通道数, 图片大小,图片大小)
torch.Size([32, 3, 96, 96])
labels
#用train_ds.class_to_idx 做了字典数字映射
tensor([3, 0, 3, 0, 2, 3, 1, 3, 0, 0, 2, 3, 3, 2, 0, 3, 3, 0, 3, 3, 3, 3, 1, 0,0, 0, 0, 1, 0, 1, 0, 3])
labels.dtype
torch.int64

相关文章:

pytorch框架实现cnn四种天气图片多分类问题-添加dropout和bn层

目录 1.导包 2.加载数据、拼接训练、测试文件夹 3. 查看当前目录下的所有文件名,以列表的形式输出 4.原数据集dataset中存在的数据的目标类别 5.创建train和test目录 及其需要分类的子文件夹 6.使用torchvision 的transforms进行数据预处理 6.1数据统一缩放resize、To…...

swift-11-init、deinit、可选链、协议、元类型

一、required 二、属性观察器 三、可失败初始化器 可以用init!定义隐式解包的可失败初始化器 可失败初始化器可以调用非可失败初始化器,非可失败初始化器调用可失败初始化器需要进行解包 如果初始化器调用一个可失败初始化器导致初始化失败 ,那么整个初…...

【力扣hot100题】(062)搜索插入位置

感觉自己对二分法还是没有很好掌握,主要在于边界问题,只会基本的搜索,如果要搜索比目标值大的第一个索引或者比目标值小的最后一个索引(或者换一些花里胡哨的题目)就完全不会了。 class Solution { public:int search…...

TCPIP详解 卷1协议 三 链路层

3.1——以太网和IEEE802局域网/城域网标准 以太网这个术语通常指一套标准,由DEC,Intel公司和Xerox公司在1980年首次发布,并在1982年加以修订。第一个常见格式的以太网,目前被称为10Mb/s以太网或共享以太网。它被IEEE采纳为802.3标…...

以太网安全

前言: 端口隔离可实现同一VLAN内端口之间的隔离。用户只需要将端口加入到隔离组中,就可以实现隔离组内端口之间的二层数据的隔离端口安全是一种在交换机接入层实施的安全机制,旨在通过控制端口的MAC地址学习行为,确保仅授权设备能…...

linux如何查看当前系统的资源占用情况

在 Linux 系统中,有多个命令可以查看当前系统的资源占用情况。以下是一些常用的命令及其说明: 1. 查看内存使用情况:free free -h-h 参数表示以人类可读的格式显示(如 MB, GB)。输出示例: to…...

人脸识别系统(人脸识别、前后端交互、Python项目)

基于Flask、Face_Recognition的人脸识别系统 项目介绍 基于flask、face_recognition的人脸识别系统。 本项目采用Face_Recognition库内置的ResNet-34预训练模型,其已对LFW公开数据集进行预训练而得到的模型。利用ResNet-34预训练模型,可使用少量已知人…...

2025 ArkTS语言开发入门之前言(二)

2025 ArkTS语言开发入门之前言(二) 前言 在上一节,咱们学习了如何下载并安装ArkTS的集成开发环境,这时候有的臭宝会发现,左边的这些叽里咕噜的是什么?下面,我来带着臭宝们来学习一下这些是什么…...

VLAN(虚拟局域网)

一、vlan概述 VLAN(virtual local area network)是一种通过逻辑方式划分网络的技术,允许将一个物理网络划分为多个独立的虚拟网络。每一个vlan是一个广播域,不同vlan之间的通信需要通过路由器或三层交换机 [!注意] vlan是交换机独有的技术,P…...

2025.4.6总结

今日记录:今天玩的有些累,先是去护肤店护理了脸部,然后去汉口江滩那看了看美景,吹吹江风。节假日去玩,光是挤一个半小时地铁都感觉累。还好上下班期间不用挤地铁,不然还真受不了。 假期小结 1.消费&#…...

【清明折柳】写在扬马三周目后

黄绿之间,方寸之外。 文章目录 楔子解耦到离散螃蟹与毒药文本的力量朝花夕拾后记 楔子 “——就像物理学家通过演绎与归纳将宏微世界的运转规律浓缩到数学公式中时,如今的人工智能也在试图量化整个人类文明。” “——只是,使用的是昂贵、笨…...

P1258 小车问题(二分)

题目描述 甲、乙两人同时从 A 地出发要尽快同时赶到 B 地。出发时 A 地有一辆小车,可是这辆小车除了驾驶员外只能带一人。已知甲、乙两人的步行速度一样,且小于车的速度。问:怎样利用小车才能使两人尽快同时到达。 输入格式 仅一行&#x…...

一个基于ragflow的工业文档智能解析和问答系统

工业复杂文档解析系统 一个基于ragflow的工业文档智能解析和问答系统,支持多种文档格式的解析、知识库管理和智能问答功能。 系统功能 1. 文档管理 支持多种格式文档上传(PDF、Word、Excel、PPT、图片等)文档自动解析和分块处理实时处理进度显示文档解析结果预览批量文档…...

负指数二项式展开

转载:负指数二项式展开_二项式负数次幂的展开式-CSDN博客...

CentOS 7服务器上快速安装mamba函数库

本次预配置虚拟环境为cuda 11.8torch 2.2.2python 3.10 1. 创建conda虚拟环境:conda create -n mamba python3.10 激活环境:conda activate mamba 2. 安装Pytorch环境: conda install pytorch2.2.2 torchvision0.17.2 torchaudio2.2.2 py…...

ResNet改进(18):添加 CPCA通道先验卷积注意力机制

1. CPCA 模块 CPCA(Channel Prior Convolutional Attention)是一种结合通道先验信息的卷积注意力机制,旨在通过显式建模通道间关系来增强特征表示能力。 核心思想 CPCA的核心思想是将通道注意力机制与卷积操作相结合,同时引入通道先验知识,通过以下方式优化特征学习: 通…...

代码随想录算法训练营--打卡day6

一.四数相加 1.题目链接 454. 四数相加 II - 力扣(LeetCode) 2.思路 使用 HashSet 无法记录每种和出现的次数,当不同的 (nums1[i], nums2[j]) 组合得到相同的和时,会出现统计错误。这里应该使用 HashMap 来记录和以及其出现的…...

edge webview2 runtime跟Edge浏览器软件安装包双击无反应解决方法

软件安装报错问题有需要远程文章末尾获取联系方式,可以帮你远程处理各类安装报错。 一 、edge webview2 runtime跟Edge浏览器软件安装包双击无反应 在安装edge webview2 runtime跟Edge浏览器双击无反应没有出现安装界面。这个可能是 新版本的Edge WebView2 Runti…...

Xorg 内存上涨的根源探究

Xorg 内存上涨的根源探究 起因 在同一客户端进程内显示多股视频源,通过SDL创建窗口渲染,由于网络抖动视频源出现频繁断流现象导致,渲染任务反复重启,从而导致SDL渲染窗口反复创建释放,最后导致Xorg内存持续上涨 排查准备 Xorg是什么? Xorg(X.Org Server)是 X Wind…...

Neo4j基本命令使用

neo4j neo4j简介安装可视化管理后台登录 Cyphercreatematchmergecreate创建关系merge创建关系wheredelete sort命令字符串函数toUpper()函数toLower()函数substring()函数replace()函数 聚合函数count()函数max()函数min()函数sum()函数avg()函数索引index python 中使用neo4j …...

Python爬虫教程009:requests的基本使用以及get和post请求的使用

文章目录 5.1 基本使用5.2 get请求5.3 post请求5.1 基本使用 在 Python 爬虫开发中,requests 是一个非常流行、简单易用的 HTTP 库,用于发送网络请求。它可以让你方便地抓取网页内容、提交表单、上传文件等。 🔧安装: pip install requestsresponse的属性及类型: resp…...

SQL练习

目录 1.查询" 01 "课程比" 02 "课程成绩高的学生的信息及课程分数 2.查询平均成绩大于等于 60 分的同学的学生编号和学生姓名和平均成绩 3.查询在 SC 表存在成绩的学生信息 4.查询所有同学的学生编号、学生姓名、选课总数、所有课程的总成绩(没成绩的显…...

ubuntu20.04 复现fastlio2 并运行数据包

1.搭建文件目录和拷贝代码 mkdir -p Fastlio2/src cd Fastlio2/src git clone https://github.com/hku-mars/FAST_LIO.git git clone https://github.com/Livox-SDK/livox_ros_driver.git 2.到工作空间下编译 cd .. catkin_make 报错1: 解决方案1: …...

Windows安装 PHP 8 和mysql9,win下使用phpcustom安装php8.4.5和mysql9

百度搜索官网并下载phpcustom,然后启动环境,点击网站管理 里面就有php8最新版,可以点mysql设置切mysql9最新版,如果你用最新版无法使用,说明你的php程序不支持最新版的mysql MySQL 9.0 引入了一些新的 SQL 模式和语法变…...

【失配树 KMP+树上倍增】P5829失配树|省选-

本文涉及知识点 较难理解的字符串查找算法KMP 树上倍增 P5829 【模板】失配树 题目描述 给定一个字符串 s s s,定义它的 k k k 前缀 p r e k \mathit{pre}_k prek​ 为字符串 s 1 … k s_{1\dots k} s1…k​, k k k 后缀 s u f k \mathit{suf}_…...

机器学习模型性能提升教程(特征工程和模型优化)

特征工程和模型优化是提升机器学习模型性能的核心步骤,以下从特征工程和模型优化两个维度,结合具体案例展开说明: 一、特征工程 特征工程的核心目标是从原始数据中提取更有价值的信息,常见方法包括特征选择、特征构造和特征转换。…...

跨域问题前端解决

由于浏览器的同源策略,前后端分离的项目,调试的时候总是会遇到跨域的问题,这里通过修改前端代码解决跨域问题。 首先先查看前端代码的根目录下,有没有vue.config.js文件, 若有,使用方法1,若没有此文件&…...

每天五分钟深度学习框架pytorch:搭建LSTM完成时间序列的预测

本文重点 前面一篇文章我们使用了pytorch搭建了循环神经网络LSTM然后完成了手写字体识别的任务,本文我们使用LSTM完成一个时间序列的任务。 数据集介绍 数据集如图所示,其中有一列是时间,然后还有一列是对应时间的起飞航班数,它可以看成是一个时间序列,通过前面t时间的起…...

Autosar应用层开发基础——Arxml制作

Davinci软件的主要作用 (1) AUTOSAR 软件架构设计 图形化建模:支持 SWC(Software Component)设计、接口定义、端口连接等。 分层架构管理:清晰划分 应用层(SWC) 和 基础软件层(BSW&#xff09…...

Word 页眉设置(不同章节不同页眉)

需求分析 要给文档设置页眉,但是要不同的页眉不同的页眉 问题点:一旦设置页眉 每个页眉都是一样的 现在要设置不一样的 设置了页眉但是整个文章的页眉都一样 问题解决 取消链接 前一节(不和前面的页眉同步更新) 小结 不同的…...

Redis的Java客户端的使用

Redis 的 Java 客户端使用 C 追求极致的性能, 而 Java没有这样的追求. Redis 在官网公开了所使用的应用层协议 (RESP). 任何一个第三方都可以通过这个协议, 来实现出一个和 Redis 服务器通信的客户端程序. 已经有很多大佬, 做好了库, 可以让我们直接调用 (不必关注 RESP 协议…...

双向链表示例

#include <stdio.h> #include <stdlib.h>// 定义双向链表节点结构体 typedef struct list {int data; // 数据部分struct list *next; // 指向下一个节点的指针struct list *prev; // 指向前一个节点的指针 } list_t;// 初始化链表&#xff0c;将链表的…...

Unity如何把一个物体下物体复制很多到别的物体下

C# 脚本批量复制 如果需批量复制到多个父物体下&#xff0c;推荐用脚本实现&#xff1a; using UnityEngine;public class CopyChildren : MonoBehaviour {// 原父物体&#xff08;拖拽赋值&#xff09;public Transform sourceParent;// 目标父物体数组&#xff08;可拖拽多个…...

Java Properties 类详解

Java Properties 类详解 Properties 是 Java 中用于处理 键值对配置文件 的特殊类&#xff0c;继承自 Hashtable<Object,Object>。以下是其核心知识点&#xff1a; 1. 核心特性 特性说明存储格式纯文本文件&#xff08;.properties&#xff09;&#xff0c;每行 keyval…...

进程内存分布--之理论知识

一个由C/C编译的程序占用的内存分为以下几个部分 &#xff1a; 1、栈区&#xff08;stack&#xff09;&#xff1a;由编译器自动分配释放 &#xff0c;存放函数调用函数的参数值&#xff0c;局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区&#xff08;heap&#xf…...

TDengine 窗口预聚集

简介 在大数据量场景下&#xff0c;经常需要查询某段时间内的汇总结果&#xff0c;当历史数据变多或者时间范围变大时&#xff0c;查询时间也会相应增加。通过预聚集的方式可以将计算结果提前存储下来&#xff0c;后续查询可以直接读取聚集结果&#xff0c;而不需要扫描原始数…...

高精度加法与乘法

原理就是模拟我们列竖式的过程。 一、加法 加法很简单&#xff0c;我们这里不再赘述 string solve(string s, string t) {string ans;int tmp 0;int n s.size()-1;int m t.size()-1;while(n>0||m>0||tmp){if(n>0){tmp s[n--]-0;}if(m>0){tmp t[m--]-0;}ans…...

macOS可视化桌面配置docker加速器

macOS可视化桌面配置docker加速器 在镜像settings->docker Engine改为国内镜像修改为国内镜像重启docker(可视化界面启动或者使用命令行)使用命令重启可视化界面重启 在镜像settings->docker Engine改为国内镜像 修改为国内镜像 {"registry-mirrors": ["…...

不用训练,集成多个大模型产生更优秀的输出

论文标题 Collab: Controlled Decoding using Mixture of Agents for LLM Alignment 论文地址 https://arxiv.org/pdf/2503.21720 作者背景 JP摩根&#xff0c;马里兰大学帕克分校&#xff0c;普林斯顿大学 动机 大模型对齐&#xff08;alignment&#xff09;的主要目的…...

【大模型】DeepSeek + 蓝耕MaaS平台 + 海螺AI生成高质量视频操作详解

目录 一、前言 二、蓝耘智能云MaaS平台介绍 2.1 蓝耘智算平台是什么 2.2 平台优势 2.3 平台核心能力 三、海螺AI视频介绍 3.1 海螺AI视频是什么 3.2 海螺AI视频主要功能 3.3 海螺AI视频应用场景 3.4 海螺AI视频核心优势 3.5 项目git地址 四、蓝耘MaaS平台DeepSeek海…...

RobotFrameWork环境搭建及使用

RF环境搭建 首先安装python并且配置python环境变量pip install robotframeworkpip install robotframework-ride 生产桌面快捷方式 不行换豆瓣源检查一下pip list RF类库和扩展库 标准库 按F5快捷键查询&#xff0c;可以看到rf自带的库不需要额外安装这些标准库在python的 …...

Flutter之设计与主题字体

目录&#xff1a; 1、共享主题样式2、文字3、使用自定义字体4、以 package 的方式使用字体1. 将字体添加到 package2. 将 package 和字体添加到应用3. 使用字体 1、共享主题样式 MaterialApp(title: appName,theme: ThemeData(// Define the default brightness and colors.col…...

发生梯度消失, 梯度爆炸问题的原因,怎么解决?

目录 一、梯度消失的原因 二、梯度爆炸的原因 三、共同的结构性原因 四、解决办法 五、补充知识 一、梯度消失的原因 梯度消失指的是在反向传播过程中&#xff0c;梯度随着层数的增加指数级减小&#xff08;趋近于0&#xff09;&#xff0c;导致浅层网络的权重几乎无法更新…...

脑电学习笔记

一&#xff0c;原理简介 使用eprime或者matlab给被试呈现刺激&#xff0c;并在某个时间发送Mark&#xff0c;脑电帽会同步采集被试的脑电信号&#xff0c;经放大器放大后&#xff0c;控制盒会把脑电信号和mark 信号同步到一起&#xff0c;通过usb线传入到采集系统&#xff08;比…...

Java面试黄金宝典37

1. 转发与重定向的区别 定义 转发:服务器内部的一种请求处理方式,当客户端向服务器发送请求后,服务器将该请求转发到另一个资源(如 JSP、Servlet)进行处理,整个过程在服务器端完成,客户端并不知道请求被转发,且使用的是同一个请求对象和响应对象。重定向:服务器向客户…...

嵌入式rodata段

在嵌入式软件开发中&#xff0c;将数据放入只读数据段&#xff08;.rodata&#xff09;具有以下好处及典型应用示例&#xff1a; 好处 数据保护 .rodata段的内容在程序运行时不可修改&#xff0c;防止意外或恶意篡改&#xff0c;提升系统稳定性。 节省RAM资源 只读数据可直接…...

Python学习之numpy

Python学习之numpy 数组是Numpy库的核心数据结构。 NumPy 是一个 Python 包。 它代表 “Numeric Python”。 它是一个由多维数组对象和用于处理数组的例程集合组成的库。 Numeric&#xff0c;即 NumPy 的前身&#xff0c;是由 Jim Hugunin 开发的。 也开发了另一个包 Numarr…...

ext4磁盘扩容

ext4扩容示例 当前虚机中&#xff0c;逻辑卷名称data_lv&#xff0c;卷组名称data_vg&#xff0c;物理卷名称data_pv&#xff0c;他们的大小都为100G&#xff0c;由于磁盘空间不够使用&#xff0c;申请扩容硬盘至200G&#xff0c;以下操作将ext4的/data分区扩容至200G。 # 1.…...

PostgreSQL 16深度解析(从16.0-16.8)

作为开源关系型数据库的标杆&#xff0c;PostgreSQL持续通过版本迭代展现其技术生命力。本文将以技术视角深度剖析PostgreSQL 16系列&#xff08;16.0至16.8&#xff09;的核心演进&#xff0c;重点解读新增功能、性能优化及实践价值&#xff0c;为数据库管理者与开发者提供升级…...

10个DeepSeek、ChatGPT提示词更快更好的学术文献阅读!

目录 AIGC助力快速阅读文献 10个文献阅读提示词 大家好这里是AIWritePaper官方账号&#xff0c;官网&#x1f449;AIWritePaper~ AIGC助力快速阅读文献 在当今学术界&#xff0c;海量的论文如潮水般涌来&#xff0c;想要跟上最新研究进展简直比在图书馆里找到一本没被借走的…...