Reputation: 113
I've manually spaced out the whole thing. Still, it will not work. Indentation error directly after the first line.
The code:
def train_epoch(model, data_loader, loss_fn, optimizer, device, scheduler, n_examples):
""" docstring? """
losses = []
for d in data_loader:
input_ids = d['input_ids'].to(device)
targets = d['targets'].to(device)
outputs = model(input_ids = input_ids, labels = targets)
loss = loss_fn(outputs, targets)
losses.append( loss.item() )
loss.backward()
optimizer.step()
scheduler.step()
optimizer.zero_grad()
return np.mean(losses)
The error:
def train_epoch(model, data_loader, loss_fn, optimizer, device, scheduler, n_examples): ...
File "", line 2 ^ IndentationError: expected an indented block
What is going on? I don't see a problem anywhere.
Upvotes: -1
Views: 80
Reputation:
for loop must be indented to the right to make it function's code to run or inside the function, else it will not be considered as function code. Also losses list must be inside for loop not before it nor at the same for loop level for this case.
def train_epoch(model, data_loader, loss_fn, optimizer, device, scheduler, n_examples):
for d in data_loader:
losses = []
input_ids = d['input_ids'].to(device)
targets = d['targets'].to(device)
outputs = model(input_ids = input_ids, labels = targets)
loss = loss_fn(outputs, targets)
losses.append( loss.item() )
loss.backward()
optimizer.step()
scheduler.step()
optimizer.zero_grad()
return np.mean(losses)
Upvotes: -1
Reputation: 59
It's because of the first line. The function's body has to be indented.
def train_epoch(model, data_loader, loss_fn, optimizer, device, scheduler, n_examples):
""" docstring? """
losses = []
for d in data_loader:
input_ids = d['input_ids'].to(device)
targets = d['targets'].to(device)
outputs = model(input_ids = input_ids, labels = targets)
loss = loss_fn(outputs, targets)
losses.append( loss.item() )
loss.backward()
optimizer.step()
scheduler.step()
optimizer.zero_grad()
return np.mean(losses)
Upvotes: -1
Reputation: 186
def train_epoch(model, data_loader, loss_fn, optimizer, device, scheduler, n_examples):
"""
docstring?
"""
losses = []
for d in data_loader:
input_ids = d['input_ids'].to(device)
targets = d['targets'].to(device)
outputs = model(input_ids = input_ids, labels = targets)
loss = loss_fn(outputs, targets)
losses.append( loss.item() )
loss.backward()
optimizer.step()
scheduler.step()
optimizer.zero_grad()
return np.mean(losses)
Please format it like this. Your code is not under the indentation block for your train_epoch()
method.
Upvotes: 0