中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

蚌埠公司做網(wǎng)站網(wǎng)絡(luò)推廣員為什么做不長

蚌埠公司做網(wǎng)站,網(wǎng)絡(luò)推廣員為什么做不長,揚(yáng)中網(wǎng)站建設(shè)效果,wordpress 文章視頻文章目錄 一、查漏補(bǔ)缺復(fù)盤1、python中zip()用法2、Tensor和tensor的區(qū)別3、計(jì)算圖中的迭代取數(shù)4、nn.Modlue及nn.Linear 源碼理解5、知識雜項(xiàng)思考列表6、KL散度初步理解 二、處理多維特征的輸入1、邏輯回歸模型流程2、Mini-Batch (N samples) 三、加載數(shù)據(jù)集1、Python 魔法方法…

文章目錄

  • 一、查漏補(bǔ)缺復(fù)盤
    • 1、python中zip()用法
    • 2、Tensor和tensor的區(qū)別
    • 3、計(jì)算圖中的迭代取數(shù)
    • 4、nn.Modlue及nn.Linear 源碼理解
    • 5、知識雜項(xiàng)思考列表
    • 6、KL散度初步理解
  • 二、處理多維特征的輸入
    • 1、邏輯回歸模型流程
    • 2、Mini-Batch (N samples)
  • 三、加載數(shù)據(jù)集
    • 1、Python 魔法方法介紹
    • 2、Epoch,Batch-Size,Iteration區(qū)別
    • 3、加載相關(guān)數(shù)據(jù)集的實(shí)現(xiàn)
    • 4、在torchvision,datasets數(shù)據(jù)集
  • 四、多分類問題
    • 1、softmax 再探究
    • 2、獨(dú)熱編碼問題
  • 五、語言模型初步理解
  • 六、相關(guān)代碼實(shí)現(xiàn)
    • 1、簡易實(shí)現(xiàn)小項(xiàng)目代碼地址
    • 2、簡易實(shí)現(xiàn)小項(xiàng)目運(yùn)行過程
    • 3、抑郁癥數(shù)據(jù)預(yù)處理運(yùn)行過程
    • 4、抑郁癥數(shù)據(jù)訓(xùn)練運(yùn)行過程
  • 七、遇到問題及其解決方案
    • 1、pycharm 不能使用GPU加速訓(xùn)練
    • 2、google.protobuf.internal沖突問題

一、查漏補(bǔ)缺復(fù)盤

1、python中zip()用法

python中zip()用法

應(yīng)用舉例

import numpy as np
import matplotlib.pyplot as pltx_data = [1.0, 2.0, 3.0]
y_data = [2.0, 4.0, 6.0]def forward(x):return x*wdef loss(x, y):y_pred = forward(x)return (y_pred - y)**2# 窮舉法
w_list = []
mse_list = []
for w in np.arange(0.0, 4.1, 0.1):print("w=", w)l_sum = 0for x_val, y_val in zip(x_data, y_data):y_pred_val = forward(x_val)loss_val = loss(x_val, y_val)l_sum += loss_valprint('\t', x_val, y_val, y_pred_val, loss_val)print('MSE=', l_sum/3)w_list.append(w)mse_list.append(l_sum/3)plt.plot(w_list,mse_list)
plt.ylabel('Loss')
plt.xlabel('w')
plt.show()    

2、Tensor和tensor的區(qū)別

首先看下代碼區(qū)別

>>> a=torch.Tensor([1,2])
>>> a
tensor([1., 2.])
>>> a=torch.tensor([1,2])
>>> a
tensor([1, 2])
  • torch.Tensor()是python類,更明確地說,是默認(rèn)張量類型torch.FloatTensor()的別名,torch.Tensor([1,2])會調(diào)用Tensor類的構(gòu)造函數(shù)__init__,生成單精度浮點(diǎn)類型的張量。
  • torch.tensor()僅僅是python函數(shù):https://pytorch.org/docs/stable/torch.html torch.tensor
torch.tensor(data, dtype=None, device=None, requires_grad=False)
  • 其中data可以是:list, tuple, NumPy ndarray, scalar和其他類型。
    torch.tensor會從data中的數(shù)據(jù)部分做拷貝(而不是直接引用),根據(jù)原始數(shù)據(jù)類型生成相應(yīng)的torch.LongTensor、torch.FloatTensor和torch.DoubleTensor。

3、計(jì)算圖中的迭代取數(shù)

注意關(guān)注grad取元素規(guī)則

