哪些網(wǎng)站可以做調(diào)查問(wèn)卷合肥seo招聘
TensorBoard
- 模塊導(dǎo)入
- 日志記錄文件的創(chuàng)建
- 訓(xùn)練中如何寫(xiě)入數(shù)據(jù)
- 如何提取保存的數(shù)據(jù)調(diào)用TensorBoard面板
- 可能會(huì)遇到的問(wèn)題
模塊導(dǎo)入
首先從torch中導(dǎo)入tensorboard的SummaryWriter日志記錄模塊
from torch.utils.tensorboard import SummaryWriter
然后導(dǎo)入要用到的os庫(kù),當(dāng)然你們也要導(dǎo)入自己模型訓(xùn)練需要用到的庫(kù)
import os
日志記錄文件的創(chuàng)建
import oslog_dir = 'runs/EfficientNet_B3_experiment2'# 檢查目錄是否存在
if os.path.exists(log_dir):# 如果目錄存在,獲取目錄下的所有文件和子目錄列表files = os.listdir(log_dir)# 遍歷目錄下的文件和子目錄for file in files:# 拼接文件的完整路徑file_path = os.path.join(log_dir, file)# 判斷是否為文件if os.path.isfile(file_path):# 如果是文件,刪除該文件os.remove(file_path)elif os.path.isdir(file_path):# 如果是目錄,遞歸地刪除目錄及其下的所有文件和子目錄for root, dirs, files in os.walk(file_path, topdown=False):for name in files:os.remove(os.path.join(root, name))for name in dirs:os.rmdir(os.path.join(root, name))os.rmdir(file_path)# 創(chuàng)建新的SummaryWriter
writer = SummaryWriter(log_dir)
這個(gè)代碼會(huì)自動(dòng)創(chuàng)建并更新日志文件目錄,請(qǐng)謹(jǐn)慎使用,記得改
log_dir = 'runs/EfficientNet_B3_experiment2'
路徑名字小心把之前保存好的數(shù)據(jù)刪除了
之后模型訓(xùn)練的數(shù)據(jù)將會(huì)寫(xiě)入到log_dir這個(gè)路徑文件中,在由TensorBoard張量板調(diào)用顯示數(shù)據(jù)
訓(xùn)練中如何寫(xiě)入數(shù)據(jù)
for epoch in range(num_epochs):model.train()running_loss = 0.0correct = 0total = 0start_time = time.time()for images, labels in train_loader:images, labels = images.to(device), labels.to(device)optimizer.zero_grad()outputs = model(images)loss = criterion(outputs, labels)loss.backward()optimizer.step()# 記錄學(xué)習(xí)率current_lr = optimizer.param_groups[0]['lr']writer.add_scalar('Learning Rate', current_lr, epoch)# 記錄梯度范數(shù)total_norm = 0for p in model.parameters():param_norm = p.grad.data.norm(2)total_norm += param_norm.item() ** 2total_norm = total_norm ** 0.5writer.add_scalar('Gradient Norm', total_norm, epoch)running_loss += loss.item()_, predicted = torch.max(outputs.data, 1)total += labels.size(0)correct += (predicted == labels).sum().item()train_loss = running_loss / len(train_loader)train_accuracy = 100 * correct / total# 記錄訓(xùn)練損失和準(zhǔn)確率writer.add_scalar('Training Loss', train_loss, epoch)writer.add_scalar('Training Accuracy', train_accuracy, epoch)# 記錄模型參數(shù)的直方圖for name, param in model.named_parameters():writer.add_histogram(name, param, epoch)# 記錄網(wǎng)絡(luò)結(jié)構(gòu)(通常只需要記錄一次)if epoch == 0:writer.add_graph(model, images.to(device))# 記錄輸入圖片img_grid = torchvision.utils.make_grid(images)writer.add_image('train_images', img_grid, epoch)# 使用matplotlib記錄渲染的圖片fig, ax = plt.subplots()ax.plot(np.arange(len(labels)), labels.cpu().numpy(), 'b', label='True')ax.plot(np.arange(len(predicted)), predicted.cpu().numpy(), 'r', label='Predicted')ax.legend()writer.add_figure('predictions vs. actuals', fig, epoch)# 驗(yàn)證模型model.eval()val_loss = 0.0correct = 0total = 0all_preds = []all_labels = []with torch.no_grad():for images, labels in test_loader:images, labels = images.to(device), labels.to(device)outputs = model(images)loss = criterion(outputs, labels)val_loss += loss.item()_, predicted = torch.max(outputs.data, 1)all_preds.extend(predicted.cpu().numpy())all_labels.extend(labels.cpu().numpy())total += labels.size(0)correct += (predicted == labels).sum().item()val_loss /= len(test_loader)val_accuracy = 100 * correct / totalif val_accuracy > best_val_accuracy:# 當(dāng)新的最佳驗(yàn)證準(zhǔn)確率出現(xiàn)時(shí),保存模型狀態(tài)字典best_val_accuracy = val_accuracybest_model_state_dict = model.state_dict()# 記錄驗(yàn)證損失和準(zhǔn)確率writer.add_scalar('Validation Loss', val_loss, epoch)writer.add_scalar('Validation Accuracy', val_accuracy, epoch)# 記錄多條曲線(xiàn)writer.add_scalars('Loss', {'train': train_loss, 'val': val_loss}, epoch)writer.add_scalars('Accuracy', {'train': train_accuracy, 'val': val_accuracy}, epoch)# 打印每個(gè)epoch的訓(xùn)練和驗(yàn)證結(jié)果print(f'Epoch [{epoch+1}/{num_epochs}], 'f'Train Loss: {train_loss:.4f}, Train Accuracy: {train_accuracy:.2f}%, 'f'Validation Loss: {val_loss:.4f}, Validation Accuracy: {val_accuracy:.2f}%, 'f'Time: {time.time() - start_time:.2f}s')
以上代碼分別記錄了
如何提取保存的數(shù)據(jù)調(diào)用TensorBoard面板
在終端輸入以下代碼
tensorboard --logdir='修改為自己的log_dir路徑'
然后點(diǎn)擊 http://localhost:6006/就可以成功加載面板了
可能會(huì)遇到的問(wèn)題
如果數(shù)據(jù)讀取失敗那么請(qǐng)檢查數(shù)據(jù)路徑是否正確
注意數(shù)據(jù)文件中不能有任何中文