TQDM не показывает бар
Я использую библиотеку tqdm, и она не дает мне индикатор выполнения, вместо этого она дает мне вывод, который выглядит следующим образом, где он просто сообщает мне итерацию:
251it [01:44, 2.39it/s]
Любая идея, почему код будет делать это? Я думал, что это может быть потому, что я передавал ему генератор, но опять же я использовал генераторы в прошлом, которые работали. Я никогда не сталкивался с форматированием tdqm раньше. Вот часть исходного кода:
train_iter = zip(train_x, train_y) #train_x and train_y are just lists of elements
....
def train(train_iter, model, criterion, optimizer):
model.train()
total_loss = 0
for x, y in tqdm(train_iter):
x = x.transpose(0, 1)
y = y.transpose(0, 1)
optimizer.zero_grad()
bloss = model.forward(x, y, criterion)
bloss.backward()
torch.nn.utils.clip_grad_norm(model.parameters(), args.clip)
optimizer.step()
total_loss += bloss.data[0]
return total_loss
3 ответа
tqdm
Необходимо знать, сколько будет выполнено итераций (общая сумма), чтобы показать индикатор выполнения.
Вы можете попробовать это:
from tqdm import tqdm
train_x = range(100)
train_y = range(200)
train_iter = zip(train_x, train_y)
# Notice `train_iter` can only be iter over once, so i get `total` in this way.
total = min(len(train_x), len(train_y))
with tqdm(total=total) as pbar:
for item in train_iter:
# do something ...
pbar.update(1)
У меня сработало заполнение параметра "total" длиной. Теперь появляется индикатор выполнения.
from tqdm import tqdm
# ...
for imgs, targets in tqdm( train_dataloader, total=len(train_dataloader)):
# ...
Ответ @Dogus - более естественное использование tqdm, но вам нужно убедиться, что ваш загрузчик данных (если это пользовательский итератор) также предоставляет метод len .