使用prefetch_generator
庫 在後台載入下一batch的資料,原本pytorch預設的dataloader
會建立一些worker
執行緒來預讀取新的資料,但是除非這些執行緒的資料全部都被清空,這些執行緒才會讀下一批資料。使用prefetch_generator
,我們可以保證執行緒不會等待,每個執行緒都總有至少乙個資料在載入。
轉殖源**
git clone
安裝apex
cd apex
python setup.py install
最好開啟pycharm的終端進行安裝,這樣實在anaconda的環境裡安裝了刪除剛剛clone下來的apex資料夾,然後重啟pycharm
【注意】安裝pytorch和cuda時注意版本對應,要按照正確流程安裝測試安裝成功
from apex import amp
如果匯入不報錯說明安裝成功
from apex import amp # 這個必須的,其他的導包省略了
train_dataset = mydataset("......")
train_loader = dataloader(dataset=train_dataset, batch_size=2, num_workers=4, shuffle=true)
model = mynet().to(device) # 建立模型
criterion = nn.mseloss() # 定義損失函式
optimizer = optim.adam(net.parameters(), lr=learning_rate, weight_decay=0.00001) # 優化器
net, optimizer = amp.initialize(net, optimizer, opt_level="o1") # 這一步很重要
# 學習率衰減
scheduler = optim.lr_scheduler.reducelronplateau(
optimizer=optimizer, mode="min",factor=0.1, patience=3,
verbose=false,cooldown=0, min_lr=0.0, eps=1e-7)
for epoch in range(epochs):
net.train() # 訓練模式
train_loss_epoch = # 記錄乙個epoch內的訓練集每個batch的loss
test_loss_epoch = # 記錄乙個epoch內測試集的每個batch的loss
for i, data in enumerate(train_loader):
# forward
x, y = data
x = x.to(device)
y = y.to(device)
outputs = net(x)
# backward
optimizer.zero_grad()
loss = criterion(outputs, labels)
# 這一步也很重要
with amp.scale_loss(loss, optimizer) as scaled_loss:
scaled_loss.backward()
# 更新權重
optimizer.step()
scheduler.step(1) # 更新學習率。每1步更新一次
考察amp.initialize(net, optimizer, opt_level="o1")
的opt_level
引數
一般我們用o1
級別就行,最多o2
,注意,是歐
不是零
屌絲的特徵
屌絲一般都是農村家庭或城市底層小市民家庭出身,有的十二載寒窗考上大學,攻讀理科專業,或失敗而轉向文科等真正工作後,卻發現沒有獲得理想的效果,投入與產出不成比例,很是得不償失 有的初中輟學,進城務工,或成了髮廊師傅,或成了網咖網管,在城市的繁華之中分得一杯苦羹 或是無業遊民,但是自己一般不願承認,網上...
屌絲的出路
屌絲的出路 婚禮端午節,我最好的乙個朋友,也就是常說的死黨,結婚了。我從深圳專程飛回西安參加他的婚禮。雖然比不上開著跑車的富二代,但朋友家庭條件也算不錯,婚禮舉辦得很隆重 花車,寶馬760li 迎親車隊,30輛黑色奧迪a6 當然,朋友自己的蒙迪歐今天就閒在車庫裡了。婚房,高檔社群,精裝修,180平,...
屌絲的出路
婚禮 端午節,我最好的乙個朋友,也就是常說的死黨,結婚了。我從深圳專程飛回西安參加他的婚禮。雖然比不上開著跑車的富二代,但朋友家庭條件也算不錯,婚禮舉辦得很隆重 花車,寶馬760li 迎親車隊,30輛黑色奧迪a6 當然,朋友自己的蒙迪歐今天就閒在車庫裡了。婚房,高檔社群,精裝修,180平,四房兩廳。...