Warum immer einen invalid syntax?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
MichaelR.
User
Beiträge: 11
Registriert: Samstag 20. Januar 2018, 17:10

Hallo,

ich finde einfach meinen Fehler nicht :K ....

Ich bekomme ständig einen "invalid Syntax" Fehler angezeigt, kann ihn aber in Zeile 12 nicht finden....:

Code: Alles auswählen

File "datenki.py", line 12
    transforms.Normalize((0,1307,), (0,3081,))])), 
             ^
SyntaxError: invalid syntax

Code: Alles auswählen

import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
from torchvision import datasets, transforms
from torch.autograd import Variable

kwargs = {'num_workers': 1, 'pin_memory': True}
train_data = torch.utils.data.DataLoader(
	datasets.MNIST('data', train=True, download=True,
					transform=transforms.Compose([transforms.ToTensor(),
					transforms.Normalize((0.1307, ),(0.3081, ))])), 
	batch_size=64, shuffle=True, **kwargs)
	
test_data= torch.utils.data.DataLoader(
	datasets.MNIST('data', train=False,
					transform=transforms.Compose([transforms.ToTensor(),
					transforms.Normalize((0.1307, ),(0.3081, ))])), 
	batch_size=64, shuffle=True, **kwargs)
	
optimizer = optim.SGD(model.parameters(), lr=0.1, momentrum=0.8)
def train(epoch):
	model.train()
	for batch_id, (data, target) in enumerate(train_data):
		data = Variable(data)
		target = Variable(target)
		optimizer.zero_grad()
		out = model(data)
		criterion = F.nll_loss
		loss = criterion(out, target)
		loss.backward()
		optimizer.step()
		print('Train Epoch: {} [{}/{} ({:.0f}%)]\tLoss: {:.6f}'.format(
			epoch, batch_id * len(data), len(train_data.dataset),
					100. * batch id / len(train_data), loss.data[0]))
			
for epoch on range(1, 30)
	train(epoch)
Sirius3
User
Beiträge: 17710
Registriert: Sonntag 21. Oktober 2012, 17:20

@MichaelR.: in Zeile 42 und 44 sind Syntaxfehler. Ansonsten hilft es immer, in der Zeile davor zu suchen.
Astorek
User
Beiträge: 72
Registriert: Samstag 24. Januar 2009, 15:06
Kontaktdaten:

Als allgemeiner Tipp würd ich auch versuchen, bei einer neuen Klammer stets eine neue Einrückung zu machen. Nicht, weil der Quelltext dadurch besser aussähe (was gelegentlich aber auch ein Grund sein kann), aber man sieht dann gleich, wo man eine Klammer vergessen hat.

Bei sowas im Code...

Code: Alles auswählen

))]))
...würde ich schnell wahnsinnig werden^^.


Als Beispiel, was ich meine:

Code: Alles auswählen

datasets.MNIST(
    'data',
    train=True,
    download=True,
    transform=transforms.Compose(
    [
        transforms.ToTensor(),
        transforms.Normalize(
            (0.1307, ),
            (0.3081, )
[...und so weiter...]
(Natürlich kann man das quelltextmäßig schöner und "pythonischer" schreiben, aber es ist eine gute Methode, zu sehen, wo man evtl. eine Klammer vergessen oder zuviele gesetzt hat. Danach ändern kann man den Quelltext natürlich immernoch)

Anmerkung: Ideal wärs natürlich, wenn so ein Klammerwirrwarr garnicht erst geschrieben wird. Bei bis zu 5(!) schließenden Klammern am Ende ist es ja kein Wunder, dass da irgendwo der Hase im Pfeffer steckt...
Antworten