欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

首頁綜合 正文
目錄

柚子快報激活碼778899分享:網(wǎng)絡(luò) 深度學(xué)習第三周學(xué)習總結(jié)

柚子快報激活碼778899分享:網(wǎng)絡(luò) 深度學(xué)習第三周學(xué)習總結(jié)

http://yzkb.51969.com/

先自我介紹一下,小編浙江大學(xué)畢業(yè),去過華為、字節(jié)跳動等大廠,目前阿里P7

深知大多數(shù)程序員,想要提升技能,往往是自己摸索成長,但自己不成體系的自學(xué)效果低效又漫長,而且極易碰到天花板技術(shù)停滯不前!

因此收集整理了一份《2024年最新Linux運維全套學(xué)習資料》,初衷也很簡單,就是希望能夠幫助到想自學(xué)提升又不知道該從何學(xué)起的朋友。

既有適合小白學(xué)習的零基礎(chǔ)資料,也有適合3年以上經(jīng)驗的小伙伴深入學(xué)習提升的進階課程,涵蓋了95%以上運維知識點,真正體系化!

由于文件比較多,這里只是將部分目錄截圖出來,全套包含大廠面經(jīng)、學(xué)習筆記、源碼講義、實戰(zhàn)項目、大綱路線、講解視頻,并且后續(xù)會持續(xù)更新

如果你需要這些資料,可以添加V獲?。簐ip1024b (備注運維)

正文

1.2.3使用遷移學(xué)習訓(xùn)練網(wǎng)絡(luò)

二、ResNext網(wǎng)絡(luò)

1、ResNext改進之處

三、基于Lenet網(wǎng)絡(luò)結(jié)構(gòu)的貓狗圖像分類

1、Lenet網(wǎng)絡(luò)結(jié)構(gòu)

2、pytorch代碼實現(xiàn)

3.2.1數(shù)據(jù)集加載

3.2.2網(wǎng)絡(luò)結(jié)構(gòu)

3.2.3網(wǎng)絡(luò)訓(xùn)練

3.2.4測試并提交.csv文件

四、基于Resnet的貓狗大戰(zhàn)

五、思考題

一、ResNet

1、ResNet介紹

ResNet在2015年由微軟實驗室提出,斬獲當年ImageNet競賽中分類任務(wù)第一名,目標檢測第一名。

通過堆疊卷積層和池化層來增加網(wǎng)絡(luò)的深度,這樣的網(wǎng)絡(luò)性能是否就能相對淺層網(wǎng)絡(luò)更優(yōu)秀?在《Deep Residual Learning for Image Recognition》這篇論文中給出了答案。

上圖截取自原論文,可以看到。56層的網(wǎng)絡(luò)不管是訓(xùn)練誤差還是測試誤差都要高于20層的網(wǎng)絡(luò) 。論文作者給出了兩種解釋:一是梯度消失或梯度爆炸。隨著網(wǎng)絡(luò)層數(shù)的加深,假設(shè)層與層之間的誤差梯度小于(大于)1,那在反向傳播的過程中,梯度會越來越?。ù螅?,這就導(dǎo)致了梯度消失(爆炸)從而降低了網(wǎng)絡(luò)的性能??梢酝ㄟ^數(shù)據(jù)標準化處理、權(quán)重初始化、batch normalization解決。batch normalization將一批數(shù)據(jù)(一個batch)的每一個通道標準化為均值為0,方差為一的分布。詳見博文。二是退化問題,在解決了第一個問題后,仍然無法完全解決上述問題,作者便提出了一個殘差結(jié)構(gòu)來解決遞歸問題。下圖是兩種殘差結(jié)構(gòu),其中左邊的殘差結(jié)構(gòu)主要用于層數(shù)較淺的網(wǎng)絡(luò),而右邊的殘差結(jié)構(gòu)則主要用于層數(shù)較深的網(wǎng)絡(luò)。

可以看到殘差結(jié)構(gòu)將輸入與輸出進行了相加,這就要求輸入與輸出具有相同的shape。經(jīng)計算可得右邊的殘差結(jié)構(gòu)的參數(shù)小于左邊。?這也使得它可以應(yīng)用到更深的網(wǎng)絡(luò)中。

