Seite 1 von 1

No module named 'torchvision'

Verfasst: Mittwoch 28. März 2018, 19:46
von MichaelR.
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'

Re: No module named 'torchvision'

Verfasst: Mittwoch 28. März 2018, 21:18
von snafu
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.

Re: No module named 'torchvision'

Verfasst: Freitag 30. März 2018, 20:43
von MichaelR.
Super, hat mit "python3.6 -m pip Install torchvision" funktioniert. Vielen Dank :-)

Schöne Ostern und viele Grüße

Michael

Re: No module named 'torchvision'

Verfasst: Freitag 30. März 2018, 21:34
von snafu
Wobei unter Linux eigentlich der Weg über die Paketverwaltung besser ist. Oft gibt es spezielle Python 3 Pakete namens python3-torchvision oder so ähnlich.