import torch
x_data = [1.0, 2.0, 3.0]
y_data = [2.0, 4.0, 6.0]w = torch.tensor([1.0]) # w的初值為1.0
w.requires_grad = True # 需要計(jì)算梯度def forward(x):return x*w  # w是一個(gè)Tensordef loss(x, y):y_pred = forward(x)return (y_pred - y)**2print("predict (before training)", 4, forward(4).item())for epoch in range(100):for x, y in zip(x_data, y_data):l =loss(x,y) # l是一個(gè)張量,tensor主要是在建立計(jì)算圖 forward, compute the lossl.backward() #  backward,compute grad for Tensor whose requires_grad set to Trueprint('\tgrad:', x, y, w.grad.item())w.data = w.data - 0.01 * w.grad.data   # 權(quán)重更新時(shí),注意grad也是一個(gè)tensorw.grad.data.zero_() # after update, remember set the grad to zeroprint('progress:', epoch, l.item()) # 取出loss使用l.item,不要直接使用l(l是tensor會構(gòu)建計(jì)算圖)print("predict (after training)", 4, forward(4).item())

.data等于進(jìn)tensor修改,.item()等于把數(shù)拿出來

  • w是Tensor(張量類型),Tensor中包含data和grad,data和grad也是Tensor。grad初始為None,調(diào)用l.backward()方法后w.grad為Tensor,故更新w.data時(shí)需使用w.grad.data。如果w需要計(jì)算梯度,那構(gòu)建的計(jì)算圖中,跟w相關(guān)的tensor都默認(rèn)需要計(jì)算梯度。
    在這里插入圖片描述

下面的 Linear(1,1 )是input1,output1

在這里插入圖片描述
在這里插入圖片描述

4、nn.Modlue及nn.Linear 源碼理解

import torch
# prepare dataset
# x,y是矩陣,3行1列 也就是說總共有3個(gè)數(shù)據(jù),每個(gè)數(shù)據(jù)只有1個(gè)特征
x_data = torch.tensor([[1.0], [2.0], [3.0]])
y_data = torch.tensor([[2.0], [4.0], [6.0]])class LinearModel(torch.nn.Module):def __init__(self):super(LinearModel, self).__init__()# (1,1)是指輸入x和輸出y的特征維度,這里數(shù)據(jù)集中的x和y的特征都是1維的# 該線性層需要學(xué)習(xí)的參數(shù)是w和b  獲取w/b的方式分別是~linear.weight/linear.biasself.linear = torch.nn.Linear(1, 1)def forward(self, x):y_pred = self.linear(x)return y_predmodel = LinearModel()# construct loss and optimizer
# criterion = torch.nn.MSELoss(size_average = False)
criterion = torch.nn.MSELoss(reduction = 'sum')
optimizer = torch.optim.SGD(model.parameters(), lr = 0.01) # model.parameters()自動(dòng)完成參數(shù)的初始化操作,這個(gè)地方我可能理解錯(cuò)了# training cycle forward, backward, update
for epoch in range(100):y_pred = model(x_data) # forward:predictloss = criterion(y_pred, y_data) # forward: lossprint(epoch, loss.item())optimizer.zero_grad() # the grad computer by .backward() will be accumulated. so before backward, remember set the grad to zeroloss.backward() # backward: autograd,自動(dòng)計(jì)算梯度optimizer.step() # update 參數(shù),即更新w和b的值print('w = ', model.linear.weight.item())
print('b = ', model.linear.bias.item())x_test = torch.tensor([[4.0]])
y_test = model(x_test)
print('y_pred = ', y_test.data)

參考文章

import torch
from torch import nnm = nn.Linear(20, 30)
input = torch.randn(128, 20)
output = m(input)output.size()   # torch.Size([128, 30])
  • nn.Module 是所有神經(jīng)網(wǎng)絡(luò)單元(neural network modules)的基類
    pytorch在nn.Module中,實(shí)現(xiàn)了__call__方法,而在__call__方法中調(diào)用了forward函數(shù)。
  • 首先創(chuàng)建類對象m,然后通過m(input)實(shí)際上調(diào)用__call__(input),然后__call__(input)調(diào)用
    forward()函數(shù),最后返回計(jì)算結(jié)果為:[ 128 , 20 ] × [ 20 , 30 ] = [ 128 , 30 ]

在這里插入圖片描述

鏈接

5、知識雜項(xiàng)思考列表

1、SGD單個(gè)樣本進(jìn)行梯度下降容易被噪聲帶來巨大干擾

2、矩陣求導(dǎo)理論書籍 matrix cookbook

3、前向傳播是為了計(jì)算損失值,反向傳播是為了計(jì)算梯度來更新模型的參數(shù)

6、KL散度初步理解

  • KL散度(Kullback-Leibler divergence)是兩個(gè)概率分布間差異的非對稱性度量。參與計(jì)算的一個(gè)概率分布為真實(shí)分布,另一個(gè)為理論(擬合)分布,相對熵表示使用理論分布擬合真實(shí)分布時(shí)產(chǎn)生的信息損耗。