論文共給出了18層、34層、50層、101層、152層五個層數(shù)網(wǎng)絡(luò)的結(jié)構(gòu)

34層網(wǎng)絡(luò)的詳細結(jié)構(gòu)如下。

標注實線的殘差結(jié)構(gòu)的輸入與輸出的shape完全一樣可以直接相加。而標注虛線的殘差結(jié)構(gòu)輸入與輸出shape不同。需要通過卷積核的個數(shù)進行特征降維或升維、設(shè)置特定卷積核的大小、步長來改變特征圖的高和寬。

2、用Pytorch搭建Resnet

1.2.1兩種殘差塊:

在18層和34層的網(wǎng)絡(luò)中,每個殘差塊的輸入通道數(shù)與輸出通道數(shù)相同,而在剩下三個層數(shù)的網(wǎng)絡(luò)中,每個殘差塊的輸出通道數(shù)是輸入通道數(shù)的四倍。兩種殘差塊的定義如下,通過expansion調(diào)整輸出通道數(shù)。

class BasicBlock(nn.Module):

expansion = 1

def __init__(self, in_channel, out_channel, stride=1, downsample=None, **kwargs):

super(BasicBlock, self).__init__()

self.conv1 = nn.Conv2d(in_channels=in_channel, out_channels=out_channel,

kernel_size=3, stride=stride, padding=1, bias=False)

self.bn1 = nn.BatchNorm2d(out_channel)

self.relu = nn.ReLU()

self.conv2 = nn.Conv2d(in_channels=out_channel, out_channels=out_channel,

kernel_size=3, stride=1, padding=1, bias=False)

self.bn2 = nn.BatchNorm2d(out_channel)

self.downsample = downsample

def forward(self, x):

identity = x

if self.downsample is not None:

identity = self.downsample(x)

out = self.conv1(x)

out = self.bn1(out)

out = self.relu(out)

out = self.conv2(out)

out = self.bn2(out)

out += identity

out = self.relu(out)

return out

class Bottleneck(nn.Module):

expansion = 4

def __init__(self, in_channel, out_channel, stride=1, downsample=None):

super(Bottleneck, self).__init__()

self.conv1 = nn.Conv2d(in_channels=in_channel, out_channels=outchannel,

kernel_size=1, stride=1, bias=False) # squeeze channels

self.bn1 = nn.BatchNorm2d(width)

# -----------------------------------------

self.conv2 = nn.Conv2d(in_channels=outchannel, out_channels=outchannel

kernel_size=3, stride=stride, bias=False, padding=1)

self.bn2 = nn.BatchNorm2d(outchannel)

# -----------------------------------------

self.conv3 = nn.Conv2d(in_channels=outchannel, out_channels=out_channel*self.expansion,

kernel_size=1, stride=1, bias=False) # unsqueeze channels

self.bn3 = nn.BatchNorm2d(out_channel*self.expansion)

self.relu = nn.ReLU(inplace=True)

self.downsample = downsample

def forward(self, x):

identity = x

if self.downsample is not None:

identity = self.downsample(x)

out = self.conv1(x)

out = self.bn1(out)

out = self.relu(out)

out = self.conv2(out)

out = self.bn2(out)

out = self.relu(out)

out = self.conv3(out)

out = self.bn3(out)

out += identity

out = self.relu(out)

return out

1.2.2搭建網(wǎng)絡(luò)

