《人工智能基础及应用(Python 微课版)》程序代码 第6章 深度学习_第1页
《人工智能基础及应用(Python 微课版)》程序代码 第6章 深度学习_第2页
《人工智能基础及应用(Python 微课版)》程序代码 第6章 深度学习_第3页
《人工智能基础及应用(Python 微课版)》程序代码 第6章 深度学习_第4页
《人工智能基础及应用(Python 微课版)》程序代码 第6章 深度学习_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第6章深度学习【例6.1】importnumpyasnpimporttensorflowastfimportmatplotlibmatplotlib.use("TkAgg")#强制独立窗口,避开PyCharm的bugimportmatplotlib.pyplotasplt#以下全部保持原样TRUE_W,TRUE_B=3.0,2.0x=np.random.uniform(-1,1,size=(200,1)).astype(np.float32)noise=np.random.normal(0,0.1,size=(200,1)).astype(np.float32)y=TRUE_W*x+TRUE_B+noisetrain_ds=tf.data.Dataset.from_tensor_slices((x,y)).shuffle(200).batch(32)model=tf.keras.Sequential([tf.keras.layers.Dense(1,input_shape=(1,))])pile(optimizer=tf.keras.optimizers.SGD(0.1),loss='mse')model.fit(train_ds,epochs=50,verbose=0)learned_w,learned_b=model.get_weights()print("真实w={:.2f}b={:.2f}".format(TRUE_W,TRUE_B))print("学到w={:.2f}b={:.2f}".format(learned_w[0,0],learned_b[0]))plt.scatter(x,y,label='data')x_line=np.linspace(-1,1,100)plt.plot(x_line,TRUE_W*x_line+TRUE_B,'--',label='trueline')plt.plot(x_line,learned_w[0,0]*x_line+learned_b[0],'r',label='learnedline')plt.legend()plt.show()【例6.2】#----------------------------1.环境准备----------------------------importtorchimporttorch.nnasnnimporttorch.optimasoptimimportmatplotlibmatplotlib.use('TkAgg')#关键:避开SciViewimportmatplotlib.pyplotaspltdevice='cuda'iftorch.cuda.is_available()else'cpu'print('device:',device)#----------------------------2.造数据-----------------------------torch.manual_seed(0)X=torch.unsqueeze(torch.linspace(-1,1,200),dim=1).to(device)y=3*X+2+0.3*torch.randn(X.size()).to(device)#----------------------------3.定义模型-----------------------------classLinearNet(nn.Module):def__init__(self):super().__init__()self.fc=nn.Linear(1,1)defforward(self,x):returnself.fc(x)model=LinearNet().to(device)#----------------------------4.损失与优化器-------------------------criterion=nn.MSELoss()optimizer=optim.SGD(model.parameters(),lr=0.1)#----------------------------5.训练-----------------------------loss_list=[]forepochinrange(201):pred=model(X)loss=criterion(pred,y)optimizer.zero_grad()loss.backward()optimizer.step()loss_list.append(loss.item())ifepoch%40==0:print(f'epoch{epoch:3d}|loss{loss.item():.4f}')#----------------------------6.绘图-----------------------------fig,(ax1,ax2)=plt.subplots(1,2,figsize=(10,4))ax1.scatter(X.cpu(),y.cpu(),s=8,label='Noisydata')X_line=torch.linspace(-1,1,100).unsqueeze(1).to(device)y_line=model(X_line).detach().cpu()ax1.plot(X_line.cpu(),y_line,'r',lw=2,label='Model')ax1.set_xlabel('x');ax1.set_ylabel('y');ax1.legend();ax1.set_title('Data&Prediction')ax2.plot(loss_list)ax2.set_xlabel('epoch');ax2.set_ylabel('MSEloss');ax2.set_title('TrainingLoss')ax2.grid(True)plt.tight_layout()plt.show()#----------------------------7.打印参数----------------------w,b=model.parameters()print(f'学得的权重w={w.item():.3f}(真值3)')print(f'学得的偏置b={b.item():.3f}(真值2)')6.9.2PyTorch实现图像分类pipinstalltorchtorchvision-i/simple#!/usr/bin/envpython#cifar10_torch.pyimporttorchimporttorch.nnasnnimporttorch.optimasoptimimporttorchvisionimporttorchvision.transformsasTfromtorch.utils.dataimportDataLoader#1.超参数-------------------------------------------------------------BATCH_SIZE=128EPOCHS=20LR=1e-3DEVICE='cuda'iftorch.cuda.is_available()else'cpu'NUM_CLASSES=10#2.数据---------------------------------------------------------------transform=T.Compose([T.ToTensor(),T.Normalize((0.4914,0.4822,0.4465),(0.2023,0.1994,0.2010))])train_set=torchvision.datasets.CIFAR10(root='./data',train=True,download=True,transform=transform)test_set=torchvision.datasets.CIFAR10(root='./data',train=False,download=True,transform=transform)train_loader=DataLoader(train_set,batch_size=BATCH_SIZE,shuffle=True,num_workers=2)test_loader=DataLoader(test_set,batch_size=BATCH_SIZE,shuffle=False,num_workers=2)#3.模型---------------------------------------------------------------classNet(nn.Module):def__init__(self):super().__init__()self.features=nn.Sequential(nn.Conv2d(3,32,3,padding=1),nn.BatchNorm2d(32),nn.ReLU(),nn.Conv2d(32,32,3,padding=1),nn.ReLU(),nn.MaxPool2d(2),nn.Dropout(0.25),nn.Conv2d(32,64,3,padding=1),nn.BatchNorm2d(64),nn.ReLU(),nn.Conv2d(64,64,3,padding=1),nn.ReLU(),nn.MaxPool2d(2),nn.Dropout(0.25),)self.classifier=nn.Sequential(nn.Flatten(),nn.Linear(64*8*8,512),nn.BatchNorm1d(512),nn.ReLU(),nn.Dropout(0.5),nn.Linear(512,NUM_CLASSES))defforward(self,x):x=self.features(x)x=self.classifier(x)returnxnet=Net().to(DEVICE)criterion=nn.CrossEntropyLoss()optimizer=optim.Adam(net.parameters(),lr=LR)#4.训练---------------------------------------------------------------forepochinrange(1,EPOCHS+1):net.train()running_loss,correct,total=0.0,0,0forx,yintrain_loader:x,y=x.to(DEVICE),y.to(DEVICE)optimizer.zero_grad()out=net(x)loss=criterion(out,y)loss.backward()optimizer.step()running_loss+=loss.item()*x.size(0)_,pred=out.max(1)total+=y.size(0)correct+=pred.eq(y).sum().item()train_acc=100.*correct/totalprint(f'Epoch{epoch:02d}loss={running_loss/total:.4f}acc={train_acc:.2f}%')#5.测试---------------------------------------------------------------net.eval()correct=0withtorch.no_grad():forx,yintest_loader:x,y=x.to(DEVICE),y.to(DEVICE)out=net(x)pred=out.argmax(1)correct+=pred.eq(y).sum().item()test_acc=100.*correct/len(test_set)print(f"\nPyTorch测试准确率:{test_acc:.2f}%")6.9.3TensorFlow实现图像分类#!/usr/bin/envpython#cifar10_tf.pyimporttensorflowastffromtensorflow.kerasimportlayers,models#1.超参数-------------------------------------------------------------BATCH_SIZE=128EPOCHS=20LR=1e-3NUM_CLASSES=10#2.数据---------------------------------------------------------------(x_train,y_train),(x_test,y_test)=tf.keras.datasets.cifar10.load_data()#归一化到[0,1]x_train,x_test=x_train.astype("float32")/255.0,x_test.astype("float32")/255.0#one-hot编码y_train=tf.keras.utils.to_categorical(y_train,NUM_CLASSES)y_test=tf.keras.utils.to_categorical(y_test,NUM_CLASSES)#3.模型---------------------------------------------------------------defmake_model():model=models.Sequential([layers.Conv2D(32,3,padding='same',activation='relu',input_shape=(32,32,3)),layers.BatchNormalization(),layers.Conv2D(32,3,padding='same',activation='relu'),layers.MaxPooling2D(),layers.Dropout(0.25),layers.Conv2D(64,3,padding='same',activation='relu'),layers.BatchNormalization(),layers.Conv2D(64,3,padding='same',activation='relu'),

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论