KL散度具有以下幾個(gè)性質(zhì):

  1. 非負(fù)性:KL散度的值始終大于等于0,當(dāng)且僅當(dāng)兩個(gè)概率分布完全相同時(shí),KL散度的值才為0。
  2. 不對稱性:KL散度具有方向性,即P到Q的KL散度與Q到P的KL散度不相等。
  3. 無限制性:KL散度的值可能為無窮大,即當(dāng)真實(shí)分布中的某個(gè)事件在理論分布中的概率為0時(shí),KL散度的值為無窮大。

KL散度的計(jì)算公式如下:

D K L ( P ∣ ∣ Q ) = ∑ i P ( i ) log ? P ( i ) Q ( i ) D_{KL}(P||Q) = \sum_{i}P(i) \log \frac{P(i)}{Q(i)} DKL?(P∣∣Q)=i?P(i)logQ(i)P(i)?

其中,(P)和(Q)分別為兩個(gè)概率分布,(P(i))和(Q(i))分別表示在位置(i)處的概率值。當(dāng)KL散度等于0時(shí),表示兩個(gè)概率分布完全相同;當(dāng)KL散度大于0時(shí),表示兩個(gè)概率分布存在差異,且值越大差異越大。

  • 在機(jī)器學(xué)習(xí)中,KL散度有廣泛的應(yīng)用,例如用于衡量兩個(gè)概率分布之間的差異,或者用于優(yōu)化生成式模型的損失函數(shù)等。此外,KL散度還可以用于基于KL散度的樣本選擇來有效訓(xùn)練支持向量機(jī)(SVM)等算法,以解決SVM在大型數(shù)據(jù)集合上效率低下的問題。

邏輯回歸構(gòu)造模板
在這里插入圖片描述

二、處理多維特征的輸入

1、邏輯回歸模型流程

在這里插入圖片描述

2、Mini-Batch (N samples)

在數(shù)學(xué)上轉(zhuǎn)化為矩陣運(yùn)算,轉(zhuǎn)化為向量形式利于GPU進(jìn)行并行運(yùn)算
在這里插入圖片描述

self.linear torch.nn.Linear (8,1) 輸入為8,輸出為1

說明:

  • 1、乘的權(quán)重(w)都一樣,加的偏置(b)也一樣。b變成矩陣時(shí)使用廣播機(jī)制。神經(jīng)網(wǎng)絡(luò)的參數(shù)w和b是網(wǎng)絡(luò)需要學(xué)習(xí)的,其他是已知的。

  • 2、學(xué)習(xí)能力越強(qiáng),有可能會把輸入樣本中噪聲的規(guī)律也學(xué)到。我們要學(xué)習(xí)數(shù)據(jù)本身真實(shí)數(shù)據(jù)的規(guī)律,學(xué)習(xí)能力要有泛化能力。

  • 3、該神經(jīng)網(wǎng)絡(luò)共3層;第一層是8維到6維的非線性空間變換,第二層是6維到4維的非線性空間變換,第三層是4維到1維的非線性空間變換。
    在這里插入圖片描述

  • 4、本算法中torch.nn.Sigmoid() 將其看作是網(wǎng)絡(luò)的一層,而不是簡單的函數(shù)使用

torch.sigmoid、torch.nn.Sigmoid和torch.nn.functional.sigmoid的區(qū)別

三、加載數(shù)據(jù)集

  • DataLoader 主要加載數(shù)據(jù)集

說明:

  • 1、DataSet 是抽象類,不能實(shí)例化對象,主要是用于構(gòu)造我們的數(shù)據(jù)集

  • 2、DataLoader 需要獲取DataSet提供的索引[i]和len;用來幫助我們加載數(shù)據(jù),比如說做shuffle(提高數(shù)據(jù)集的隨機(jī)性),batch_size,能拿出Mini-Batch進(jìn)行訓(xùn)練。它幫我們自動(dòng)完成這些工作。DataLoader可實(shí)例化對象。
    在這里插入圖片描述

  • 3、__getitem__目的是為支持下標(biāo)(索引)操作

1、Python 魔法方法介紹

  • 在Python中,有一些特殊的方法(通常被稱為“魔法方法”或“雙下劃線方法”)是由Python解釋器預(yù)定義的,它們允許對象進(jìn)行某些特殊的操作或重載常見的運(yùn)算符。這些魔法方法通常以雙下劃線(__)開始和結(jié)束。
  1. 初始化方法__init__(self, ...)

在創(chuàng)建對象時(shí)自動(dòng)調(diào)用,用于初始化對象的狀態(tài)。

class MyClass:def __init__(self, value):self.value = value
  1. 字符串表示方法__str__(self)__repr__(self)

用于定義對象的字符串表示。__str__用于在print函數(shù)中,而__repr__用于在repr函數(shù)中。

class MyClass:def __init__(self, value):self.value = valuedef __str__(self):return f"MyClass({self.value})"def __repr__(self):return f"MyClass({self.value})"
  1. 比較方法:如 __eq__(self, other)、__lt__(self, other)