原始圖像的通道數(shù)為3,經(jīng)過卷積,batch normalization,relu、最大值池化后作為Conv2.x的輸入。layer1、layer2、layer3、layer4分別對應(yīng)Conv2.x,Conv3.x,Conv4.x,Conv5.x._make_layer函數(shù)中,第一個參數(shù)是上面兩個block中的一個,在18層和34層的網(wǎng)絡(luò)中為basicblock,而在其余三個網(wǎng)絡(luò)中則為Bottleneck。第二個參數(shù)是Conv2.x,Conv3.x,Conv4.x,Conv5.x第一個殘差塊第一個卷積層中卷積核的個數(shù),第三個參數(shù)是Conv2.x,Conv3.x,Conv4.x,Conv5.x殘差塊的個數(shù),分別為3,4,6,3。以50層網(wǎng)絡(luò)為例,在搭建layer1即(Conv2.x)時,由于expansion=4,故執(zhí)行if語句下的命令,定義了一個downsample函數(shù),它實現(xiàn)了將輸入的通道數(shù)增加為與輸出通道數(shù)相同,從而可以進行矩陣相加操作,這是layer1的三個殘差組中的第一個,將它壓入layers列表中,之后將剩余兩個殘差組壓入列表,它們不再需要改變通道數(shù)。然后搭建layer2(即Conv3.x),layer3和layer4。他們中的某些組或許需要改變特征圖的高寬和通道數(shù)。

class ResNet(nn.Module):

def __init__(self,

block,

blocks_num,

num_classes=1000,

include_top=True):

super(ResNet, self).__init__()

self.include_top = include_top

self.in_channel = 64

self.conv1 = nn.Conv2d(3, self.in_channel, kernel_size=7, stride=2,

padding=3, bias=False)

self.bn1 = nn.BatchNorm2d(self.in_channel)

self.relu = nn.ReLU(inplace=True)

self.maxpool = nn.MaxPool2d(kernel_size=3, stride=2, padding=1)

self.layer1 = self._make_layer(block, 64, blocks_num[0])

self.layer2 = self._make_layer(block, 128, blocks_num[1], stride=2)

self.layer3 = self._make_layer(block, 256, blocks_num[2], stride=2)

self.layer4 = self._make_layer(block, 512, blocks_num[3], stride=2)

if self.include_top:

self.avgpool = nn.AdaptiveAvgPool2d((1, 1)) # output size = (1, 1)

self.fc = nn.Linear(512 * block.expansion, num_classes)

for m in self.modules():

if isinstance(m, nn.Conv2d):

nn.init.kaiming_normal_(m.weight, mode='fan_out', nonlinearity='relu')

def _make_layer(self, block, channel, block_num, stride=1):

downsample = None

if stride != 1 or self.in_channel != channel * block.expansion:

downsample = nn.Sequential(

nn.Conv2d(self.in_channel, channel * block.expansion, kernel_size=1, stride=stride, bias=False),

nn.BatchNorm2d(channel * block.expansion))

layers = []

layers.append(block(self.in_channel,

channel,

downsample=downsample,

stride=stride))

self.in_channel = channel * block.expansion

for _ in range(1, block_num):

layers.append(block(self.in_channel,

channel))

return nn.Sequential(*layers)

def forward(self, x):

x = self.conv1(x)

x = self.bn1(x)

x = self.relu(x)

x = self.maxpool(x)

x = self.layer1(x)

x = self.layer2(x)

x = self.layer3(x)

x = self.layer4(x)

if self.include_top:

x = self.avgpool(x)

x = torch.flatten(x, 1)

x = self.fc(x)

return x

1.2.3使用遷移學(xué)習訓(xùn)練網(wǎng)絡(luò)

遷移學(xué)習是在別人已經(jīng)訓(xùn)練好的模型基礎(chǔ)上訓(xùn)練自己的模型,實驗表明,它可以更快地達到一個理想的效果。常見的遷移學(xué)習方式有以下幾種:1、載入權(quán)重后訓(xùn)練所有參數(shù)。2、載入權(quán)重后只訓(xùn)練最后幾層參數(shù)。3、載入權(quán)重后在原網(wǎng)絡(luò)的基礎(chǔ)上再添加一層全連接層,僅訓(xùn)練最后一個全連接層。

在Resnet網(wǎng)絡(luò)的訓(xùn)練中,可以在官網(wǎng)下載預(yù)訓(xùn)練好的模型,由于它的訓(xùn)練數(shù)據(jù)集是ImageNet,共有1000個類,如果要遷移到自己的實際任務(wù)當中,可以修改全連接層的參數(shù)數(shù)目,在訓(xùn)練最后一層全連接層即可。需要注意在測試時,要對數(shù)據(jù)進行與訓(xùn)練時相同的預(yù)處理。

