国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【人工智能課程】計(jì)算機(jī)科學(xué)博士作業(yè)一

這篇具有很好參考價(jià)值的文章主要介紹了【人工智能課程】計(jì)算機(jī)科學(xué)博士作業(yè)一。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

【人工智能課程】計(jì)算機(jī)科學(xué)博士作業(yè)一

1 任務(wù)要求

  • 模型擬合:用深度神經(jīng)網(wǎng)絡(luò)擬合一個(gè)回歸模型。從各種角度對其改進(jìn),評價(jià)指標(biāo)為MSE。
  • 掌握技巧:
    • 熟悉并掌握深度學(xué)習(xí)模型訓(xùn)練的基本技巧。
    • 提高PyTorch的使用熟練度。
    • 掌握改進(jìn)深度學(xué)習(xí)的方法。

【人工智能課程】計(jì)算機(jī)科學(xué)博士作業(yè)一,深度學(xué)習(xí),機(jī)器學(xué)習(xí),人工智能,pytorch,COVID-19人數(shù)預(yù)測,回歸任務(wù),深度學(xué)習(xí),機(jī)器學(xué)習(xí),非時(shí)間序列回歸

數(shù)據(jù)集下載:

  • Kaggle下載數(shù)據(jù):
    https://www.kaggle.com/competitions/ml2022spring-hw1
  • 百度云下載數(shù)據(jù): https://pan.baidu.com/s/1ahGxV7dO2JQMRCYbmDQyVg (提取碼:ml22)

這是一個(gè)非時(shí)間序列的回歸任務(wù),預(yù)測公共場所獲取的人群數(shù)據(jù),預(yù)測會(huì)發(fā)生COVID-19陽性的人數(shù)。改進(jìn)角度,參考博客

【人工智能課程】計(jì)算機(jī)科學(xué)博士作業(yè)一,深度學(xué)習(xí),機(jī)器學(xué)習(xí),人工智能,pytorch,COVID-19人數(shù)預(yù)測,回歸任務(wù),深度學(xué)習(xí),機(jī)器學(xué)習(xí),非時(shí)間序列回歸

2 baseline 代碼

我將老師給的代碼重構(gòu)了結(jié)構(gòu),便于組員之間協(xié)作編程,無需修改的代碼都放到了utils.py中。只需要修改特征選擇、神經(jīng)網(wǎng)絡(luò)、模型訓(xùn)練部分的代碼就可以。

2.1 導(dǎo)入包

# 數(shù)值、矩陣操作
import math
# 數(shù)據(jù)讀取與寫入make_dot
import pandas as pd
import os
import csv
# 學(xué)習(xí)曲線繪制
from torch.utils.tensorboard import SummaryWriter
from utils import *

2.2 數(shù)據(jù)讀取

# 設(shè)置隨機(jī)種子便于復(fù)現(xiàn)
same_seed(config['seed'])

# 訓(xùn)練集大小(train_data size) : 2699 x 118 (id + 37 states + 16 features x 5 days) 
# 測試集大小(test_data size): 1078 x 117 (沒有l(wèi)abel (last day's positive rate))
pd.set_option('display.max_column', 200) # 設(shè)置顯示數(shù)據(jù)的列數(shù)
train_df, test_df = pd.read_csv('./covid.train.csv'), pd.read_csv('./covid.test.csv')
display(train_df.head(3)) # 顯示前三行的樣本
train_data, test_data = train_df.values, test_df.values
del train_df, test_df # 刪除數(shù)據(jù)減少內(nèi)存占用
train_data, valid_data = train_valid_split(train_data, config['valid_ratio'], config['seed'])

# 打印數(shù)據(jù)的大小
print(f"""train_data size: {train_data.shape} 
valid_data size: {valid_data.shape} 
test_data size: {test_data.shape}""")

2.3 特征選擇

def select_feat(train_data, valid_data, test_data, select_all=True):
    '''
    特征選擇
    選擇較好的特征用來擬合回歸模型
    '''
    y_train, y_valid = train_data[:,-1], valid_data[:,-1]
    raw_x_train, raw_x_valid, raw_x_test = train_data[:,:-1], valid_data[:,:-1], test_data

    if select_all:
        feat_idx = list(range(raw_x_train.shape[1]))
    else:
        feat_idx = [0,1,2,3,4] # TODO: 選擇需要的特征 ,這部分可以自己調(diào)研一些特征選擇的方法并完善.

    return raw_x_train[:,feat_idx], raw_x_valid[:,feat_idx], raw_x_test[:,feat_idx], y_train, y_valid