用于定義對象之間的比較操作。

class MyClass:def __init__(self, value):self.value = valuedef __eq__(self, other):if isinstance(other, MyClass):return self.value == other.valuereturn False
  1. 算術(shù)運(yùn)算符方法:如 __add__(self, other)、__sub__(self, other)

用于定義對象之間的算術(shù)運(yùn)算。

class MyClass:def __init__(self, value):self.value = valuedef __add__(self, other):if isinstance(other, MyClass):return MyClass(self.value + other.value)return NotImplemented
  1. 容器方法:如 __len__(self)、__getitem__(self, key)、__setitem__(self, key, value)
  • 用于定義對象作為容器(如列表、字典等)時(shí)的行為。

  • 每個(gè)魔法方法是python的內(nèi)置方法。方法都有對應(yīng)的內(nèi)置函數(shù),或者運(yùn)算符,對這個(gè)對象使用這些函數(shù)或者運(yùn)算符時(shí)就會調(diào)用類中的對應(yīng)魔法方法,可以理解為重寫這些python的內(nèi)置函數(shù)

2、Epoch,Batch-Size,Iteration區(qū)別

在這里插入圖片描述
eg:

10,000 examples --> 1000 Batch-size --> 10 Iteration

1、需要mini_batch 就需要import DataSet和DataLoader

2、繼承DataSet的類需要重寫init,getitem,len魔法函數(shù)。分別是為了加載數(shù)據(jù)集,獲取數(shù)據(jù)索引,獲取數(shù)據(jù)總量。

3、DataLoader對數(shù)據(jù)集先打亂(shuffle),然后劃分成mini_batch。

4、len函數(shù)的返回值 除以 batch_size 的結(jié)果就是每一輪epoch中需要迭代的次數(shù)。

5、inputs, labels = data中的inputs的shape是[32,8],labels 的shape是[32,1]。也就是說mini_batch在這個(gè)地方體現(xiàn)的

在windows 下 wrap 和 linux 下 fork 代碼優(yōu)化

在這里插入圖片描述

3、加載相關(guān)數(shù)據(jù)集的實(shí)現(xiàn)

import  torch
import  numpy as np
from torch.utils.data import Dataset
from torch.utils.data import DataLoaderclass DiabetesDataset(Dataset):def __init__(self,filepath):xy = np.loadtxt(filepath,delimiter=',',dtype=np.float32)#shape本身是一個(gè)二元組(x,y)對應(yīng)數(shù)據(jù)集的行數(shù)和列數(shù),這里[0]我們?nèi)⌒袛?shù),即樣本數(shù)self.len = xy.shape[0]self.x_data = torch.from_numpy(xy[:, :-1])self.y_data = torch.from_numpy(xy[:, [-1]])def __getitem__(self, index):return self.x_data[index],self.y_data[index]def __len__(self):return self.len#定義好DiabetesDataset后我們就可以實(shí)例化他了
dataset = DiabetesDataset('./data/Diabetes_class.csv.gz')
#我們用DataLoader為數(shù)據(jù)進(jìn)行分組,batch_size是一個(gè)組中有多少個(gè)樣本,shuffle表示要不要對樣本進(jìn)行隨機(jī)排列
#一般來說,訓(xùn)練集我們隨機(jī)排列,測試集不。num_workers表示我們可以用多少進(jìn)程并行的運(yùn)算
train_loader = DataLoader(dataset=dataset,batch_size=32,shuffle=True,num_workers=2)class Model(torch.nn.Module):def __init__(self):#構(gòu)造函數(shù)super(Model,self).__init__()self.linear1 = torch.nn.Linear(8,6)#8維到6維self.linear2 = torch.nn.Linear(6, 4)#6維到4維self.linear3 = torch.nn.Linear(4, 1)#4維到1維self.sigmoid = torch.nn.Sigmoid()#因?yàn)樗镞呉矝]有權(quán)重需要更新,所以要一個(gè)就行了,單純的算個(gè)數(shù)def forward(self, x):#構(gòu)建一個(gè)計(jì)算圖,就像上面圖片畫的那樣x = self.sigmoid(self.linear1(x))x = self.sigmoid(self.linear2(x))x = self.sigmoid(self.linear3(x))return  xmodel = Model()#實(shí)例化模型criterion = torch.nn.BCELoss(size_average=False)
#model.parameters()會掃描module中的所有成員,如果成員中有相應(yīng)權(quán)重,那么都會將結(jié)果加到要訓(xùn)練的參數(shù)集合上
optimizer = torch.optim.SGD(model.parameters(),lr=0.1)#lr為學(xué)習(xí)率if __name__=='__main__':#if這條語句在windows系統(tǒng)下一定要加,否則會報(bào)錯(cuò)for epoch in range(1000):for i,data in enumerate(train_loader,0):#取出一個(gè)bath# repare datainputs,labels = data#將輸入的數(shù)據(jù)賦給inputs,結(jié)果賦給labels #Forwardy_pred = model(inputs)loss = criterion(y_pred,labels)print(epoch,loss.item())#Backwardoptimizer.zero_grad()loss.backward()#updateoptimizer.step()

