2025年P(guān)ython深度學(xué)習(xí)專項訓(xùn)練試卷 模型構(gòu)建版_第1頁
2025年P(guān)ython深度學(xué)習(xí)專項訓(xùn)練試卷 模型構(gòu)建版_第2頁
2025年P(guān)ython深度學(xué)習(xí)專項訓(xùn)練試卷 模型構(gòu)建版_第3頁
2025年P(guān)ython深度學(xué)習(xí)專項訓(xùn)練試卷 模型構(gòu)建版_第4頁
2025年P(guān)ython深度學(xué)習(xí)專項訓(xùn)練試卷 模型構(gòu)建版_第5頁
已閱讀5頁,還剩8頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

2025年P(guān)ython深度學(xué)習(xí)專項訓(xùn)練試卷模型構(gòu)建版考試時間:______分鐘總分:______分姓名:______一、編程題(共70分)1.數(shù)據(jù)加載與預(yù)處理(15分)假設(shè)你正在處理一個圖像分類任務(wù),數(shù)據(jù)集包含存儲在`images/train/`目錄下的圖片,圖片的類別名稱存儲在`labels.txt`文件中,每行一個類別名,與圖片文件名(不含擴展名)對應(yīng)。請使用Python和`TensorFlow`或`PyTorch`編寫代碼,完成以下任務(wù):*加載`labels.txt`文件,構(gòu)建類別到整數(shù)索引的映射字典。*使用框架自帶的數(shù)據(jù)加載工具(如`tf.data.Dataset`或`torch.utils.data.Dataset`),編寫函數(shù)`load_images_labels()`,讀取`images/train/`目錄下的所有圖片文件,根據(jù)文件名獲取對應(yīng)類別索引,并將圖片數(shù)據(jù)轉(zhuǎn)換為浮點數(shù)(范圍0到1),圖片尺寸調(diào)整為統(tǒng)一大?。ɡ?24x224)。要求實現(xiàn)數(shù)據(jù)批處理(Batching),批大小為32。請確保你的代碼能夠處理可能的文件讀取錯誤,并打印出加載的圖片數(shù)量和類別數(shù)量。2.模型定義(25分)請使用`TensorFlow`的KerasAPI(推薦使用FunctionalAPI)或`PyTorch`的`nn.Module`,構(gòu)建一個用于上述圖像分類任務(wù)的卷積神經(jīng)網(wǎng)絡(luò)(CNN)模型。模型應(yīng)包含以下組件:*至少包含兩個卷積層(`Conv2D`),每個卷積層后接一個激活層(`ReLU`)和一個池化層(`MaxPooling2D`)。*可以包含一個或多個全連接層(`Dense`)。*模型的最后一層應(yīng)是一個全連接層,其輸出維度等于類別數(shù)量,并使用`softmax`激活函數(shù)。*請定義一個函數(shù)`build_cnn_model(input_shape,num_classes)`來構(gòu)建此模型,并返回編譯好的模型實例。在模型編譯時,請選擇`adam`優(yōu)化器,`sparse_categorical_crossentropy`損失函數(shù),并添加`accuracy`作為評估指標。3.模型訓(xùn)練與評估(30分)假設(shè)你已經(jīng)成功運行了第1題的代碼,得到了訓(xùn)練數(shù)據(jù)集`train_dataset`和對應(yīng)的類別數(shù)量`num_classes`。請編寫代碼完成以下任務(wù):*調(diào)用你在第2題中定義的`build_cnn_model()`函數(shù),傳入合適的輸入形狀(如(224,224,3))和類別數(shù)量`num_classes`,創(chuàng)建模型實例。*使用`model.fit()`方法訓(xùn)練模型,訓(xùn)練參數(shù)設(shè)置為:epochs=10,batch_size=32,validation_split=0.2。請確保使用你從第1題加載的數(shù)據(jù)集。*訓(xùn)練完成后,請使用`model.evaluate()`方法在(模擬的)測試數(shù)據(jù)集上評估模型性能,并打印出測試集的損失值和準確率。假設(shè)測試數(shù)據(jù)集的格式與訓(xùn)練集類似,但數(shù)據(jù)加載代碼需要稍作修改。二、簡答題(共30分)1.模型選擇與解釋(10分)假設(shè)你需要構(gòu)建一個模型來預(yù)測房屋價格(連續(xù)值)。請簡述你會考慮使用哪些類型的深度學(xué)習(xí)模型(至少兩種),并分別說明選擇這些模型的主要原因。2.正則化方法(10分)在深度學(xué)習(xí)模型訓(xùn)練中,什么是過擬合?請列舉至少兩種常用的正則化方法,并簡述其工作原理及其在防止過擬合中的作用。3.梯度問題(10分)在訓(xùn)練深度神經(jīng)網(wǎng)絡(luò)時,可能會遇到梯度消失或梯度爆炸的問題。請簡述這兩種問題的含義,并分別提出至少一種緩解這兩種問題的常用技術(shù)。試卷答案一、編程題1.數(shù)據(jù)加載與預(yù)處理(15分)```pythonimportosimportnumpyasnpimporttensorflowastf#或importtorchfromtensorflow.keras.preprocessing.imageimportload_img,img_to_array#TensorFlow示例##PyTorch示例#fromtorchvisionimporttransforms#fromtorch.utils.dataimportDataset,DataLoader#importglobdefload_images_labels(image_dir,label_file):#1.加載類別索引映射label_map={}withopen(label_file,'r')asf:fori,lineinenumerate(f):label_map[line.strip()]=inum_classes=len(label_map)print(f"Loaded{num_classes}classes.")#2.加載圖片和標簽image_files=[os.path.join(image_dir,f)forfinos.listdir(image_dir)iff.lower().endswith(('.png','.jpg','.jpeg'))]print(f"Found{len(image_files)}imagefiles.")#準備數(shù)據(jù)集(TensorFlow示例)images=[]labels=[]forimg_pathinimage_files:try:img=load_img(img_path,target_size=(224,224))#調(diào)整尺寸img_array=img_to_array(img)/255.0#歸一化images.append(img_array)filename=os.path.basename(img_path)basename=os.path.splitext(filename)[0]label=label_map.get(basename,-1)#獲取標簽索引,處理未知文件iflabel!=-1:labels.append(label)else:print(f"Warning:Skippingfile{filename}duetomissinglabel.")exceptExceptionase:print(f"Warning:Skippingfile{os.path.basename(img_path)}duetoerror:{e}")#轉(zhuǎn)換為NumPy數(shù)組images=np.array(images)labels=np.array(labels)#打印統(tǒng)計信息print(f"Loaded{len(images)}validimages.")print(f"Uniquelabelsfound:{np.unique(labels)}")#創(chuàng)建TensorFlowDatasetdataset=tf.data.Dataset.from_tensor_slices((images,labels))dataset=dataset.batch(32)#批處理##PyTorch示例(注釋掉TensorFlow部分,取消PyTorch注釋并修改)#transform=transforms.Compose([#transforms.Resize((224,224)),#transforms.ToTensor(),#歸一化到[0,1]#])#classImageDataset(Dataset):#def__init__(self,image_files,labels,transform=None):#self.image_files=image_files#self.labels=labels#self.transform=transform#def__len__(self):#returnlen(self.labels)#def__getitem__(self,idx):#img_path=self.image_files[idx]#img=Image.open(img_path).convert('RGB')#確保三通道#label=self.labels[idx]#ifself.transform:#img=self.transform(img)#returnimg,label##構(gòu)建數(shù)據(jù)集##train_dataset=ImageDataset(image_files,labels,transform=transform)##train_dataloader=DataLoader(train_dataset,batch_size=32,shuffle=True)returndataset,num_classes#返回TensorFlowDataset和類別數(shù)##示例調(diào)用(需要提供實際路徑)##train_dataset,num_classes=load_images_labels('images/train/','labels.txt')```2.模型定義(25分)```pythonimporttensorflowastffromtensorflow.keras.layersimportInput,Conv2D,ReLU,MaxPooling2D,Flatten,Densefromtensorflow.keras.modelsimportModel#TensorFlowKerasAPIdefbuild_cnn_model(input_shape,num_classes):inputs=Input(shape=input_shape)#定義輸入層#ConvBlock1x=Conv2D(32,(3,3),padding='same')(inputs)#32個3x3卷積核x=ReLU()(x)#ReLU激活x=MaxPooling2D((2,2),strides=(2,2))(x)#2x2池化#ConvBlock2x=Conv2D(64,(3,3),padding='same')(x)#64個3x3卷積核x=ReLU()(x)x=MaxPooling2D((2,2),strides=(2,2))(x)#FlattenandDenseLayersx=Flatten()(x)#展平x=Dense(128,activation='relu')(x)#128個神經(jīng)元,ReLU激活x=Dense(num_classes,activation='softmax')(x)#輸出層,類別數(shù)個神經(jīng)元,Softmax#創(chuàng)建模型model=Model(inputs=inputs,outputs=x)#編譯模型pile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['accuracy'])returnmodel##示例調(diào)用(需要提供輸入形狀和類別數(shù))##model=build_cnn_model((224,224,3),10)#假設(shè)有10個類別``````python#PyTorch示例(注釋掉TensorFlow部分,取消PyTorch注釋并修改)importtorchimporttorch.nnasnnimporttorch.nn.functionalasFclassCNNModel(nn.Module):def__init__(self,input_shape,num_classes):super(CNNModel,self).__init__()self.conv1=nn.Conv2d(in_channels=input_shape[2],out_channels=32,kernel_size=3,padding=1)#假設(shè)輸入是(N,C,H,W)self.conv2=nn.Conv2d(in_channels=32,out_channels=64,kernel_size=3,padding=1)self.fc1=nn.Linear(64*(input_shape[0]//4)*(input_shape[1]//4),128)#計算展平后的維度,假設(shè)池化stride=2self.fc2=nn.Linear(128,num_classes)defforward(self,x):x=F.relu(self.conv1(x))x=F.max_pool2d(x,(2,2))x=F.relu(self.conv2(x))x=F.max_pool2d(x,(2,2))x=x.view(x.size(0),-1)#展平x=F.relu(self.fc1(x))x=self.fc2(x)returnxdefbuild_cnn_model_pytorch(input_shape,num_classes):model=CNNModel(input_shape,num_classes)#定義損失函數(shù)和優(yōu)化器(PyTorch方式)criterion=nn.CrossEntropyLoss()optimizer=torch.optim.Adam(model.parameters())#返回模型實例和優(yōu)化器、損失函數(shù)returnmodel,criterion,optimizer##示例調(diào)用(需要提供輸入形狀和類別數(shù))##model,criterion,optimizer=build_cnn_model_pytorch((224,224,3),10)#假設(shè)有10個類別```3.模型訓(xùn)練與評估(30分)```pythonimporttensorflowastf#或importtorch##PyTorch示例(注釋掉TensorFlow部分,取消PyTorch注釋并修改)#fromtorch.utils.dataimportDataLoader#假設(shè)train_dataset和num_classes已從上一題獲得#假設(shè)model已從第2題獲得deftrain_and_evaluate(model,train_dataset,num_classes):#TensorFlow示例model.fit(train_dataset,epochs=10,validation_split=0.2)#使用內(nèi)置的validation_split#假設(shè)有一個模擬的測試集測試_dataset(TensorFlow)#test_loss,test_acc=model.evaluate(test_dataset)#print(f"TestLoss:{test_loss:.4f},TestAccuracy:{test_acc:.4f}")##PyTorch示例(需要提供測試數(shù)據(jù)加載器test_dataloader)##forepochinrange(10):##model.train()##forbatch_idx,(data,target)inenumerate(train_dataloader):##optimizer.zero_grad()##output=model(data)##loss=criterion(output,target)##loss.backward()##optimizer.step()###這里缺少驗證和測試代碼,需要實現(xiàn)模型評估邏輯##model.eval()##test_loss=0##correct=0##withtorch.no_grad():##fordata,targetintest_dataloader:##output=model(data)##test_loss+=criterion(output,target).item()##pred=output.argmax(dim=1,keepdim=True)#獲取最高分的索引##correct+=pred.eq(target.view_as(pred)).sum().item()##test_loss/=len(test_dataloader.dataset)##test_acc=100.*correct/len(test_dataloader.dataset)##print(f'Epoch{epoch+1},TestLoss:{test_loss:.4f},TestAccuracy:{test_acc:.2f}%')```二、簡答題1.模型選擇與解釋(10分)對于預(yù)測房屋價格(連續(xù)值)的任務(wù),我會考慮以下類型的深度學(xué)習(xí)模型:*深度神經(jīng)網(wǎng)絡(luò)(DNN)/全連接網(wǎng)絡(luò):對于結(jié)構(gòu)化數(shù)據(jù)(如房屋面積、房間數(shù)、地理位置等數(shù)值特征),DNN可以有效地學(xué)習(xí)特征之間的復(fù)雜非線性關(guān)系。通過堆疊多個全連接層,模型能夠?qū)W習(xí)從原始特征到房價之間的高階抽象表示。實現(xiàn)相對簡單,是處理表格數(shù)據(jù)的常用選擇。*循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)/LSTM/GRU:如果數(shù)據(jù)包含序列信息(例如,按時間順序記錄的房價歷史、歷史交易數(shù)據(jù)),RNN及其變體(LSTM、GRU)能夠捕捉這種時間依賴性。LSTM和GRU通過其門控機制,能夠更好地處理長序列和梯度消失問題,學(xué)習(xí)長期趨勢和季節(jié)性模式。選擇這些模型的原因在于它們各自擅長處理不同類型的數(shù)據(jù)模式和關(guān)系。DNN適合處理具有明確數(shù)值特征的空間結(jié)構(gòu)化數(shù)據(jù);RNN(LSTM/GRU)適合處理具有時間序列依賴性的數(shù)據(jù)。實際應(yīng)用中,可能還需要結(jié)合特征工程,將非結(jié)構(gòu)化數(shù)據(jù)(如房屋描述文本、圖片)轉(zhuǎn)化為模型可處理的格式,并可能構(gòu)建混合模型(如使用CNN處理圖像特征,使用RNN處理文本特征,最后融合)。2.正則化方法(10分)過擬合是指模型在訓(xùn)練數(shù)據(jù)上表現(xiàn)非常好,但在未見過的測試數(shù)據(jù)上表現(xiàn)較差的現(xiàn)象。這通常是因為模型學(xué)習(xí)了訓(xùn)練數(shù)據(jù)中的噪聲或冗余模式,而不是泛化的潛在規(guī)律。常用的正則化方法及其原理和作用如下:*L1正則化(Lasso):向模型的損失函數(shù)中添加一個與模型權(quán)重大?。ń^對值)成正比的懲罰項(`λ*Σ|w|`)。L1正則化的效果是傾向于產(chǎn)生一些權(quán)重值為零的神經(jīng)元,從而實現(xiàn)模型參數(shù)的稀疏化,有助于特征

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論