# 特征選擇
x_train, x_valid, x_test, y_train, y_valid = select_feat(train_data, valid_data, test_data, config['select_all'])

# 打印出特征數(shù)量.
print(f'number of features: {x_train.shape[1]}')

train_dataset, valid_dataset, test_dataset = COVID19Dataset(x_train, y_train), \
                                            COVID19Dataset(x_valid, y_valid), \
                                            COVID19Dataset(x_test)

# 使用Pytorch中Dataloader類按照Batch將數(shù)據(jù)集加載
train_loader = DataLoader(train_dataset, batch_size=config['batch_size'], shuffle=True, pin_memory=True)
valid_loader = DataLoader(valid_dataset, batch_size=config['batch_size'], shuffle=True, pin_memory=True)
test_loader = DataLoader(test_dataset, batch_size=config['batch_size'], shuffle=False, pin_memory=True)

2.4 神經(jīng)網(wǎng)絡(luò)

class My_Model(nn.Module):
    def __init__(self, input_dim):
        super(My_Model, self).__init__()
        # TODO: 修改模型結(jié)構(gòu), 注意矩陣的維度(dimensions) 
        self.layers = nn.Sequential(
            nn.Linear(input_dim, 16),
            nn.ReLU(),
            nn.Linear(16, 8),
            nn.ReLU(),
            nn.Linear(8, 1)
        )

    def forward(self, x):
        x = self.layers(x)
        x = x.squeeze(1) # (B, 1) -> (B)
        return x

2.5 模型訓(xùn)練

def trainer(train_loader, valid_loader, model, config, device):

    criterion = nn.MSELoss(reduction='mean') # 損失函數(shù)的定義
    # 定義優(yōu)化器
    # TODO: 可以查看學(xué)習(xí)更多的優(yōu)化器 https://pytorch.org/docs/stable/optim.html 
    # TODO: L2 正則( 可以使用optimizer(weight decay...) )或者 自己實(shí)現(xiàn)L2正則.
    optimizer = torch.optim.SGD(model.parameters(), lr=config['learning_rate'], momentum=0.9) 
    
    # tensorboard 的記錄器
    # 將 train loss 保存到 "tensorboard/train" 文件夾
    train_writer = SummaryWriter(log_dir=os.path.join('tensorboard', 'train'))
    # 將 valid loss 保存到 "tensorboard/valid" 文件夾
    valid_writer = SummaryWriter(log_dir=os.path.join('tensorboard', 'valid'))


    if not os.path.isdir('./models'):
        # 創(chuàng)建文件夾-用于存儲(chǔ)模型
        os.mkdir('./models')

    n_epochs, best_loss, step, early_stop_count = config['n_epochs'], math.inf, 0, 0

    for epoch in range(n_epochs):
        model.train() # 訓(xùn)練模式
        loss_record = []
        # tqdm可以幫助我們顯示訓(xùn)練的進(jìn)度  
        train_pbar = tqdm(train_loader, position=0, leave=True)
        # 設(shè)置進(jìn)度條的左邊 : 顯示第幾個(gè)Epoch了
        train_pbar.set_description(f'Epoch [{epoch+1}/{n_epochs}]')
        for x, y in train_pbar:
            optimizer.zero_grad()               # 將梯度置0.
            x, y = x.to(device), y.to(device)   # 將數(shù)據(jù)一到相應(yīng)的存儲(chǔ)位置(CPU/GPU)
            pred = model(x)             
            loss = criterion(pred, y)
            loss.backward()                     # 反向傳播 計(jì)算梯度.
            optimizer.step()                    # 更新網(wǎng)絡(luò)參數(shù)
            step += 1
            loss_record.append(loss.detach().item())
            
            # 訓(xùn)練完一個(gè)batch的數(shù)據(jù),將loss 顯示在進(jìn)度條的右邊
            train_pbar.set_postfix({'loss': loss.detach().item()})

        mean_train_loss = sum(loss_record)/len(loss_record)
        
        model.eval() # 將模型設(shè)置成 evaluation 模式.
        loss_record = []
        for x, y in valid_loader:
            x, y = x.to(device), y.to(device)
            with torch.no_grad():
                pred = model(x)
                loss = criterion(pred, y)

            loss_record.append(loss.item())
            
        mean_valid_loss = sum(loss_record)/len(loss_record)
        print(f'Epoch [{epoch+1}/{n_epochs}]: Train loss: {mean_train_loss:.4f}, Valid loss: {mean_valid_loss:.4f}')
        # 每個(gè)epoch,在tensorboard 中記錄驗(yàn)證的損失(后面可以展示出來)
        # 將訓(xùn)練損失和驗(yàn)證損失寫入TensorBoard
        train_writer.add_scalar('Train-Valid Loss', mean_train_loss, step)
        valid_writer.add_scalar('Train-Valid Loss', mean_valid_loss, step)

        if mean_valid_loss < best_loss:
            best_loss = mean_valid_loss
            torch.save(model.state_dict(), config['save_path']) # 模型保存
            print('Saving model with loss {:.3f}...'.format(best_loss))
            early_stop_count = 0
        else: 
            early_stop_count += 1

        if early_stop_count >= config['early_stop']:
            print('\nModel is not improving, so we halt the training session.')
            return
        