4、在torchvision,datasets數(shù)據(jù)集

在torchvision,datasets 下的常見數(shù)據(jù)集
在這里插入圖片描述

四、多分類問題

1、softmax 再探究

在這里插入圖片描述
每個(gè)類別輸出都使用二分類的交叉熵,這樣的話所有類別都是一個(gè)獨(dú)立的分布,概率加起來不等于一

注意:我們是將每一個(gè)類別看作一個(gè)二分類問題,且最后每個(gè)輸出值需滿足兩個(gè)要求:①≥ 0 ②∑ = 1 即輸出的是一個(gè)分布。

在神經(jīng)網(wǎng)絡(luò)中,特別是在分類任務(wù)中,Softmax 函數(shù)通常被用作最后一層(線性層或全連接層)的激活函數(shù),以將模型的輸出轉(zhuǎn)換為概率分布。對于給定向

Softmax ( Z l ) i = e Z i l ∑ j = 1 k e Z j l \text{Softmax}(Z^l)_i = \frac{e^{Z^l_i}}{\sum_{j=1}^{k} e^{Z^l_j}} Softmax(Zl)i?=j=1k?eZjl?eZil?? 對于 i = 0 … … K ? 1 \quad \text{對于} \quad i = 0……K-1 對于i=0……K?1

除法是因?yàn)闅w一化

因?yàn)檩敵龅氖歉怕?#xff0c;所以要是正數(shù);k個(gè)類的概率相互抑制,概率之和是1.所以要先轉(zhuǎn)正再歸一化,也就是softmax

  • 在分類任務(wù)中,特別是當(dāng)使用交叉熵?fù)p失函數(shù)(Cross-Entropy Loss)時(shí),對于給定的預(yù)測概率分布 Y ^ \hat{Y} Y^和真實(shí)標(biāo)簽 Y,損失函數(shù)可以定義為:

Loss ( Y ^ , Y ) = ? ∑ i = 1 k Y i log ? Y ^ i \text{Loss}(\hat{Y}, Y) = -\sum_{i=1}^{k} Y_i \log \hat{Y}_i Loss(Y^,Y)=?i=1k?Yi?logY^i?
在這里插入圖片描述

注意這里,(Y) 通常是一個(gè)獨(dú)熱編碼(one-hot encoded)的向量,其中只有一個(gè)元素為1(表示真實(shí)的類別),其余元素為0。因此,在實(shí)際計(jì)算中,由于除了真實(shí)類別對應(yīng)的 (Y_i) 為1外,其余 (Y_i) 都為0,所以求和式中實(shí)際上只有一項(xiàng)是有效的。

2、獨(dú)熱編碼問題

one-hot介紹
在這里插入圖片描述

五、語言模型初步理解

1、語言模型的概念

  • 語言模型(language model)是自然語言處理的重要技術(shù)。自然語言處理中最常見的數(shù)據(jù)是文本數(shù)據(jù)??梢园岩欢巫匀徽Z言文本看作一段離散的時(shí)間序列。假設(shè)一段長度為 T T T的文本中的詞依次為 w 1 , w 2 , … , w T w_1, w_2, \ldots, w_T w1?,w2?,,wT?,那么在離散的時(shí)間序列中, w t w_t wt? 1 ≤ t ≤ T 1 \leq t \leq T 1tT)可看作在時(shí)間步(time step) t t t的輸出或標(biāo)簽。給定一個(gè)長度為 T T T的詞的序列 w 1 , w 2 , … , w T w_1, w_2, \ldots, w_T w1?,w2?,,wT?,語言模型將計(jì)算該序列的概率:

P ( w 1 , w 2 , … , w T ) . P(w_1, w_2, \ldots, w_T). P(w1?,w2?,,wT?).

2、語言模型的計(jì)算

  • 假設(shè)序列 w 1 , w 2 , … , w T w_1, w_2, \ldots, w_T w1?,w2?,,wT?中的每個(gè)詞是依次生成的,我們有

P ( w 1 , w 2 , … , w T ) = ∏ t = 1 T P ( w t ∣ w 1 , … , w t ? 1 ) . P(w_1, w_2, \ldots, w_T) = \prod_{t=1}^T P(w_t \mid w_1, \ldots, w_{t-1}). P(w1?,w2?,,wT?)=t=1T?P(wt?w1?,,wt?1?).

例如,一段含有4個(gè)詞的文本序列的概率

