使用pytorch深度学习框架搭建神经网络

简介

现在主流有两个框架pytorch和TensorFlow,本文主要介绍pytorch

  • PyTorch:由 Facebook 的人工智能研究小组开发和维护。PyTorch 以其动态计算图(Dynamic Computational Graph)和易用性著称,非常适合研究人员和开发者进行实验和快速原型开发。
  • TensorFlow:由 Google 开发和维护。TensorFlow 是一个更加成熟和全面的框架,支持大规模的生产环境部署,特别是在云计算和分布式计算方面具有优势。

然后介绍两个小工具:

dir()打开该包,看看里面有什么东西;如果IDE使用的是pycharm的话,按住Ctrl直接跳转,输入函数的参数的时候按住Ctrl+P可以看需要填哪些参数

help()官方解释文档,教你如何使用该工具

神经网络搭建步骤

数据集介绍

 数据集为CIFAR10,

CIFAR-10 数据集由 10 个类的 60000 张 32x32 彩色图像组成,每个类有 6000 张图像。有 50000 张训练图像和 10000 张测试图像。图像大小为3x32x32

数据集分为 5 个训练批次和 1 个测试批次,每个批次有 10000 张图像。测试批次包含每个类中随机选择的 1000 张图像。训练批次包含按随机顺序排列的剩余图像,但某些训练批次可能包含来自一个类的图像多于另一个类的图像。在它们之间,训练批次正好包含来自每个类的 5000 张图像。

以下是数据集中的类,以及每个类的 10 张随机图像:

运行下列代码会导入数据集,没有下载的会自动下载

datasets导入数据集

dataloader分发数据,每批次送入64图片进入网络训练

transform更改图片数据的类型,比如将PIL改成tensor类型

train_data = torchvision.datasets.CIFAR10("./dataset",train=True,transform=torchvision.transforms.ToTensor(),download=True)
test = train_data.classes
print(test)
test_data = torchvision.datasets.CIFAR10("./dataset",train=False,transform=torchvision.transforms.ToTensor(),download=True)
train_dataloader = DataLoader(train_data,batch_size=64)
test_dataloader = DataLoader(test_data,batch_size=64)

搭建网络 

由官网可知(官网链接:PyTorch documentation — PyTorch 2.4 documentation),使用pytorch搭建网络至少需要重写2个函数,一个__init__() 初始化函数,另一个forward()前向传播函数,下图为官网截图:

按照官网给的例子我们重写,我们的网络结构如下图所示 

网络结构如下图所示

代码思路:输入:3x32x32--->最后输出10个参数,具体过程如下图所示:

 二维卷积参数计算公式如下图,根据输入输出计算padding和stride

代码实现

使用sequential()

class Wisdom(nn.Module):def __init__(self):super(Wisdom, self).__init__()self.model1 = Sequential(nn.Conv2d(3, 32, 5, padding=2),nn.MaxPool2d(2),nn.Conv2d(32, 32, 5, padding=2),nn.MaxPool2d(2),nn.Conv2d(32, 64, 5, padding=2),nn.MaxPool2d(2),nn.Flatten(),nn.Linear(1024, 64),nn.Linear(64, 10))def forward(self, x):x = self.model1(x)return x

 不使用sequential()

class Wisdom(nn.Module):def __init__(self):super(Wisdom, self).__init__()self.conv1=Conv2d(3,32,5,padding=2)self.maxpool1=MaxPool2d(2)self.conv2=Conv2d(32,32,5,padding=2)self.maxpool2=MaxPool2d(2)self.conv3=Conv2d(32,64,5,padding=2)self.maxpool3=MaxPool2d(2)self.flatten=Flatten()self.linear1=Linear(1024,64)self.linear2= Linear(64, 10)def forward(self,x):x=self.conv1(x)x=self.maxpool1(x)x=self.conv2(x)x=self.maxpool2(x)x=self.conv3(x)x=self.maxpool3(x)x=self.flatten(x)x=self.linear1(x)x=self.linear2(x)return x

实例化神经网络对象,损失函数,优化器

#创建神经网络
wisdom = Wisdom()
wisdom=wisdom.cuda()
#损失函数
loss_fn= nn.CrossEntropyLoss()
loss_fn=loss_fn.cuda()
#优化器
learn_rate =0.01
optimizer = torch.optim.SGD(wisdom.parameters(),lr=learn_rate)