device = 'cuda' if torch.cuda.is_available() else 'cpu'
model = My_Model(input_dim=x_train.shape[1]).to(device) # 將模型和訓(xùn)練數(shù)據(jù)放在相同的存儲(chǔ)位置(CPU/GPU)
trainer(train_loader, valid_loader, model, config, device)

2.6 模型可視化

%reload_ext tensorboard
%tensorboard --logdir=tensorboard
#執(zhí)行完后這兩行代碼,在瀏覽器打開:http://localhost:6006/

打開后,將smoothing調(diào)為0,就不會(huì)有四條曲線了。如果不改為0,就會(huì)自動(dòng)加入一條平滑后的曲線在圖中,影響觀察。
【人工智能課程】計(jì)算機(jī)科學(xué)博士作業(yè)一,深度學(xué)習(xí),機(jī)器學(xué)習(xí),人工智能,pytorch,COVID-19人數(shù)預(yù)測,回歸任務(wù),深度學(xué)習(xí),機(jī)器學(xué)習(xí),非時(shí)間序列回歸

2.7 模型評價(jià)

model = My_Model(input_dim=x_train.shape[1]).to(device)
model.load_state_dict(torch.load(config['save_path']))
MSE = predict_MSE(valid_loader, model, device) 

print("MSE:",MSE) 

只跑了10epoch的MSE
MSE: 30.798155

2.8 新建一個(gè)utils.py文件

把以下代碼放進(jìn)去utils.py文件中,放到和以上代碼文件同一級的目錄文章來源地址http://www.zghlxwxcb.cn/news/detail-817676.html

import torch
import torch.nn as nn
from torch.utils.data import Dataset, DataLoader, random_split
import numpy as np
from tqdm import tqdm



config = {
    'seed': 5201314,      # 隨機(jī)種子,可以自己填寫. :)
    'select_all': True,   # 是否選擇全部的特征
    'valid_ratio': 0.2,   # 驗(yàn)證集大小(validation_size) = 訓(xùn)練集大小(train_size) * 驗(yàn)證數(shù)據(jù)占比(valid_ratio)
    'n_epochs': 10,     # 數(shù)據(jù)遍歷訓(xùn)練次數(shù)
    'batch_size': 256,
    'learning_rate': 1e-5,
    'early_stop': 400,    # 如果early_stop輪損失沒有下降就停止訓(xùn)練.
    'save_path': './models/model.ckpt'  # 模型存儲(chǔ)的位置
}

def same_seed(seed):
    '''
    設(shè)置隨機(jī)種子(便于復(fù)現(xiàn))
    '''
    torch.backends.cudnn.deterministic = True
    torch.backends.cudnn.benchmark = False
    np.random.seed(seed)
    torch.manual_seed(seed)
    if torch.cuda.is_available():
        torch.cuda.manual_seed_all(seed)
    print(f'Set Seed = {seed}')


def train_valid_split(data_set, valid_ratio, seed):
    '''
    數(shù)據(jù)集拆分成訓(xùn)練集(training set)和 驗(yàn)證集(validation set)
    '''
    valid_set_size = int(valid_ratio * len(data_set))
    train_set_size = len(data_set) - valid_set_size
    train_set, valid_set = random_split(data_set, [train_set_size, valid_set_size], generator=torch.Generator().manual_seed(seed))
    return np.array(train_set), np.array(valid_set)


