范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

用Pytorch构建第一个神经网络模型(附案例实战)

  目录
  一、Pytorch简介
  二、实验过程
  2.1数据集介绍
  2.2加载数据
  2.3数据预处理
  2.3.1特征转换
  2.3.2缺失值处理
  2.3.3样本不平衡处理
  2.4特征工程
  2.4.1划分训练集和测试集
  2.4.2数据类型转换
  2.5构建模型
  2.5.1可视化神经元
  2.5.2激活函
  2.5.3训练神经网络
  2.6保存模型
  2.7模型评估
  2.8模型预测
  三、总结
  一、Pytorch简介
  PyTorch是一个基于python的科学计算包,主要针对两类人群:
  作为NumPy的替代品,可以利用GPU的性能进行计算
  作为一个高灵活性、速度快的深度学习平台
  在PyTorch中搭建神经网络并使用真实的天气信息预测明天是否会下雨。
  预处理 CSV 文件并将数据转换为张量
  PyTorch是一个基于python的科学计算包,主要针对两类人群:
  作为NumPy的替代品,可以利用GPU的性能进行计算
  作为一个高灵活性、速度快的深度学习平台
  在PyTorch中搭建神经网络并使用真实的天气信息预测明天是否会下雨。
  预处理 CSV 文件并将数据转换为张量
  使用 PyTorch 构建神经网络模型
  使用 PyTorch 构建神经网络模型
  使用损失函数和优化器来训练模型
  评估模型并了解分类不平衡的危害
  在开始构建神经网络之前,首先了解一下几个重要概念。
  torch.Tensor
  一个多维数组,支持诸如backward()等的自动求导操作,同时也保存了张量的梯度。
  nn.Module
  神经网络模块。是一种方便封装参数的方式,具有将参数移动到GPU、导出、加载等功能。
  nn.Parameter
  张量的一种,当它作为一个属性分配给一个Module时,它会被自动注册为一个参数。
  autograd.Function
  实现了自动求导前向和反向传播的定义,每个Tensor至少创建一个Function节点,该节点连接到创建Tensor的函数并对其历史进行编码。
  二、实验过程
  2.1数据集介绍
  数据集包含来自多个澳大利亚气象站的每日天气信息。本次目标是要回答一个简单的问题:明天会下雨吗?
  2.2加载数据
  首先导入本次实验用到的第三方库 import torch   import os import numpy as np import pandas as pd from tqdm import tqdm import seaborn as sns from pylab import rcParams import matplotlib.pyplot as plt from matplotlib import rc from sklearn.model_selection import train_test_split from sklearn.metrics import confusion_matrix, classification_report from torch import nn, optim import torch.nn.functional as F   %matplotlib inline %config InlineBackend.figure_format="retina"   sns.set(style="whitegrid", palette="muted", font_scale=1.2) HAPPY_COLORS_PALETTE = ["#01BEFE", "#FFDD00", "#FF7D00", "#FF006D", "#93D30C", "#8F00FF"] sns.set_palette(sns.color_palette(HAPPY_COLORS_PALETTE)) rcParams["figure.figsize"] = 12, 6 RANDOM_SEED = 42 np.random.seed(RANDOM_SEED) torch.manual_seed(RANDOM_SEED)
  接下来先通过Pandas读取导入数据集  df = pd.read_csv("./data/weatherAUS.csv") df.head()
  这里有很多特征列。也有很多NaN。下面来看看整体数据集大小。  df.shape
  (145460, 23)
  从数据集形状看,这里数据还不少,超过14.5w条数据。
  2.3数据预处理
  在数据预处理这,我们并不希望数据集和目标问题有多复杂,尝试将通过删除大部分数据来简化这个问题。这里只使用4个特征来预测明天是否会下雨。在你实际案例中,根据实际问题,特征数量可以比这多,也可以比这少,只要注意下面输入数据维度即可。cols = ["Rainfall", "Humidity3pm", "Pressure9am", "RainToday", "RainTomorrow"] df = df[cols]
  2.3.1特征转换
  因为神经网络只能处理数字。所以我们将把文字的 yes 和 no 分别转换为数字1 和 0。 df["RainToday"].replace({"No": 0, "Yes": 1}, inplace = True) df["RainTomorrow"].replace({"No": 0, "Yes": 1}, inplace = True)
  2.3.2缺失值处理
  删除缺少值的行。也许会有更好的方法来处理这些缺失的行,但我们这里将简单地处理,直接删除含有缺失值的行。 df = df.dropna(how="any") df.head()
  2.3.3样本不平衡处理
  到目前为止,我们有了一个可以使用的数据集。这里我们需要回答的一个重要问题是 -- 我们的数据集是否平衡? 或者 明天到底会下多少次雨?
  因此通过sns.countplot函数直接定性分析整个样本集中是否下雨分别多少次,以此判断正负样本(是否有雨)是否平衡。 sns.countplot(df.RainTomorrow);
  从结果看,下雨次数明显比不下雨次数要少很多。再通过具体定量计算正负样本数。 df.RainTomorrow.value_counts() / df.shape[0]
  0.0 0.778762
  1.0 0.221238
  Name: RainTomorrow, dtype: float64
  事情看起来不妙。约78%的数据点表示明天不会下雨。这意味着一个预测明天是否下雨的模型在78%的时间里是正确的。
  如果想要解决此次样本不平衡可以采用欠采样或过采样处理,以缓解其带来的影响,我们暂不做任何处理,但愿他对结果影响不大。
  2.4特征工程
  2.4.1划分训练集和测试集
  数据预处理的最后一步是将数据分割为训练集和测试集。这一步大家应该并不陌生,可以直接使用train_test_split()。 X = df[["Rainfall", "Humidity3pm", "RainToday", "Pressure9am"]] y = df[["RainTomorrow"]]  X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=RANDOM_SEED)
  2.4.2数据类型转换
  为了符合 PyTorch 所需求的数据类型。使用 python标准库将数据加载到numpy数组里。然后将这个数组转化成将全部数据转换为张量(torch.Tensor)。
  注意:Torch张量和NumPy数组将共享它们的底层内存位置,因此当一个改变时,另外也会改变。  X_train.head()
  PyTorch中也是非常方便,直接通过from_numpy直接转换。X_train = torch.from_numpy(X_train.to_numpy()).float() y_train = torch.squeeze(torch.from_numpy(y_train.to_numpy()).float())  X_test = torch.from_numpy(X_test.to_numpy()).float() y_test = torch.squeeze(torch.from_numpy(y_test.to_numpy()).float())  print(X_train.shape, y_train.shape) print(X_test.shape, y_test.shape)
  torch.Size([99751, 4]) torch.Size([99751])
  torch.Size([24938, 4]) torch.Size([24938])
  到目前为止,所有数据准备工作已经结束。
  2.5构建模型
  接下来我们将使用PyTorch建立一个简单的神经网络(NN),尝试预测明天是否会下雨。本次构建的神经网络结构分为三个层,输入层、输出层和隐藏层。
  输入层: 我们的输入包含四列数据:"Rainfall, Humidity3pm, RainToday, Pressure9am"(降雨量,湿度下午3点,今天下雨,压力上午9点)。将为此创建一个适当的输入层。
  输出层: 输出将是一个介于 0 和 1 之间的数字,代表模型认为明天下雨的可能性。预测将由网络的输出层提供给我们。
  隐藏层: 将在输入层和输出层之间添加两个隐藏层。这些层的参数(神经元)将决定最终输出。所有层都将是全连接的,即全连接层。
  一个神经网络的典型训练过程如下:
  定义包含一些可学习参数(或者叫权重)的神经网络
  在输入数据集上迭代
  通过网络处理输入
  计算loss(输出和正确答案的距离)
  将梯度反向传播给网络的参数
  更新网络的权重,一般使用一个简单的规则:weight = weight - learning_rate * gradient
  可以使用torch.nn包来构建神经网络。即使用 PyTorch 构建神经网络的一种简单方法是创建一个继承自 torch.nn.Module 的类。
  这里将nn.Module子类化(它本身是一个类并且能够跟踪状态)。在这种情况下,我们要创建一个类,该类包含前进步骤的权重,偏差和方法。nn.Module具有许多我们将要使用的属性和方法(例如.parameters()和.zero_grad())。class Net(nn.Module):       def __init__(self, n_features):         super(Net, self).__init__()         self.fc1 = nn.Linear(n_features, 5)         self.fc2 = nn.Linear(5, 3)         self.fc3 = nn.Linear(3, 1)       def forward(self, x):         x = F.relu(self.fc1(x))         x = F.relu(self.fc2(x))         return torch.sigmoid(self.fc3(x))
  我们只需要定义 forward 函数,backward函数会在使用autograd时自动定义,backward函数用来计算导数。我们可以在 forward 函数中使用任何针对张量的操作和计算。
  2.5.1可视化神经元
  这里的可视化神经元主要基于https://github.com/Prodicode/ann-visualizer net = Net(X_train.shape[1]) # pip install graphviz # mac上安装graphviz 需要用 brew install graphviz  ann_viz(net, view=True)
  我们首先在构造函数中创建模型的层。forward()方法是奇迹发生的地方。它接受输入 并允许它流过每一层。有一个相应的由PyTorch定义到向后传递backward()方法,它允许模型从当前发生的误差中学习,并修正模型参数。
  2.5.2激活函数
  细心的小伙伴可能会注意到构建的神经网络中调用 F.relu 和 torch.sigmoid 。这些是激活函数,那我们为什么需要这些?
  神经网络的一个很酷的特性是它们可以近似非线性函数。事实上,已经证明它们可以逼近任何函数。不过,如果想通过堆叠线性层来逼近非线性函数,此时就需要激活函数。激活函数可以让神经网络摆脱线性世界并学习更多。通常将其应用于某个层的输出。
  ReLU
  从最广泛使用的激活函数之一的 ReLU 定义开始:
  该激活函数简单易行,其结果就是输入值与零比较,得到的最大值。
  从可视化结果看 ax = plt.gca() plt.plot(   np.linspace(-1, 1, 5),    F.relu(torch.linspace(-1, 1, steps=5)).numpy() ) ax.set_ylim([-1.5, 1.5]);
  Sigmoid
  它被定义为:
  当需要进行二元决策 / 分类(回答yes或no)时,sigmoid 函数是很有用的。sigmoid 以一种超级的方式将输入值压缩在 0 和 1 之间。
  从可视化结果看  ax = plt.gca()   plt.plot(   np.linspace(-10, 10, 100),    torch.sigmoid(torch.linspace(-10, 10, steps=100)).numpy() ) ax.set_ylim([-0.5, 1.5]);
  2.5.3训练神经网络
  目前为止,我们已经看到了如何定义网络,接下来需要找到预测明天是否会下雨的参数。即需要找到该模型应用于此次问题的最佳参数。而要想做到这点,首先需要一些评价指标来告诉我们,该模型目前做得有多好。接下来需要计算损失,并更新网络的权重。
  损失函数
  一个损失函数接受一对(output, target)作为输入,计算一个值来估计网络的输出和目标值相差多少。BCELoss是一个损失函数,其度量两个向量之间的差。 criterion = nn.BCELoss()
  而在我们的例子中,这两个向量即是我们的模型的预测和实际值。该损失函数的期望值由 sigmoid 函数输出。该值越接近 0,模型效果越好。
  但是我们如何找到最小化损失函数的参数呢?
  优化器
  假设我们的神经网络的每个参数都是一个旋钮。优化器的工作是为每个旋钮找到完美的位置,使损失接近0。实战中,模型可能包含数百万甚至数十亿个参数。有这么多旋钮要转,如果有一个高效的优化器可以快速找到解决方案,那就完美了。而理想很丰满,现实很骨感。深度学习中的优化效果只能达到令人满意的结果。在实践中,可以提供可接受的准确性的足够好的参数,就应该心满意足了。在使用神经网络时,PyTorch中提供了许多经过良好调试过的优化器,可能希望使用各种不同的更新规则,如SGD、Nesterov-SGD、Adam、RMSProp等。虽然你可以从这些优化器中选择,一般情况下,首选的还是Adam。 optimizer = optim.Adam(net.parameters(), lr=0.001)
  一个模型的可学习参数可以通过net.parameters()。
  自然地,优化器需要输入参数。第二个参数lr 是 learning rate (学习率),这是要找到的最优参数和到达最优解的速度之间的权衡。而为此找到最优解的方法或过程可能是黑魔法和大量的暴力"实验"。
  在 GPU 上计算
  在 GPU 上进行大规模并行计算是现代深度学习的推动因素之一。为此,您将需要配置 NVIDIA GPU。如果你的设备上装有GPU,PyTorch 中可以非常轻松地将所有计算传输到 GPU。
  我们首先检查 CUDA 设备是否可用。然后,我们将所有训练和测试数据传输到该设备。最后移动模型和损失函数。张量可以使用.to方法移动到任何设备(device)上。 device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")   X_train = X_train.to(device) y_train = y_train.to(device)   X_test = X_test.to(device) y_test = y_test.to(device)   net = net.to(device) criterion = criterion.to(device)
  寻找最优参数
  拥有损失函数固然很好,追踪模型的准确性是一件更容易理解的事情,而一般通过定义准确性来做模型评价。 def calculate_accuracy(y_true, y_pred): predicted = y_pred.ge(.5).view(-1) return (y_true == predicted).sum().float() / len(y_true)
  我们定义一个预值,将连续概率值转换为二分类值。即将每个低于 0.5 的值转换为 0,高于0.5的值设置为 1。最后计算正确值的百分比。所有的模块都准备好了,我们可以开始训练我们的模型了。 def round_tensor(t, decimal_places=3):     return round(t.item(), decimal_places)   for epoch in range(1000):         y_pred = net(X_train)     y_pred = torch.squeeze(y_pred)     train_loss = criterion(y_pred, y_train)          if epoch % 100 == 0:         train_acc = calculate_accuracy(y_train, y_pred)           y_test_pred = net(X_test)         y_test_pred = torch.squeeze(y_test_pred)           test_loss = criterion(y_test_pred, y_test)         test_acc = calculate_accuracy(y_test, y_test_pred)         print(f"""epoch {epoch}               Train set - loss: {round_tensor(train_loss)}, accuracy: {round_tensor(train_acc)}               Test  set - loss: {round_tensor(test_loss)}, accuracy: {round_tensor(test_acc)}               """)          optimizer.zero_grad()  # 清零梯度缓存     train_loss.backward() # 反向传播误差     optimizer.step()  # 更新参数
  在训练期间,我们向模型传输数据共计10,000次。每次测量损失时,将误差传播到模型中,并要求优化器找到更好的参数。用 zero_grad() 方法清零所有参数的梯度缓存,然后进行随机梯度的反向传播。如果忽略了这一步,梯度将会累积,导致模型不可用。测试集上的准确率为 83.4% 听起来挺合理,但可能要让你失望了,这样的结果并不是很理想,接下来看看是如何不合理。但首先我们需要学习如何保存和加载训练好的模型。
  2.6保存模型
  训练一个好的模型可能需要很多时间。可能是几周、几个月甚至几年。如果在训练过程了忘记保存,或不知道需要保存模型,这将会是非常痛苦的事情。因此这里需要确保我们知道如何保存宝贵的工作。其实保存很容易,但你不能忘记这件事。 MODEL_PATH = "model.pth" # 后缀名为 .pth torch.save(net, MODEL_PATH) # 直接使用torch.save()函数即可
  当然恢复模型也很容易,直接使用 torch.load() 函数即可。 net = torch.load(MODEL_PATH)
  2.7模型评估
  如果知道你的模型会犯什么样的错误不是很好吗?当然,这一点是非常难做到的。但是你可以通过一定的方法得到一个估计值。而仅使用准确性来评估并不是一个好方法,尤其在样本不平衡的二分类数据集上。仔细回想一下,我们的数据是一个很不平衡的数据集,其几乎不包含明天会降雨样本。深入研究模型性能的一种方法是评估每个类的精确度和召回率。在我们的例子中,将是结果标签分别是 no rain 和 rain  。classes = ["No rain", "Raining"]  y_pred = net(X_test) y_pred = y_pred.ge(.5).view(-1).cpu() y_test = y_test.cpu()  print(classification_report(y_test, y_pred, target_names=classes))
  精确度最大值为1,表明该模型只适用于识别相关的样本。召回率最大值为1,表示模型可以在这个类的数据集中找到所有相关的示例。可以看到模型在无雨类方面表现良好,因为样本中无雨类样本数量较大。不幸的是,我们不能完全相信有雨类的预测,因为样本不平衡导致模型倾向于无雨类。可以通过查看一个简单的混淆矩阵来评估二分类效果。 cm = confusion_matrix(y_test, y_pred) df_cm = pd.DataFrame(cm, index=classes, columns=classes)  hmap = sns.heatmap(df_cm, annot=True, fmt="d") hmap.yaxis.set_ticklabels(hmap.yaxis.get_ticklabels(), rotation=0, ha="right") hmap.xaxis.set_ticklabels(hmap.xaxis.get_ticklabels(), rotation=30, ha="right") plt.ylabel("True label") plt.xlabel("Predicted label");
  你可以清楚地看到,当我们的模型预测要下雨时,我们应该抱有怀疑的态度。
  2.8模型预测
  使用一些假设的例子上测试下模型。 def will_it_rain(rainfall, humidity, rain_today, pressure): t = torch.as_tensor([rainfall, humidity, rain_today, pressure])  .float()  .to(device) output = net(t) return output.ge(0.5).item()
  这个函数将根据模型预测返回一个布尔值。让我们试试看:will_it_rain(rainfall=10, humidity=10, rain_today=True, pressure=2) >>> Truewill_it_rain(rainfall=0, humidity=1, rain_today=False, pressure=100) >>> False
  根据一些参数得到了两种不同的返回值。到这里为止,模型已准备好部署来,但实际情况下,请不要匆忙部署,因为该模型并不是一个最佳的状态,只是用来掩饰如何使用PyTorch搭建模型!
  三、总结
  如果你看到这里,将给你点个赞!因为你现在成功搭建了一个可以预测天气的神经网络深度学习模型。虽然此次用PyTorch搭建的深度学习模型是一个入门级别的模型,但其他更加复杂的神经网络模型的核心步骤与此类似。
  说实话,构建性能良好的模型真的很难,但在多次搭建模型过程中,你会不断学到一些技巧,并能够不断进步,这将会帮助你以后做的更好。
  该素材来源于网络,若有侵权联系删除!