损失函数(Loss Function)

常见的损失函数包括:

选择哪种损失函数取决于具体的任务和模型类型。在训练过程中,目标是最小化损失函数的值,从而提高模型的预测准确性。

优化器

优化器(Optimizer)是机器学习中用于调整模型参数以最小化损失函数的算法。优化器通过迭代过程逐步更新模型的权重和偏置,以找到损失函数的最小值。以下是一些常用的优化器:

设置网络参数

使用writer = SummaryWriter("logs_train")可以可视化整个训练过程
#设置网络的一些参数
#记录的训练次数
total_train_step = 0
#记录测试次数
total_test_step = 0
#训练的轮数
epoch=10
#添加tensorboard
writer = SummaryWriter("logs_train")

 训练和验证网络并将重要信息可视化屏幕

重要代码解析:

wisdom.train()标志网络进入训练状态

loss = loss_fn(outputs,targets)计算损失函数

optimizer.zero_grad() 梯度置零,防止上个梯度对本轮训练产生影响
loss.backward()反向传播
optimizer.step()梯度更新

wisdom.eval()模型进入测试状态

将损失值和精度闯入writer并绘制曲线图

writer.add_scalar("test_loss", total_test_loss, total_test_step) writer.add_scalar("test_accuracy", total_accuracy/test_data_size, total_test_step)

torch.save(wisdom,"./model_train/wisdom_{}.pth".format(i))保存训练好模型
for i in range(epoch):print("----第{}轮开始----".format(i+1))#开始训练#进入训练状态wisdom.train()for data in train_dataloader:imgs,targets = dataimgs=imgs.cuda()targets=targets.cuda()outputs = wisdom(imgs)loss = loss_fn(outputs,targets)#优化器调优optimizer.zero_grad()loss.backward()optimizer.step()total_train_step += 1if total_train_step % 100 ==0:print("训练次数:{},loss:{}:".format(total_train_step,loss))writer.add_scalar("train_loss",loss.item(),total_train_step)#模型测试#模型进入测试状态wisdom.eval()total_test_loss=0total_accuracy = 0with torch.no_grad():# 提高推理速度和节省内存for data in test_dataloader:imgs,targets = dataimgs = imgs.cuda()targets = targets.cuda()outputs = wisdom(imgs )loss = loss_fn(outputs,targets)total_test_loss=total_test_loss+loss.item()accuracy = (outputs.argmax(1)==targets).sum()total_accuracy=total_accuracy+accuracyprint("整体测试集合的loss:{}".format(total_test_loss))print("整体测试集合的准确率:{}".format(total_accuracy/test_data_size))writer.add_scalar("test_loss", total_test_loss, total_test_step)writer.add_scalar("test_accuracy", total_accuracy/test_data_size, total_test_step)total_test_step +=1torch.save(wisdom,"./model_train/wisdom_{}.pth".format(i))print("模型已经保存!")#torch.save(wisdom.state_dict(),"./model_train/wisdom_{}.pth".format(i))
writer.close()

使用GPU加速训练

确保电脑有显卡并正确安装驱动,而且要正确下载对应cuda 

下载教程:

进入pytorch官网

根据自己的系统选择,一般使用anaconda 在Windows下进行python环境管理,复制红框部分,在Anaconda Prompt 粘贴运行,注意自己的cuda版本是否支持

查看cuda版本,打开英伟达控制面板,桌面右键或者系统右下角,然后点击系统信息,之后点击组件

GPU程序设置

在神经网络,损失函数的实例对象后加.cuda()即可,以及在图片数据后加.cuda()

wisdom=wisdom.cuda()
loss_fn=loss_fn.cuda()
imgs=imgs.cuda()
targets=targets.cuda()

 保存模型

torch.save(wisdom,"./model_train/wisdom_{}.pth".format(i))

使用训练好的网络进行分类任务

加载网络模型

model = torch.load("./model_train/wisdom_49.pth")

若出现runtime error 将模型加载方式换成下列语句,将GPU训练的模型映射到CPU

出现runtimer error 将模型加载方式换成下列语句,将GPU训练的模型映射到CPU

或者将分类的图片进行cuda加速