P ( w 1 , w 2 , w 3 , w 4 ) = P ( w 1 ) P ( w 2 ∣ w 1 ) P ( w 3 ∣ w 1 , w 2 ) P ( w 4 ∣ w 1 , w 2 , w 3 ) . P(w_1, w_2, w_3, w_4) = P(w_1) P(w_2 \mid w_1) P(w_3 \mid w_1, w_2) P(w_4 \mid w_1, w_2, w_3). P(w1?,w2?,w3?,w4?)=P(w1?)P(w2?w1?)P(w3?w1?,w2?)P(w4?w1?,w2?,w3?).

  • 為了計(jì)算語言模型,我們需要計(jì)算詞的概率,以及一個(gè)詞在給定前幾個(gè)詞的情況下的條件概率,即語言模型參數(shù)。設(shè)訓(xùn)練數(shù)據(jù)集為一個(gè)大型文本語料庫,如維基百科的所有條目。詞的概率可以通過該詞在訓(xùn)練數(shù)據(jù)集中的相對詞頻來計(jì)算。例如, P ( w 1 ) P(w_1) P(w1?)可以計(jì)算為 w 1 w_1 w1?在訓(xùn)練數(shù)據(jù)集中的詞頻(詞出現(xiàn)的次數(shù))與訓(xùn)練數(shù)據(jù)集的總詞數(shù)之比。因此,根據(jù)條件概率定義,一個(gè)詞在給定前幾個(gè)詞的情況下的條件概率也可以通過訓(xùn)練數(shù)據(jù)集中的相對詞頻計(jì)算。例如, P ( w 2 ∣ w 1 ) P(w_2 \mid w_1) P(w2?w1?)可以計(jì)算為 w 1 , w 2 w_1, w_2 w1?,w2?兩詞相鄰的頻率與 w 1 w_1 w1?詞頻的比值,因?yàn)樵摫戎导?span id="vxwlu0yf4" class="katex--inline"> P ( w 1 , w 2 ) P(w_1, w_2) P(w1?,w2?) P ( w 1 ) P(w_1) P(w1?)之比;而 P ( w 3 ∣ w 1 , w 2 ) P(w_3 \mid w_1, w_2) P(w3?w1?,w2?)同理可以計(jì)算為 w 1 w_1 w1?、 w 2 w_2 w2? w 3 w_3 w3?三詞相鄰的頻率與 w 1 w_1 w1? w 2 w_2 w2?兩詞相鄰的頻率的比值。以此類推。

3、 n n n元語法

  • 當(dāng)序列長度增加時(shí),計(jì)算和存儲多個(gè)詞共同出現(xiàn)的概率的復(fù)雜度會呈指數(shù)級增加。 n n n元語法通過馬爾可夫假設(shè)(雖然并不一定成立)簡化了語言模型的計(jì)算。這里的馬爾可夫假設(shè)是指一個(gè)詞的出現(xiàn)只與前面 n n n個(gè)詞相關(guān),即 n n n階馬爾可夫鏈(Markov chain of order n n n)。如果 n = 1 n=1 n=1,那么有 P ( w 3 ∣ w 1 , w 2 ) = P ( w 3 ∣ w 2 ) P(w_3 \mid w_1, w_2) = P(w_3 \mid w_2) P(w3?w1?,w2?)=P(w3?w2?)。如果基于 n ? 1 n-1 n?1階馬爾可夫鏈,我們可以將語言模型改寫為

P ( w 1 , w 2 , … , w T ) ≈ ∏ t = 1 T P ( w t ∣ w t ? ( n ? 1 ) , … , w t ? 1 ) . P(w_1, w_2, \ldots, w_T) \approx \prod_{t=1}^T P(w_t \mid w_{t-(n-1)}, \ldots, w_{t-1}) . P(w1?,w2?,,wT?)t=1T?P(wt?wt?(n?1)?,,wt?1?).

以上也叫 n n n元語法( n n n-grams)。它是基于 n ? 1 n - 1 n?1階馬爾可夫鏈的概率語言模型。當(dāng) n n n分別為1、2和3時(shí),我們將其分別稱作一元語法(unigram)、二元語法(bigram)和三元語法(trigram)。例如,長度為4的序列 w 1 , w 2 , w 3 , w 4 w_1, w_2, w_3, w_4 w1?,w2?,w3?,w4?在一元語法、二元語法和三元語法中的概率分別為

