{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"# import library\n\nimport torch\nimport torchvision\nfrom torchvision import transforms\nfrom torchvision.transforms.transforms import CenterCrop\nimport torch.optim as optim\nfrom torch.autograd import Variable\nimport torch.nn.functional as F\nimport torch.nn as nn\n\nfrom PIL import Image\n\nimport pathlib\n\nfrom os import listdir\nfrom os.path import isfile\n\nimport random","metadata":{"execution":{"iopub.status.busy":"2022-08-23T19:29:54.896776Z","iopub.execute_input":"2022-08-23T19:29:54.897182Z","iopub.status.idle":"2022-08-23T19:29:54.904102Z","shell.execute_reply.started":"2022-08-23T19:29:54.897151Z","shell.execute_reply":"2022-08-23T19:29:54.902882Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from zipfile import ZipFile\nwith ZipFile('../input/dogs-vs-cats/test1.zip', 'r') as zipObj:\n    # Extract all the contents of zip file in current directory\n    zipObj.extractall()\n    \nwith ZipFile('../input/dogs-vs-cats/train.zip', 'r') as zipObj1:\n    # Extract all the contents of zip file in current directory\n    zipObj1.extractall()","metadata":{"execution":{"iopub.status.busy":"2022-08-23T19:33:52.649833Z","iopub.execute_input":"2022-08-23T19:33:52.650288Z","iopub.status.idle":"2022-08-23T19:34:13.452067Z","shell.execute_reply.started":"2022-08-23T19:33:52.650249Z","shell.execute_reply":"2022-08-23T19:34:13.450344Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"normalize = transforms.Normalize(\n    mean=[0.485, 0.456, 0.406],\n    std=[0.229, 0.224, 0.225]\n)\n\ntransform = transforms.Compose([\n    # Bilder auf\n    transforms.Resize(128), \n    transforms.CenterCrop(256),\n    transforms.ToTensor(),\n    normalize\n])","metadata":{"execution":{"iopub.status.busy":"2022-08-23T19:30:12.105587Z","iopub.execute_input":"2022-08-23T19:30:12.105969Z","iopub.status.idle":"2022-08-23T19:30:12.11243Z","shell.execute_reply.started":"2022-08-23T19:30:12.105938Z","shell.execute_reply":"2022-08-23T19:30:12.111566Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#TARGET: [isCat, isDog]\n# durch den ganzen Ordner laufen\ntrain_data_list = []\ntarget_list = []  # für den batch zugehörigen label\ntrain_data = []\nbatch_size = 32\nwaited = False\n\n\nfiles = listdir('./train')\n\nfor i in range(len(listdir('./train/'))):\n    if len(train_data) == 58 and not waited:\n        waited = True\n        continue\n     # soll die Reihenfolge nicht kennen\n    f = random.choice(files)\n    files.remove(f)\n\n    img = Image.open(\"./train/\" + f)\n    img_tensor = transform(img)  #(3,256,256)\n    train_data_list.append(img_tensor)\n    isCat = 1 if 'cat' in f else 0\n    isDog = 1 if 'dog' in f else 0\n    target = [isCat, isDog]\n\n    target_list.append(target)\n\n    if len(train_data_list) >= batch_size:\n        train_data.append((torch.stack(train_data_list), target_list))\n        train_data_list = []\n        target_list = [] \n        \n        print('Loaded batch ', len(train_data), 'of ', int(len(listdir('./train/'))/batch_size))\n        print('Percentage Done: ', 100*len(train_data)/int(len(listdir('./train/'))/batch_size), '%')\n        \n        # zum Testen, damit das laden nicht so lange dauert --> 5 statt 450 oder 781\n        if len(train_data) > 550:\n            break","metadata":{"execution":{"iopub.status.busy":"2022-08-23T19:30:15.649501Z","iopub.execute_input":"2022-08-23T19:30:15.64988Z","iopub.status.idle":"2022-08-23T19:30:15.675561Z","shell.execute_reply.started":"2022-08-23T19:30:15.649849Z","shell.execute_reply":"2022-08-23T19:30:15.673822Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"class Netz(nn.Module):\n\n  def __init__(self):\n    super(Netz, self).__init__()  \n    # 3 input channel wegen rgb\n    self.conv1 = nn.Conv2d(3, 6, kernel_size=5)\n    self.conv2 = nn.Conv2d(6,12,kernel_size=5)\n    self.conv3 = nn.Conv2d(12,18,kernel_size=5)\n    \n    self.fc1 = nn.Linear(14112, 1000)\n    self.fc2 = nn.Linear(1000, 2)\n\n  def forward(self, x):\n    x = self.conv1(x) \n    x = F.max_pool2d(x, 2) \n    x = F.relu(x)\n\n    # zweite Schicht\n    x = self.conv2(x)\n    x = F.max_pool2d(x, 2)\n    x = F.relu(x)\n \n    # dritte Schicht\n    x = self.conv3(x)\n    x = F.max_pool2d(x, 2)\n    x = F.relu(x)\n\n    print(x.shape)\n    print(x.size)\n    \n    x = x.view(-1,14112)\n    x = F.relu(self.fc1(x))\n    x = self.fc2(x)\n\n    return F.sigmoid(x)   # , dim=1\n    ","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model = Netz()\n# model.cuda()\n\n# if isfile('/content/drive/MyDrive/PyTorch YT/13 - Ordner/CatVSDog.pt'):\n  # model = torch.load('/content/drive/MyDrive/PyTorch YT/13 - Ordner/CatVSDog.pt')\n\noptimizer = optim.Adam(model.parameters(), lr=0.1)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def train(epoch):\n  \n  model.train()\n  batch_id = 0\n  for data, target in train_data:\n\n    data = data.cuda()\n    target = torch.Tensor(target).cuda()\n    data = Variable(data)\n    target = Variable(target)\n\n    optimizer.zero_grad()\n    out = model(data)\n    criterion = F.binary_cross_entropy\n    loss = criterion(out, target)\n    loss.backward()\n    optimizer.step()\n\n\n    \n    print('Train Epoch: {} [{}/{} ({:.0f}%)]\\tLoss:{:.6f}'.format(\n        epoch, batch_id, len(train_data), \n        100. * batch_id / len(train_data), loss.item()))\n    \n    batch_id += 1\n\n# torch.save(model, '/content/drive/MyDrive/PyTorch YT/13 - Ordner/CatVSDog.pt')","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def test():\n    model.eval()\n    files = listdir('/content/drive/MyDrive/PyTorch YT/13 - Ordner/dogs-vs-cats-redux-kernels-edition/test/test')\n    f = random.choice(files)\n    img = Image.open('/content/drive/MyDrive/PyTorch YT/13 - Ordner/dogs-vs-cats-redux-kernels-edition/test/test' + f)\n    img_eval_tensor = transform(img)\n    img_eval_tensor.unsqueeze_(0)\n    data = Variable(img_eval_tensor.cuda())\n    out = model(data)\n    print(out.data.max(1, keepdim=True)[1])\n    img.show()\n    x = input('')","metadata":{"execution":{"iopub.status.busy":"2022-08-23T19:14:48.549636Z","iopub.execute_input":"2022-08-23T19:14:48.550124Z","iopub.status.idle":"2022-08-23T19:14:48.583318Z","shell.execute_reply.started":"2022-08-23T19:14:48.550003Z","shell.execute_reply":"2022-08-23T19:14:48.582184Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\nfor epoch in range(1,30):\n  print()\n  print(\"Epoch: \", epoch, \"/ 30\")\n  train(epoch)\n\ntest()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}