image = image.cuda()#使用GPU训练的模型需要加CUDA

 使用SummaryWriter使训练可视化

打开Anaconda Prompt再激活环境后运行下列命令:

tensorboard --logdir "D:\pyc_workspace\learn_pytorch\logs_train

上列的地址根据train.py代码中的这个语句确定

writer = SummaryWriter("logs_train")

一定要改成自己的文件地址,具体操作见下图

可视化结果如下图所示

最后解释一个语句,with torch.no_grad()提高推理速度和节省内存

with torch.no_grad():# 提高推理速度和节省内存for data in test_dataloader:imgs,targets = dataimgs = imgs.cuda()targets = targets.cuda()outputs = wisdom(imgs )loss = loss_fn(outputs,targets)total_test_loss=total_test_loss+loss.item()accuracy = (outputs.argmax(1)==targets).sum()total_accuracy=total_accuracy+accuracy

程序汇总 

train.py

使用cpu训练网络

import torchvision
from torch.nn import Conv2d, MaxPool2d, Flatten, Linear, Sequential
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriterfrom model import *train_data = torchvision.datasets.CIFAR10("./dataset",train=True,transform=torchvision.transforms.ToTensor(),download=True)test_data = torchvision.datasets.CIFAR10("./dataset",train=False,transform=torchvision.transforms.ToTensor(),download=True)#length长度
train_data_size = len(train_data)
test_data_size = len(test_data)
print("训练集长度:{}".format(train_data_size))
print("测试集长度:{}".format(test_data_size))#使用dataloader加载数据集
train_dataloader = DataLoader(train_data,batch_size=64)
test_dataloader = DataLoader(test_data,batch_size=64)#创建神经网络
wisdom = Wisdom()
#损失函数
loss_fn= nn.CrossEntropyLoss()
#优化器
learn_rate =0.01
optimizer = torch.optim.SGD(wisdom.parameters(),lr=learn_rate)#设置网络的一些参数
#记录的训练次数
total_train_step = 0
#记录测试次数
total_test_step = 0
#训练的轮数
epoch=10
#添加tensorboard
writer = SummaryWriter("logs_train")
#tensorboard --logdir "D:\pyc_workspace\learn_pytorch\logs_train"for i in range(epoch):print("----第{}轮开始----".format(i+1))#开始训练#进入训练状态wisdom.train()for data in train_dataloader:imgs,targets = dataoutputs = wisdom(imgs)loss = loss_fn(outputs,targets)#优化器调优optimizer.zero_grad()loss.backward()optimizer.step()total_train_step += 1if total_train_step % 100 ==0:print("训练次数:{},loss:{}:".format(total_train_step,loss))writer.add_scalar("train_loss",loss.item(),total_train_step)#模型测试#模型进入测试状态wisdom.eval()total_test_loss=0total_accuracy = 0with torch.no_grad():for data in test_dataloader:imgs,targets = dataoutputs = wisdom(imgs )loss = loss_fn(outputs,targets)total_test_loss=total_test_loss+loss.item()accuracy = (outputs.argmax(1)==targets).sum()total_accuracy=total_accuracy+accuracyprint("整体测试集合的loss:{}".format(total_test_loss))print("整体测试集合的准确率:{}".format(total_accuracy/test_data_size))writer.add_scalar("test_loss", total_test_loss, total_test_step)writer.add_scalar("test_accuracy", total_accuracy/test_data_size, total_test_step)total_test_step +=1torch.save(wisdom,"./model_train/wisdom_{}.pth".format(i))print("模型已经保存!")#torch.save(wisdom.state_dict(),"./model_train/wisdom_{}.pth".format(i))
writer.close()

train_gpu.py 

使用GPU训练网络