def predict(test_loader, model, device):
    model.eval() # 設(shè)置成eval模式.
    preds = []
    for x in tqdm(test_loader):
        x = x.to(device)
        with torch.no_grad():
            pred = model(x)
            preds.append(pred.detach().cpu())
    preds = torch.cat(preds, dim=0).numpy()
    return preds


def predict_MSE(valid_loader, model, device):
    model.eval() # 設(shè)置成eval模式.
    preds = []
    labels = []
    for x,y in tqdm(valid_loader):
        x = x.to(device)
        with torch.no_grad():
            pred = model(x)
            preds.append(pred.detach().cpu())
            labels.append(y)
    preds = torch.cat(preds, dim=0).numpy()
    labels = torch.cat(labels, dim=0).numpy()
    # 計(jì)算MSE
    mse = np.mean((preds - labels) ** 2)
    return mse



class COVID19Dataset(Dataset):
    '''
    x: np.ndarray  特征矩陣.
    y: np.ndarray  目標(biāo)標(biāo)簽, 如果為None,則是預(yù)測的數(shù)據(jù)集
    '''
    def __init__(self, x, y=None):
        if y is None:
            self.y = y
        else:
            self.y = torch.FloatTensor(y)
        self.x = torch.FloatTensor(x)

    def __getitem__(self, idx):
        if self.y is None:
            return self.x[idx]
        return self.x[idx], self.y[idx]

    def __len__(self):
        return len(self.x)