身体健康标准,自己符合几条?前几天学习一个中医健康标准,包含吃喝拉撒睡和身体寒热等六个方面。我把这些健康标准罗列下1吃吃饭吃得健康标准,不能胃口太好不能没有胃口。吃分为胃口太好没有胃口饿又吃不下打嗝等不同情况秋冬季节,穿着细高跟单鞋,衬托身材,也能提升气质头条创作挑战赛精致的美女,要知道怎么搭配,穿搭也要衬托自己身材,这位美女选择一款黑色的长裤,有点微喇叭裤的设计,搭配黑色尖头细跟单鞋,金属的细跟,非常有质感,6厘米的高度,不会很累健康养生指南!这种水果清脆爽口还能冬季养生,赶快收藏健康养生指南!这种水果清脆爽口还能冬季养生,赶快收藏水果是一种很健康的食物,大家都知道,但是到底哪种水果的营养价值是比较高的,可能很多朋友还不知道。冬枣这种很常见,而且很容易被大家盐氧护冬季保护孩子呼吸道,这8点常识被很多宝妈忽略时间过得真快仿佛前不久还在吹空调吃西瓜突然间就入冬了冬衣还在翻找猝不及防地又将和寒冷正面撞上换季寒流的双重压力是对孩子体质的巨大考验保护呼吸道就成为重中之重做好这8点让孩子远离生病喝水后频繁小便的人,和半天没尿意的人,哪种人身体更健康一些?中医认为水能补阴养阴,是滋阴生津的第一天然食材,并视喝水为人的第一养生法。俗话说得好人有三急,三急来了,挡都挡不住,我们每天往身体里输送的食物和水分,身体并不是都能够吸收掉,所产生经常吃夜宵对身体的危害有哪些?太危险了晚上吃夜宵,是一个非常不好的习惯。每个人都需要一个规律饮食的好习惯,规律饮食,是指不可过饥也不可过饱,如果不良饮食,经常吃夜宵,对身体和胃都会受到一个很大的负担。影响睡眠晚上吃夜宵利拉德缺阵格兰特27分开拓者主场击退鹈鹕头条创作挑战赛北京时间11月11日,NBA常规赛继续进行,开拓者主场以10695击败了鹈鹕。杰里米格兰特拿下了27分8个篮板,安芬尼西蒙斯得了23分6次助攻,约什哈特17分。主将利大衣打底裤太土!今年流行这4种大衣搭配,时髦保暖又显瘦秋日生活打卡季秋色已暮,凛冬将至,在这个秋季浪漫和初冬厚重交织的时节,就把时尚的主场放心交给大衣吧被温暖和时髦同时捧在心尖上是什么感受?来试试今年最流行的这四种大衣搭配就知道了。能聚焦亮点与肌肤相随相伴,ALBION澳尔滨亮相第五届中国国际博览会日前,日本殿堂级美妆品牌ALBION澳尔滨首次以集团身份亮相第五届中国国际进口博览会,现场除了展示ALBION本牌以外,还首次展示了集团旗下两大彩妆品牌PaulJoeANNASUI科勒卡戴珊的小蛮腰在大幅减重后比模特还小真人秀明星科勒卡戴珊在今年早些时候为MetGala改造了自己的身材后获得了巨大的赞誉Khloe卡戴珊的减重让她瘦到比模特还小在真人秀节目的场景中,Kim和Khloe在Khloe的家高频机芯PK,谁的表现最亮眼?腕表之家钟表技术振频即摆轮每小时摆动的次数,目前多数机芯的振频为28800vhpHz,通常人们把数值超过28800的机芯称为高频机芯。振频越高意味着机芯所能指示的精度也就越高振频2
德利赫特感谢滕哈格和尤文3位主帅,愿当后防领袖并会担责TheAthleticUK德国方面著名记者蜜石独家专访拜仁中卫德利赫特。拜仁让他当后防领袖是一种负担吗?不。(拜仁)向我表达的这种观点正是我喜欢听的话。我是个很好的中卫,但是我可以新时代新征程新伟业坚定不移推动高质量发展全力拼经济加速高质量发展脉动视频加载中连日来,山东各地加力提速工业经济高质量发展,生产建设一线热火朝天,为实现首季开门红打下坚实基础。来看记者的现场报道。5G信号指引人工智能调度,机器人8分钟自动锁定130颗动漫海报丨今年如何让农民的钱袋子鼓起来?光明网讯(记者陶媛)增加农民收入是三农工作的中心任务。2022年,我国农民人均可支配收入首次突破2万元大台阶,达到20133元,城乡收入差距也在逐步缩小。今年,中央一号文继续聚焦三宝丰能源2月15日大宗交易成交544。00万元宝丰能源2月15日大宗交易平台出现一笔成交,成交量40。00万股,成交金额544。00万元,大宗交易成交价为13。60元,相对今日收盘价折价9。21。该笔交易的买方营业部为恒泰证券一天两进出入境大厅她为何由哭转笑?原来她有个助企联络官的好闺蜜!急着凭护照和签证订去西班牙总公司的机票参加商务活动,办好的西班牙签证护照从北京签证中心寄往嘉善的过程中找不到了,她是心急如焚愁容满面,按程序按常理,她应该去找物流快递,或重新补办。宅男财经楼市迎利好?多省将开展现房销售试点视频加载中1月17日,全国住房和城乡建设工作会议召开,其中明确提出有条件的可以进行现房销售。在近一个月内,山东安徽四川河南等省份纷纷表态,将在2023年开展现房销售试点。目前商品房太原太山雪景航拍大图赏2023年春节后第二场大雪降临,雪后太山,大雪覆盖,银装空濛的景象!太山南连龙山北接蒙山,山坳清幽,高峰入云,石径曲折,清溪蜿蜒,满山虬柏森森,阴翳葱郁,大有飘飘欲仙之境。近观树高厦门百花齐放百鸟流连厦门市湖里区灯塔公园内,紫罗兰花朵成串绽放。许秋珩摄人民网厦门2月14日电(陈博余乃鎏)引人入胜满城春,无边光景一时新。立春过后,海上花园城市厦门,处处春和景明生机勃发。一花独放不五矿证券党委书记董事长常伟发挥董事会治理核心功能推动证券公司高质量发展党的二十大报告指出高质量发展是全面建设社会主义现代化国家的首要任务。为广泛凝聚推动证券业高质量发展的共识,中国证券报联合中国证券业协会推出学习贯彻党的二十大精神,证券业高质量发展高抢抓农时科技助春耕在江西南昌新建区,已经拉开序幕的早稻春耕,全程机械化作业,既提高了效率又减少了成本在吉林大安市,为了让更多的土地长出庄稼,开垦修复盐碱地成了备春耕的重中之重在安徽颍上县,高科技的大苹果正式版IOS16。3。1值不值得升级,下面几点告诉你昨天凌晨苹果紧急发布了正式版的iOS16。3。1系统紧急发布,主要是因为本次更新有安全性的问题,就导致苹果在短短的21天后,跳过内测,直接向客户推出正式版,主要修复iOS16。3存