No module named 'torchvision'

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

Nabend allerseits,

Python zeigt mir leider ständig "No module named 'torchvision'" an. Ich habe torchvision aber ganz sicher installiert (mit pip....), von daher muss der Fehler woanders liegen. Fragt sich nur wo.... Hat jemand eine Idee?

Hier der Code inklusive Fehlermeldung:

Code: Alles auswählen

import torch
import torchvision
from torchvision import transforms
from PIL import Image
from os import listdir
import random
import torch.optim as optim
from torch.autograd import Variable
import torch.nn.functional
import torch.nn as nn

transforms.Normalize(mean = [ 0.485, 0.456, 0.406 ],
                          std = [ 0.229, 0.224, 0.225 ]),
                          
transform = transforms.Compose([transforms.Resize(256), transforms.CenterCrop(256), transforms.ToTensor(256),
	normalize])

#Target [isCat, isDog]
traning_data_list = []
target_list = []
train_data = []
files = listdir('iCloudDrive/Dokumente/Python/CatDogTrain/train')
for i in range(len(listdir('iCloudDrive/Dokumente/Python/CatDogTrain/train'))):
	f = random.choice(files)
	files.remove(f)
	img = Image.open("iCloudDrive/Dokumente/Python/CatDogTrain/train" + f)
	img_tensor = transform(img)
	train_data_list.append(img_tensor)
	isCat = 1 if 'cat' in f else 0
	isDog = 1 if 'dog' in f else 0
	target = [isCat, isDog]
	target_list.append(target)
	if len(train_data_list) >= 64:
		train_data.append((torch.stack(train_data_list), target_list))
		train_data_list = []

class Netz(nn.Module):
	def __init__(self):
		super(Netz, self).__init__()
		self.conv1 = nn.Conv2d(3, 6, kernel_size=5)
		self.conv2 = nn.Conv2d(6, 12, kernel_size=5)
		self.conv3 = nn.Conv2d(12, 18, kernel_size=5)
		self.conv4 = nn.Conv2d(18, 24, kernel_size=5)
		self.fc1 = nn.Linear(3456, 1000)
		self.fc2 = nn.Linear(1000, 2)
		
	def forward(self, x):
		x = self.conv1(x)
		x = F.max_pool2d(x,2)
		x = F.relu(x)
		x = self.conv2(x)
		x = F.max_pool2d(x,2)
		x = F.relu(x)
		x = self.conv3(x)
		x = F.max_pool2d(x,2)
		x = F.relu(x)
		x = x.view(-1, 14112)
		x = F.relu(self.fc1(x))
		x = self.fc2(x)
		return F.sigmoid(x)
		
model = Netz()


optimizer = optim.Adam(model.parameters(), lr=0.01)
def train(epoch):
	model.train()
	batch_id = 0
	for data, target in train_data:
		target = torch.Tensor(target)
		data = Variable(data)
		target = Variable(target)
		optimizer.zero_grad()
		out = model(data)
		criterion = F.binary_cross_entropy
		loss = criterion(out, target)
		loss.backward()
		optimizer.step()
		print('Train Epoch: {} [{}/{} ({:.0f}%)]\tLoss: {:.6f}'.format(
			epoch, batch_id * len(data), len(train_data),
					100. * batch_id / len(train_data), loss.data[0]))
		batch_id = batch_id + 1
		
def test():
	model.eval()
	files = listdir('catdog/test/')
	f = random.choice(files)
	img = Image.open('catdog/test/' + f)
	img_eval_tensor = transforms(img)
	img_eval_tensor.unsqueeze_(0)
	data = Variable()
	out = model(data)
	print(out.data.max(1, keepdim=true)[1])
	img.show()
	x = input('')
		
for epoch in range(1,30):
	train(epoch)
test()

Code: Alles auswählen

Traceback (most recent call last):
  File "testnr4.py", line 2, in <module>
    import torchvision
ModuleNotFoundError: No module named 'torchvision'
Benutzeravatar
snafu
User
Beiträge: 6731
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Hast du mehrere Python-Versionen auf deinem System installiert? Falls ja, dann gib mal pip --version ein und schau ob die angezeigte Python-Version mit der von dir beim Import verwendeten Version übereinstimmt. Denkbar wäre z.B. dass pip für Python 2.7 installiert hat, du aber in Python 3 das Modul importieren willst. Das funktioniert dann nicht.

Falls dem so sein sollte, dann ist die Lösung:
[codebox=bash file=Unbenannt.bsh]# Linux / unixoide Systeme
pythonX.Y -m pip install torchvision

# Windows-Kommandozeile
py -X.Y -m pip install torchvision[/code]
Wobei X.Y für die Python Version steht, also z.B. für python3.6 bzw py -3.6.
MichaelR.
User
Beiträge: 11
Registriert: Samstag 20. Januar 2018, 17:10

Super, hat mit "python3.6 -m pip Install torchvision" funktioniert. Vielen Dank :-)

Schöne Ostern und viele Grüße

Michael
Benutzeravatar
snafu
User
Beiträge: 6731
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Wobei unter Linux eigentlich der Weg über die Paketverwaltung besser ist. Oft gibt es spezielle Python 3 Pakete namens python3-torchvision oder so ähnlich.
Antworten