修改全連接層參數(shù)代碼如下,假設(shè)分類任務(wù)共有五類。下述代碼重新定義了34層Resnet網(wǎng)絡(luò)中的全連接層。

net = resnet34()

# load pretrain weights

# download url: https://download.pytorch.org/models/resnet34-333f7ec4.pth

model_weight_path = "./resnet34-pre.pth"

assert os.path.exists(model_weight_path), "file {} does not exist.".format(model_weight_path)

net.load_state_dict(torch.load(model_weight_path, map_location='cpu'))

# for param in net.parameters():

# param.requires_grad = False

# change fc layer structure

in_channel = net.fc.in_features

net.fc = nn.Linear(in_channel, 5)

net.to(device)

二、ResNext網(wǎng)絡(luò)

1、ResNext改進之處

論文將ResNet網(wǎng)絡(luò)中第二種殘差塊通過分組卷積的方法進行了改進。分組卷積將輸入特征圖的通道分為多個group,對每一個group進行卷積,再對結(jié)果進行拼接。新的殘差塊將通道分為32個group。提高了模型準確率。

下圖是分組卷積的計算量,g表示group的個數(shù)。分組卷積有效減少了計算量。

三、基于Lenet網(wǎng)絡(luò)結(jié)構(gòu)的貓狗圖像分類

1、Lenet網(wǎng)絡(luò)結(jié)構(gòu)

Lenet網(wǎng)絡(luò)結(jié)構(gòu)如下:轉(zhuǎn)自https://zhuanlan.zhihu.com/p/116181964

2、pytorch代碼實現(xiàn)

3.2.1數(shù)據(jù)集加載

import torch

import torch.nn as nn

import torchvision

from torchvision import models,transforms,datasets

import torch.nn.functional as F

from PIL import Image

import torch.optim as optim

import os

device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")

print('Using gpu: %s ' % torch.cuda.is_available())

train_path = './train/'

test_path = './test/'

def get_data(file_path):

file_lst = os.listdir(file_path) #獲得所有文件名稱 xxxx.jpg

data_lst = []

for i in range(len(file_lst)):

clas = file_lst[i][:3] #cat和dog在文件名的開頭

img_path = os.path.join(file_path,file_lst[i])#將文件名與路徑合并得到完整路徑,以備讀取

if clas == 'cat':

data_lst.append((img_path, 0))

else:

data_lst.append((img_path, 1))

return data_lst

class catdog_set(torch.utils.data.Dataset):

def __init__(self, path, transform):

super(catdog_set).__init__()

self.data_lst = get_data(path)#調(diào)用剛才的函數(shù)獲得數(shù)據(jù)列表

self.trans = torchvision.transforms.Compose(transform)

def __len__(self):

return len(self.data_lst)

def __getitem__(self,index):

(img,cls) = self.data_lst[index]

image = self.trans(Image.open(img))

label = torch.tensor(cls,dtype=torch.float32)

return image,label

# 將輸入圖像縮放為 128*128,每一個 batch 中圖像數(shù)量為128

# 訓(xùn)練時,每一個 epoch 隨機打亂圖像的順序,以實現(xiàn)樣本多樣化

train_loader = torch.utils.data.DataLoader(

catdog_set(train_path, [transforms.Resize((128,128)),transforms.ToTensor()]),

batch_size=128, shuffle=True)

訓(xùn)練集20000張圖片(貓10000張,狗10000張)測試集2000張圖片數(shù)據(jù)集下載地址與代碼放在同一目錄下。get_data函數(shù)返回一個列表,是參數(shù)文件夾下每一張圖片的路徑和標簽。[(‘./train/cat_0.jpg’, 0), (‘./train/cat_1.jpg’, 0),…(‘./train/dog_9999.jpg’, 1)]

3.2.2網(wǎng)絡(luò)結(jié)構(gòu)