import torch
import torchvision
from torch import nn
from torch.nn import Conv2d, MaxPool2d, Flatten, Linear, Sequential
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWritertrain_data = torchvision.datasets.CIFAR10("./dataset",train=True,transform=torchvision.transforms.ToTensor(),download=True)
test = train_data.classes
print(test)
test_data = torchvision.datasets.CIFAR10("./dataset",train=False,transform=torchvision.transforms.ToTensor(),download=True)class Wisdom(nn.Module):def __init__(self):super(Wisdom, self).__init__()self.model1 = Sequential(nn.Conv2d(3, 32, 5, padding=2),nn.MaxPool2d(2),nn.Conv2d(32, 32, 5, padding=2),nn.MaxPool2d(2),nn.Conv2d(32, 64, 5, padding=2),nn.MaxPool2d(2),nn.Flatten(),nn.Linear(1024, 64),nn.Linear(64, 10))def forward(self, x):x = self.model1(x)return x#length长度
train_data_size = len(train_data)
test_data_size = len(test_data)
print("训练集长度:{}".format(train_data_size))
print("测试集长度:{}".format(test_data_size))#使用dataloader加载数据集
train_dataloader = DataLoader(train_data,batch_size=64)
test_dataloader = DataLoader(test_data,batch_size=64)#创建神经网络
wisdom = Wisdom()
wisdom=wisdom.cuda()
#损失函数
loss_fn= nn.CrossEntropyLoss()
loss_fn=loss_fn.cuda()
#优化器
learn_rate =0.01
optimizer = torch.optim.SGD(wisdom.parameters(),lr=learn_rate)#设置网络的一些参数
#记录的训练次数
total_train_step = 0
#记录测试次数
total_test_step = 0
#训练的轮数
epoch=10
#添加tensorboard
writer = SummaryWriter("logs_train")
#tensorboard --logdir "D:\pyc_workspace\learn_pytorch\logs_train"for i in range(epoch):print("----第{}轮开始----".format(i+1))#开始训练#进入训练状态wisdom.train()for data in train_dataloader:imgs,targets = dataimgs=imgs.cuda()targets=targets.cuda()outputs = wisdom(imgs)loss = loss_fn(outputs,targets)#优化器调优optimizer.zero_grad()loss.backward()optimizer.step()total_train_step += 1if total_train_step % 100 ==0:print("训练次数:{},loss:{}:".format(total_train_step,loss))writer.add_scalar("train_loss",loss.item(),total_train_step)#模型测试#模型进入测试状态wisdom.eval()total_test_loss=0total_accuracy = 0with torch.no_grad():# 提高推理速度和节省内存for data in test_dataloader:imgs,targets = dataimgs = imgs.cuda()targets = targets.cuda()outputs = wisdom(imgs )loss = loss_fn(outputs,targets)total_test_loss=total_test_loss+loss.item()accuracy = (outputs.argmax(1)==targets).sum()total_accuracy=total_accuracy+accuracyprint("整体测试集合的loss:{}".format(total_test_loss))print("整体测试集合的准确率:{}".format(total_accuracy/test_data_size))writer.add_scalar("test_loss", total_test_loss, total_test_step)writer.add_scalar("test_accuracy", total_accuracy/test_data_size, total_test_step)total_test_step +=1torch.save(wisdom,"./model_train/wisdom_{}.pth".format(i))print("模型已经保存!")#torch.save(wisdom.state_dict(),"./model_train/wisdom_{}.pth".format(i))
writer.close()

test.py

利用神经网络模型进行分类,记得把

img_path ="dog.jpg"改成自己的路径
import torch
import torchvision
from PIL import Image
from torch import nn
from torch.nn import Sequentialtrain_data = torchvision.datasets.CIFAR10("./dataset",train=True,transform=torchvision.transforms.ToTensor(),download=True)
classes_list = train_data.classes#分类物体列表img_path ="dog.jpg"
# img_path ="airplane.jpg"
image = Image.open(img_path)
#image = image.convert("RGB")#只保留为3通道transform = torchvision.transforms.Compose([torchvision.transforms.Resize((32,32,)),torchvision.transforms.ToTensor()])
image = transform(image)
print(image.shape)
class Wisdom(nn.Module):def __init__(self):super(Wisdom, self).__init__()self.model1 = Sequential(nn.Conv2d(3, 32, 5, padding=2),nn.MaxPool2d(2),nn.Conv2d(32, 32, 5, padding=2),nn.MaxPool2d(2),nn.Conv2d(32, 64, 5, padding=2),nn.MaxPool2d(2),nn.Flatten(),nn.Linear(1024, 64),nn.Linear(64, 10))def forward(self, x):x = self.model1(x)return x#加载网络模型
model = torch.load("./model_train/wisdom_49.pth")
#出现runtimer error 将模型加载方式换成下列语句,将GPU训练的模型映射到CPU
#model = torch.load("./model_train/wisdom_9.pth",map_location=torch.device("cpu"))
print(model)image=torch.reshape(image,(1,3,32,32))#增加batch_size维度
model.eval()
with torch.no_grad():image = image.cuda()#使用GPU训练的模型需要加CUDAoutput = model(image)
print(output)
classes_index=output.argmax(1).item()
print(classes_list)print("测试图片为:{}".format(classes_list[classes_index]))