P ( w 1 , w 2 , w 3 , w 4 ) = P ( w 1 ) P ( w 2 ) P ( w 3 ) P ( w 4 ) , P ( w 1 , w 2 , w 3 , w 4 ) = P ( w 1 ) P ( w 2 ∣ w 1 ) P ( w 3 ∣ w 2 ) P ( w 4 ∣ w 3 ) , P ( w 1 , w 2 , w 3 , w 4 ) = P ( w 1 ) P ( w 2 ∣ w 1 ) P ( w 3 ∣ w 1 , w 2 ) P ( w 4 ∣ w 2 , w 3 ) . \begin{aligned} P(w_1, w_2, w_3, w_4) &= P(w_1) P(w_2) P(w_3) P(w_4) ,\\ P(w_1, w_2, w_3, w_4) &= P(w_1) P(w_2 \mid w_1) P(w_3 \mid w_2) P(w_4 \mid w_3) ,\\ P(w_1, w_2, w_3, w_4) &= P(w_1) P(w_2 \mid w_1) P(w_3 \mid w_1, w_2) P(w_4 \mid w_2, w_3) . \end{aligned} P(w1?,w2?,w3?,w4?)P(w1?,w2?,w3?,w4?)P(w1?,w2?,w3?,w4?)?=P(w1?)P(w2?)P(w3?)P(w4?),=P(w1?)P(w2?w1?)P(w3?w2?)P(w4?w3?),=P(w1?)P(w2?w1?)P(w3?w1?,w2?)P(w4?w2?,w3?).?

當(dāng) n n n較小時(shí), n n n元語法往往并不準(zhǔn)確。例如,在一元語法中,由三個(gè)詞組成的句子“你走先”和“你先走”的概率是一樣的。然而,當(dāng) n n n較大時(shí), n n n元語法需要計(jì)算并存儲大量的詞頻和多詞相鄰頻率。

六、相關(guān)代碼實(shí)現(xiàn)

1、簡易實(shí)現(xiàn)小項(xiàng)目代碼地址

Github

https://github.com/aqlzh/Artificial-intelligence

在這里插入圖片描述

2、簡易實(shí)現(xiàn)小項(xiàng)目運(yùn)行過程

在這里插入圖片描述

3、抑郁癥數(shù)據(jù)預(yù)處理運(yùn)行過程

在這里插入圖片描述


def get_files(path):file_info = os.walk(path)file_list = []for r, d, f in file_info:file_list += freturn file_listdef get_dirs(path):file_info = os.walk(path)dirs = []for d, r, f in file_info:dirs.append(d)return dirs[1:]def generate_label_file():print('get label....')base_url = './AVEC2014/label/DepressionLabels/'file_list = get_files(base_url)labels = []loader = tqdm(file_list)for file in loader:label = pd.read_csv(base_url + file, header=None)labels.append([file[:file.find('_Depression.csv')], label[0][0]])loader.set_description('file:{}'.format(file))pd.DataFrame(labels, columns=['file', 'label']).to_csv('./processed/label.csv', index=False)return labelsdef generate_img(path, v_type, img_path):videos = get_files(path)loader = tqdm(videos)for video in loader:name = video[:5]save_path = img_path + v_type + '/' + nameos.makedirs(save_path, exist_ok=True)cap = cv2.VideoCapture(path + video)n_frames = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))gap = int(n_frames / 100)for i in range(n_frames):success, frame = cap.read()if success and i % gap == 0:cv2.imwrite(save_path + '/{}.jpg'.format(int(i / gap)), frame, [int(cv2.IMWRITE_JPEG_QUALITY), 100])loader.set_description("data:{} type:{} video:{} frame:{}".format(path.split('/')[2], v_type, name, i))cap.release()def get_img():print('get video frames....')train_f = './AVEC2014/train/Freeform/'train_n = './AVEC2014/train/Northwind/'test_f = './AVEC2014/test/Freeform/'test_n = './AVEC2014/test/Northwind/'validate_f = './AVEC2014/dev/Freeform/'validate_n = './AVEC2014/dev/Northwind/'dirs = [train_f, train_n, test_f, test_n, validate_f, validate_n]types = ['Freeform', 'Northwind', 'Freeform', 'Northwind', 'Freeform', 'Northwind']img_path = ['./img/train/', './img/train/', './img/test/', './img/test/', './img/validate/', './img/validate/']os.makedirs('./img/train', exist_ok=True)os.makedirs('./img/test', exist_ok=True)os.makedirs('./img/validate', exist_ok=True)for i in range(6):generate_img(dirs[i], types[i], img_path[i])def get_face():print('get frame faces....')detector = MTCNN()save_path = ['./processed/train/Freeform/', './processed/train/Northwind/', './processed/test/Freeform/','./processed/test/Northwind/', './processed/validate/Freeform/', './processed/validate/Northwind/']paths = ['./img/train/Freeform/', './img/train/Northwind/', './img/test/Freeform/', './img/test/Northwind/','./img/validate/Freeform/', './img/validate/Northwind/']for index, path in enumerate(paths):dirs = get_dirs(path)loader = tqdm(dirs)for d in loader:os.makedirs(save_path[index] + d.split('/')[-1], exist_ok=True)files = get_files(d)for file in files:img_path = d + '/' + files_path = save_path[index] + d.split('/')[-1] + '/' + fileimg = cv2.cvtColor(cv2.imread(img_path), cv2.COLOR_BGR2RGB)info = detector.detect_faces(img)if (len(info) > 0):x, y, width, height = info[0]['box']confidence = info[0]['confidence']b, g, r = cv2.split(img)img = cv2.merge([r, g, b])img = img[y:y + height, x:x + width, :]cv2.imwrite(s_path, img, [int(cv2.IMWRITE_JPEG_QUALITY), 100])loader.set_description('confidence:{:4f} img:{}'.format(confidence, img_path))if __name__ == '__main__':os.makedirs('./img', exist_ok=True)os.makedirs('./processed', exist_ok=True)os.makedirs('./processed/train', exist_ok=True)os.makedirs('./processed/test', exist_ok=True)os.makedirs('./processed/validate', exist_ok=True)label = generate_label_file()get_img()get_face()