Lenet的pytorch實現(xiàn)如下,

class Net(nn.Module):

def __init__(self):

super(Net, self).__init__()

self.Conv1 = nn.Conv2d(3, 6, 5)

self.pool = nn.MaxPool2d(kernel_size=2)

self.Conv2 = nn.Conv2d(6, 16, 5)

self.pool = nn.MaxPool2d(kernel_size=2)

self.fc1 = nn.Linear(16*29*29,32)

self.fc2 = nn.Linear(32,2)

def forward(self, x):

x = self.Conv1(x)

print(x.shape)

x = self.pool(x)

print(x.shape)

x = self.pool(self.Conv2(x))

print(x.shape)

x = torch.flatten(x, 1)

print(x.shape)

x = F.relu(self.fc1(x))

x = self.fc2(x)

return x

隨機產(chǎn)生一個指定大小的張量

x = torch.randn(1, 3, 128, 128)

print(x.shape)

net = Net()

y = net(x)

print(y.shape)

輸出如下:torch.Size([1, 3, 128, 128]) torch.Size([1, 6, 124, 124]) torch.Size([1, 6, 62, 62]) torch.Size([1, 16, 29, 29]) torch.Size([1, 13456]) torch.Size([1, 2])

說明網(wǎng)絡(luò)接通,網(wǎng)絡(luò)的輸出是1×2的。

3.2.3網(wǎng)絡(luò)訓(xùn)練

nn.CrossEntropyLoss()是交叉熵損失函數(shù),用于解決多分類或二分類問題。它的輸入是網(wǎng)絡(luò)最后一層的輸出,我們在forward函數(shù)中沒有寫softmax操作,原因在于該損失函數(shù)中對輸入進行了softmax操作。交叉熵函數(shù)

net = Net().to(device)

criterion = nn.CrossEntropyLoss()

optimizer = optim.Adam(net.parameters(), lr=0.001)

for epoch in range(30): # 重復(fù)多輪訓(xùn)練

for i, (inputs, labels) in enumerate(train_loader):

inputs = inputs.to(device)

labels = labels.to(device)

# 優(yōu)化器梯度歸零

optimizer.zero_grad()

# 正向傳播 + 反向傳播 + 優(yōu)化

outputs = net(inputs)

loss = criterion(outputs, labels.long())

loss.backward()

optimizer.step()

print('Epoch: %d loss: %.6f' %(epoch + 1, loss.item()))

print('Finished Training')

訓(xùn)練結(jié)果如下:

Epoch: 1 loss: 0.698980 Epoch: 2 loss: 0.482175 Epoch: 3 loss: 0.496106 Epoch: 4 loss: 0.491504 Epoch: 5 loss: 0.340280 Epoch: 6 loss: 0.421208 Epoch: 7 loss: 0.494740 Epoch: 8 loss: 0.276336 Epoch: 9 loss: 0.195770 Epoch: 10 loss: 0.157310 Epoch: 11 loss: 0.052218 Epoch: 12 loss: 0.055619 Epoch: 13 loss: 0.014557 Epoch: 14 loss: 0.010108 Epoch: 15 loss: 0.004856 Epoch: 16 loss: 0.007189 Epoch: 17 loss: 0.005779 Epoch: 18 loss: 0.108815 Epoch: 19 loss: 0.038461 Epoch: 20 loss: 0.057754 Epoch: 21 loss: 0.010165 Epoch: 22 loss: 0.001001 Epoch: 23 loss: 0.003251 Epoch: 24 loss: 0.000153 Epoch: 25 loss: 0.001171 Epoch: 26 loss: 0.000920 Epoch: 27 loss: 0.001027 Epoch: 28 loss: 0.000189 Epoch: 29 loss: 0.000538

為了做好運維面試路上的助攻手,特整理了上百道 【運維技術(shù)棧面試題集錦】 ,讓你面試不慌心不跳,高薪offer懷里抱!

這次整理的面試題,小到shell、MySQL,大到K8s等云原生技術(shù)棧,不僅適合運維新人入行面試需要,還適用于想提升進階跳槽加薪的運維朋友。