总结:------>多看官网 <------

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在SOLIDWORKS中高效转换:从实体模型到钣金件的设计优化

在设计生产中&#xff0c;当我们收到中间格式的模型文件时&#xff0c;并希望将其转换为钣金件以进一步加工生产&#xff0c;该怎么做呢&#xff1f; 利用SOLIDWORKS软件&#xff0c;可以直接将实体模型转换为钣金件&#xff0c;来完成后续的设计。 中性文件 钣金件 一、设置…

密钥分发与公钥认证:保障网络通信的安全

在网络通信中&#xff0c;密钥的安全分发和公钥的有效认证是确保系统安全的关键。本文将为基础小白介绍密钥分发与公钥认证的基本概念和实际应用&#xff0c;帮助大家更好地理解这些技术如何保障我们的网络通信安全。 1. 密钥分发与公钥认证的背景 由于密码算法是公开的&…

_get_gt_mask、cat_mask、_get_other_mask

import torch# 定义获取标签掩码的函数 def _get_gt_mask(logits, target):print("原始 logits:\n", logits)print("目标 target:\n", target)# 将 target 拉平为一维张量target target.reshape(-1)print("拉平后的 target:\n", target)# 创建一…

C端产品如何转行成为大模型产品经理?

1、能力优劣势 C端产品经理的优势在于对用户需求、用户体验、数据分析、市场竞争等方面有较深的理解和实践&#xff0c;能够从用户视角出发&#xff0c;设计出吸引和留住用户的产品功能和交互。 C端产品经理的劣势在于对大模型的技术原理、应用场景、生态建设等方面缺乏足够的…

探伤仪的介绍

探伤仪就是一个高级测厚仪而已。 也有人说探伤仪功能那么强大&#xff0c;怎么说实质上就是一个测厚仪呢&#xff0c; 大家想想看&#xff0c;所谓探伤&#xff0c;最基本的要求就是测出工件内部缺陷的位置&#xff0c;这不就是测厚功能吗&#xff0c; 当然除了测厚&#xf…

pyro ExponentialLR 如何设置优化器 optimizer的学习率 pytorch 深度神经网络 bnn,

第一。pyro 不支持 “ReduceLROnPlateau” &#xff0c;因为需要Loss作为输入数值&#xff0c;计算量大 pytorch的学习率调整 视频 看这个博主的视频 05-01-学习率调整策略_哔哩哔哩_bilibili 第二 &#xff0c;svi 支持 scheduler注意点&#xff0c; 属于 pyro.optim.PyroOp…

从0到1深入理解vite

一、什么是构建工具 ts:如果遇到ts文件&#xff0c;我们需要使用tsc把ts转换为jsreact/vue &#xff1a; 安装react-compiler、vue-conplier 将我们写的jsx或者vue文件转换成render函数less/sass/postcss/somponent-style:我们又需要less-loader、sass-loader等一系列编译工具…

目标检测-RT-DETR

RT-DETR (Real-Time Detection Transformer) 是一种结合了 Transformer 和实时目标检测的创新模型架构。它旨在解决现有目标检测模型在速度和精度之间的权衡问题&#xff0c;通过引入高效的 Transformer 模块和优化的检测头&#xff0c;提升了模型的实时性和准确性。RT-DETR 可…

Ceph RBD使用

CephRBD使用 一、RBD架构说明二、RBD相关操作1、创建存储池2、创建img镜像2.1 创建镜像2.1.2 查看镜像详细信息2.1.3 镜像其他特性2.1.4 镜像特性的启用和禁用 3、配置客户端使用RBD3.1 客户端配置yum源3.2 客户端使用admin用户挂载并使用RBD3.2.1 同步admin账号认证文件3.2.2 …

社交媒体的智能变革:Facebook AI优化用户体验