數(shù)據(jù)預(yù)處理時(shí)間最長的一集 😢😢

預(yù)處理有兩步驟

  • 第一步是從視頻中提取圖片(抽取視頻幀,每個(gè)視頻按間隔抽取100-105幀)
  • 第二步是從圖片中提取人臉信息(使用MTCNN提取人臉,并分割圖片)
    在這里插入圖片描述

預(yù)處理數(shù)據(jù)成功,結(jié)果如下(跑了一整個(gè)晚上)😵😵

在這里插入圖片描述

4、抑郁癥數(shù)據(jù)訓(xùn)練運(yùn)行過程

電腦配置感覺跟不上了,跑不動(dòng)了,epoch 0 都跑了大半天😱😱

在這里插入圖片描述

七、遇到問題及其解決方案

1、pycharm 不能使用GPU加速訓(xùn)練

https://blog.csdn.net/QuantumYou/article/details/139215013?spm=1001.2014.3001.5501

在這里插入圖片描述

2、google.protobuf.internal沖突問題

https://blog.csdn.net/QuantumYou/article/details/139212458?spm=1001.2014.3001.5501

在這里插入圖片描述

http://www.risenshineclean.com/news/48916.html

相關(guān)文章:

  • 做的網(wǎng)站怎么放在網(wǎng)上百度的人工客服電話
  • h5頁面生成青島seo精靈
  • 微信朋友圈推廣平臺seo銷售代表招聘
  • golang做網(wǎng)站怎么樣微信群免費(fèi)推廣平臺
  • 網(wǎng)站做違法的事情投訴百度推廣賬號登錄入口
  • 香港空間送網(wǎng)站如何利用seo賺錢
  • 昌平網(wǎng)站建設(shè)騰訊會議付費(fèi)
  • 什么是網(wǎng)站的后臺垂直搜索引擎
  • 建設(shè)思想政治教育專題網(wǎng)站個(gè)人網(wǎng)站首頁設(shè)計(jì)
  • 誰可以教我做網(wǎng)站南京廣告宣傳公司seo
  • 付給招聘網(wǎng)站的費(fèi)用怎么做分錄深圳整站seo
  • 深圳網(wǎng)站建設(shè)智能 樂云踐新淘寶站內(nèi)推廣方式有哪些
  • 男人最愛的做網(wǎng)站站長之家統(tǒng)計(jì)
  • 怎樣創(chuàng)建網(wǎng)站詳細(xì)步驟seo技術(shù)優(yōu)化服務(wù)
  • 有經(jīng)驗(yàn)的南昌網(wǎng)站制作百度關(guān)鍵詞優(yōu)化策略
  • 廣告網(wǎng)站模板下載 迅雷下載安裝網(wǎng)站維護(hù)費(fèi)一年多少錢
  • WordPress網(wǎng)站論文微信小程序開發(fā)文檔
  • 免費(fèi)模板建站寧德市醫(yī)院東僑院區(qū)
  • 做網(wǎng)站自動(dòng)賺錢網(wǎng)絡(luò)推廣都需要做什么
  • 佛山專注網(wǎng)站制作細(xì)節(jié)長沙縣網(wǎng)絡(luò)營銷咨詢
  • 網(wǎng)站開發(fā)工程師培訓(xùn)seo是什么職業(yè)
  • 兼職網(wǎng)站開發(fā)全部視頻支持代表手機(jī)瀏覽器
  • 三河建設(shè)局網(wǎng)站熱門seo推廣排名穩(wěn)定
  • 網(wǎng)站備案 修改優(yōu)化seo廠家
  • 網(wǎng)站制作 徐州晉江怎么交換友情鏈接
  • 怎樣到國外做合法博彩法網(wǎng)站河南鄭州最新消息
  • 錦州做網(wǎng)站全網(wǎng)營銷與seo
  • 幫別人做設(shè)計(jì)圖的網(wǎng)站渠道推廣策略
  • 旺旺號查詢網(wǎng)站怎么做百度推廣個(gè)人怎么開戶
  • 公司網(wǎng)站怎么做才能有官網(wǎng)二字推廣營銷軟件app