到了這里,關(guān)于【人工智能課程】計(jì)算機(jī)科學(xué)博士作業(yè)一的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 人工智能與計(jì)算機(jī)輔助決策的技術(shù)融合

    人工智能(Artificial Intelligence, AI)和計(jì)算機(jī)輔助決策(Computer-Aided Decision, CAD)是兩個(gè)不同的領(lǐng)域,但它們之間存在密切的聯(lián)系和相互作用。人工智能主要關(guān)注于模擬和創(chuàng)造人類智能的機(jī)器,包括學(xué)習(xí)、理解自然語言、視覺識(shí)別、推理和決策等方面。而計(jì)算機(jī)輔助決策則關(guān)注于利用

    2024年02月22日
    瀏覽(34)
  • hnu計(jì)算機(jī)與人工智能概論5.6

    hnu計(jì)算機(jī)與人工智能概論5.6

    最近有點(diǎn)忙,好久沒更新了,大家見諒!最后一關(guān)howell也做不出來 ?第1關(guān):數(shù)據(jù)分析基礎(chǔ) 1.將scores.xls文件讀到名為df的dataframe中 2.添加平均分列:考勤、實(shí)驗(yàn)操作、實(shí)驗(yàn)報(bào)告的平均 3.輸出前3行學(xué)生的平均分列表,控制小數(shù)點(diǎn)后兩位 4.輸出學(xué)生人數(shù)和班級數(shù) 5.分別輸出實(shí)驗(yàn)報(bào)

    2024年02月04日
    瀏覽(26)
  • hnu計(jì)算機(jī)與人工智能概論答案3.8

    hnu計(jì)算機(jī)與人工智能概論答案3.8

    連夜更新,求求關(guān)注?。?寫在前面:這一課難度較低,報(bào)錯(cuò)時(shí)多看看冒號(hào)和縮進(jìn)有無錯(cuò)誤,祝大家做題順利?。?! 第1關(guān):python分支入門基礎(chǔ) 根據(jù)提示,在右側(cè)編輯器補(bǔ)充代碼,完成分支程序設(shè)計(jì)(用函數(shù)調(diào)用的方式來實(shí)現(xiàn))。 第1題: 閏年的判斷:判斷某一年是否是閏年,

    2024年02月08日
    瀏覽(25)
  • 探索人工智能 | 智能推薦系統(tǒng) 未來沒有人比計(jì)算機(jī)更懂你

    探索人工智能 | 智能推薦系統(tǒng) 未來沒有人比計(jì)算機(jī)更懂你

    智能推薦系統(tǒng)(Recommendation Systems)利用機(jī)器學(xué)習(xí)和數(shù)據(jù)挖掘技術(shù),根據(jù)用戶的興趣和行為,提供個(gè)性化推薦的產(chǎn)品、內(nèi)容或服務(wù)。 智能推薦系統(tǒng)是一種利用機(jī)器學(xué)習(xí)和數(shù)據(jù)分析技術(shù)的應(yīng)用程序,旨在根據(jù)用戶的興趣、偏好和行為模式,向其推薦個(gè)性化的產(chǎn)品、服務(wù)或內(nèi)容。

    2024年02月13日
    瀏覽(52)
  • hnu計(jì)算機(jī)與人工智能概論答案3.15

    hnu計(jì)算機(jī)與人工智能概論答案3.15

    ?終于肝完了!有一說一,這一次難度肉眼可見的提升,終于明白程序員為什么會(huì)禿頂了(頭發(fā)真的禁不住薅?。?,祝大家好運(yùn)! 第1關(guān):循環(huán)結(jié)構(gòu)-while與for循環(huán) 第1題 編程計(jì)算如下公式的值1^2+3^2+5^2+...+995^2+997^2+999^2并輸出結(jié)果 第2題 用 while 語句完成程序邏輯,求如下算法可

    2024年02月08日
    瀏覽(94)
  • hnu計(jì)算機(jī)與人工智能概論答案2.20

    hnu計(jì)算機(jī)與人工智能概論答案2.20

    補(bǔ)一下第一次作業(yè) 第1關(guān):數(shù)據(jù)輸入與輸出 第一題 在屏幕上輸出字符串:hi, \\\"how are you\\\" ,I\\\'m fine and you 第二題 從鍵盤輸入兩個(gè)整數(shù),計(jì)算兩個(gè)數(shù)相除的商與余數(shù) 假設(shè)輸入12,5 輸出為 2 2 第三題 在屏幕上 輸入一個(gè)三位數(shù)輸出該數(shù)的個(gè)位、十位和百位數(shù)字 假設(shè)輸入125 輸出為 5 2

    2024年02月08日
    瀏覽(29)
  • 人工智能在計(jì)算機(jī)視覺中的應(yīng)用與挑戰(zhàn)

    引言 計(jì)算機(jī)視覺是人工智能領(lǐng)域的一個(gè)重要分支,旨在讓計(jì)算機(jī)能夠像人一樣理解和解釋視覺信息,實(shí)現(xiàn)圖像和視頻的自動(dòng)識(shí)別、理解和分析。計(jì)算機(jī)視覺技術(shù)已經(jīng)在許多領(lǐng)域產(chǎn)生了深遠(yuǎn)的影響,如人臉識(shí)別、自動(dòng)駕駛、醫(yī)學(xué)影像分析等。本篇博客將深入探討人工智能在計(jì)算

    2024年02月14日
    瀏覽(26)
  • hnu計(jì)算機(jī)與人工智能概論5.26(方程求根)

    第1關(guān):用暴力搜索法求方程的近似根? 本關(guān)任務(wù):用暴力搜索法求 f(x)=x3?x?1 在[-10,10]之間的近似根。已知f(-10)0,f(10)0,畫圖可知函數(shù)在[-10,10]區(qū)間有且僅有一個(gè)根。要求近似根帶入函數(shù)f(x)之后,函數(shù)值與0之間的誤差在 10?6 之內(nèi),請保留4位小數(shù)輸出該根值,并輸出搜尋次

    2024年02月03日
    瀏覽(23)
  • 階段五:深度學(xué)習(xí)和人工智能(學(xué)習(xí)人工智能的應(yīng)用領(lǐng)域,如自然語言處理,計(jì)算機(jī)視覺等)

    Python是人工智能領(lǐng)域最流行的編程語言之一,它具有簡單易學(xué)、功能強(qiáng)大、庫豐富等優(yōu)點(diǎn),因此在自然語言處理、計(jì)算機(jī)視覺等領(lǐng)域得到了廣泛應(yīng)用。 自然語言處理 自然語言處理是人工智能領(lǐng)域的一個(gè)重要分支,它主要研究如何讓計(jì)算機(jī)理解和處理人類語言。Python在自然語

    2024年02月04日
    瀏覽(46)
  • 讀十堂極簡人工智能課筆記04_計(jì)算機(jī)視覺

    讀十堂極簡人工智能課筆記04_計(jì)算機(jī)視覺

    3.2.3.1.?應(yīng)該發(fā)現(xiàn)真正的邊緣,而盡量避免錯(cuò)報(bào) 3.2.4.1.?應(yīng)該正確地找出邊緣的確切位置 3.2.5.1.?每條實(shí)際的邊緣應(yīng)該檢測為一條邊緣,而不是多條邊緣 4.7.5.1.?有數(shù)以百萬計(jì)的幾乎任何種類的圖像例子 4.7.7.1.?神經(jīng)網(wǎng)絡(luò)自己就能完成這一切

    2024年02月19日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包