Facebook作为全球领先的社交平台&#xff0c;一直致力于通过人工智能&#xff08;AI&#xff09;技术提升用户体验。AI技术在Facebook的应用涵盖了推荐系统、自然语言处理、广告投放和用户反馈等多个方面&#xff0c;使平台的互动和内容体验更加智能和个性化。 推荐系统的智能化…

结构型设计模式—外观模式

结构型设计模式—外观模式 在软件开发的过程中&#xff0c;你是否遇到过这样的情况&#xff1a;你需要调用一个复杂系统中的多个模块&#xff0c;而每个模块都有自己的接口和使用方法&#xff0c;这让你不得不面对复杂的调用逻辑和大量的冗余代码&#xff1f;这时候&#xff0…

【网络安全】XSS+OTP绕过+账户接管

未经许可,不得转载。 文章目录 正文XSSOTP绕过账户接管正文 目标:www.example.com XSS 不断寻找可能存在XSS的点位。 终于,在个人资料页面:www.example.com/profile_details.php?userid= ,使用Payload<script>alert(1)</script>,实现XSS: 因此,能够实…

vxe-table——实现table 动态显示 +冻结列等功能——技能提升

之前我也有写过类似的功能&#xff0c;就是可以自定义勾选需要展示的列。 不过之前是我自己写的弹窗处理的&#xff0c;有现成的插件vex-table插件可以使用。 vxe-table官网&#xff1a;https://vxetable.cn/v3/#/table/api 解决步骤1&#xff1a;安装vxe-table——npm inst…

HTTP状态码介绍,带你了解请求响应全过程

1xx状态码&#xff1a;&#x1f449;表示信息响应&#xff0c;客户端请求已被接收&#xff0c;继续处理。 100 - Continue&#xff1a;客户端应继续其请求。&#x1f914; 101 -Switching Protocols&#xff1a;服务器已经理解并接受了客户端的请求&#xff0c;将切换协议。 10…

【自用14】C++俄罗斯方块-思路复盘

1.编写主函数 int main(void){welcome();//欢迎函数system("pause");//窗口停留colsegraph();//关闭图画return 0;//返回值 }其中包含有最开始的欢迎&#xff0c;以及基础的窗口停留、图画关闭和返回值语句 2.编写欢迎函数 需求&#xff1a; 欢迎函数中需要包含的…

Java如何读取resources目录下的文件路径(九种代码示例教程)

本文摘要&#xff1a;Java如何读取resources目录下的文件路径 &#x1f60e; 作者介绍&#xff1a;我是程序员洲洲&#xff0c;一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主。公粽号&#xff1a;洲与AI。 &#x1f91…

教育行业解决方案:智能PPT在教育行业的创新应用

在信息化时代&#xff0c;教育行业面临着巨大的变革。随着人工智能技术的不断发展&#xff0c;传统教学方式正在被重新定义。彩漩科技作为 AI 技术的先行者&#xff0c;推出了歌者 PPT &彩漩 PPT&#xff0c;为教师、学生和家长提供了一种全新的教育体验&#xff0c;实现了…

Quartz.Net_持久化

简述 通常而言&#xff0c;Quartz.Net的数据默认是存储在运存中的&#xff0c;换言之&#xff1a;断电即失。所以在默认情况下&#xff0c;当系统重启后&#xff0c;原先的所有任务、触发器、调度器都会失效 为避免上述情况的发生&#xff0c;可以对Quartz.Net进行持久化设置…

第二十一届华为杯数学建模经验分享之资料分享篇

今天给大家分享一些数学建模的资料&#xff0c;通过这些资料的学习相信你们一定在比赛中获得好的成绩。今天分享的资料包括美赛和国赛的优秀论文集、研赛的优秀论文集、推荐数学建模的相关书籍、智能算法的学习PPT、python机器学习的书籍和数学建模经验分享与总结&#xff0c;其…

[Hive]五、Hive 源码编译

G:\Bigdata\2.hive\大数据技术之Hive源码编译 Hadoop3.3.1 Hive3.1.3 Spark3.3.1 Hive on spark / spark on hive 均验证通过。 第1章 部署Hadoop和Hive 1.1 版本测试 Hadoop3.3.6 和Hive3.1.3 运行hive客户端时报错: java.lang.NoSuchMethodError:com.google.common.ba…