本份面試集錦涵蓋了

174 道運維工程師面試題128道k8s面試題108道shell腳本面試題200道Linux面試題51道docker面試題35道Jenkis面試題78道MongoDB面試題17道ansible面試題60道dubbo面試題53道kafka面試18道m(xù)ysql面試題40道nginx面試題77道redis面試題28道zookeeper

總計 1000+ 道面試題, 內(nèi)容 又全含金量又高

174道運維工程師面試題

1、什么是運維?

2、在工作中,運維人員經(jīng)常需要跟運營人員打交道,請問運營人員是做什么工作的?

3、現(xiàn)在給你三百臺服務(wù)器,你怎么對他們進行管理?

4、簡述raid0 raid1raid5二種工作模式的工作原理及特點

5、LVS、Nginx、HAproxy有什么區(qū)別?工作中你怎么選擇?

6、Squid、Varinsh和Nginx有什么區(qū)別,工作中你怎么選擇?

7、Tomcat和Resin有什么區(qū)別,工作中你怎么選擇?

8、什么是中間件?什么是jdk?

9、講述一下Tomcat8005、8009、8080三個端口的含義?

10、什么叫CDN?

11、什么叫網(wǎng)站灰度發(fā)布?

12、簡述DNS進行域名解析的過程?

13、RabbitMQ是什么東西?

14、講一下Keepalived的工作原理?

15、講述一下LVS三種模式的工作過程?

16、mysql的innodb如何定位鎖問題,mysql如何減少主從復(fù)制延遲?

17、如何重置mysql root密碼?

網(wǎng)上學(xué)習資料一大堆,但如果學(xué)到的知識不成體系,遇到問題時只是淺嘗輒止,不再深入研究,那么很難做到真正的技術(shù)提升。

需要這份系統(tǒng)化的資料的朋友,可以添加V獲?。簐ip1024b (備注運維)

一個人可以走的很快,但一群人才能走的更遠!不論你是正從事IT行業(yè)的老鳥或是對IT行業(yè)感興趣的新人,都歡迎加入我們的的圈子(技術(shù)交流、學(xué)習資源、職場吐槽、大廠內(nèi)推、面試輔導(dǎo)),讓我們一起學(xué)習成長! ,工作中你怎么選擇?

7、Tomcat和Resin有什么區(qū)別,工作中你怎么選擇?

8、什么是中間件?什么是jdk?

9、講述一下Tomcat8005、8009、8080三個端口的含義?

10、什么叫CDN?

11、什么叫網(wǎng)站灰度發(fā)布?

12、簡述DNS進行域名解析的過程?

13、RabbitMQ是什么東西?

14、講一下Keepalived的工作原理?

15、講述一下LVS三種模式的工作過程?

16、mysql的innodb如何定位鎖問題,mysql如何減少主從復(fù)制延遲?

17、如何重置mysql root密碼?

網(wǎng)上學(xué)習資料一大堆,但如果學(xué)到的知識不成體系,遇到問題時只是淺嘗輒止,不再深入研究,那么很難做到真正的技術(shù)提升。

需要這份系統(tǒng)化的資料的朋友,可以添加V獲?。簐ip1024b (備注運維) [外鏈圖片轉(zhuǎn)存中…(img-3AGdcHFv-1713620144293)]

一個人可以走的很快,但一群人才能走的更遠!不論你是正從事IT行業(yè)的老鳥或是對IT行業(yè)感興趣的新人,都歡迎加入我們的的圈子(技術(shù)交流、學(xué)習資源、職場吐槽、大廠內(nèi)推、面試輔導(dǎo)),讓我們一起學(xué)習成長!

柚子快報激活碼778899分享:網(wǎng)絡(luò) 深度學(xué)習第三周學(xué)習總結(jié)

http://yzkb.51969.com/

參考文章

評論可見,查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。

轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/18839731.html

發(fā)布評論

您暫未設(shè)置收款碼

請在主題配置——文章設(shè)置里上傳

掃描二維碼手機訪問

文章目錄