{"cells":[{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"import numpy as np\nimport pandas as pd\nimport matplotlib.pyplot as plt\nfrom PIL import Image\nfrom pathlib import Path","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"dc507ba2f8052150a372dd016438f85afe69358a"},"cell_type":"code","source":"from torch.utils.data import Dataset, DataLoader\nfrom torchvision import transforms","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"df34498e421ffc026a1cdd75023483ee34c29c59"},"cell_type":"markdown","source":"对标签类别进行编号"},{"metadata":{"trusted":true,"_uuid":"3195296816b39070a0dd903f068e2b0a078ef558"},"cell_type":"code","source":"df_submission = pd.read_csv( '../input/sample_submission.csv' )\nprint( df_submission.shape )","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"c8817969a20a9bd7255855fb2eacd8183c33c7a5"},"cell_type":"code","source":"df_submission.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"6c6a22c9625115fc362478d7678613489abb996a"},"cell_type":"code","source":"CATEGORY_NAMES = df_submission.columns.values[1:].tolist()\n\nCATEGORY_NAME_TO_ID = {}\nfor i, name in enumerate( CATEGORY_NAMES ):\n    CATEGORY_NAME_TO_ID[name] = i\n\nprint( len( CATEGORY_NAME_TO_ID ) )","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"d303124b369d733500903f77f650b635b477b9c9"},"cell_type":"code","source":"df_labels = pd.read_csv( '../input/labels.csv' )\ndf_labels['breed_id'] = df_labels['breed'].map( CATEGORY_NAME_TO_ID )\ndf_labels.head()","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"f62375a4d34a72306e9bce46be455d45697b6e8f"},"cell_type":"markdown","source":"开始定义Dataset"},{"metadata":{"trusted":true,"_uuid":"31b5e6105510b0929dddc9c5afd3ac62ca62f322"},"cell_type":"code","source":"class MyDataset(Dataset):\n\n    def __init__(self, df):\n        \n        dataset_str = 'train' if df.shape[1] == 2 else 'test'\n        \n        self.image_dir = Path( '../input' ) / dataset_str\n        self.df = df\n        \n        # 对训练集做数据增强\n        if dataset_str == 'train':\n            self.preprocess = transforms.Compose( [\n                transforms.RandomRotation(5),\n                transforms.Resize(256),     # 缩小图像，使得短边为256\n                transforms.RandomCrop(224), # 随机裁剪224×224\n                #transforms.RandomHorizontalFlip()\n            ] )\n        else:\n            self.preprocess = transforms.Compose( [\n                transforms.Resize(256),     # 缩小图像，使得短边为256\n                transforms.CenterCrop(224), # 中心裁剪224×224\n            ] )\n        \n        self.preprocess.transforms.append( transforms.ToTensor() )\n#         self.preprocess.transforms.append( transforms.Normalize( mean=[0.485, 0.456, 0.406],\n#                                                                  std=[0.229, 0.224, 0.225] ) )\n\n\n    def __getitem__(self, index):\n\n        image_name = self.df.loc[index, 'id'] + '.jpg'\n        image_path = self.image_dir / image_name\n\n        X = Image.open( image_path )\n        X_p = self.preprocess(X)\n\n        simple_ToTensor = transforms.ToTensor()\n        X = simple_ToTensor(X)\n        y = self.df.loc[index, 'breed_id']\n\n        return X, X_p, y\n\n\n    def __len__(self):\n        return len( self.df )","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"f7f1657a6badbe158042ac344bb190dd14bfad36"},"cell_type":"code","source":"df_train = df_labels[['id', 'breed_id']]\ndf_test = df_submission[['id']]\nprint( df_train.shape )\nprint( df_test.shape )","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"9fc659d5e2299e4fdc05cca0e914134568b4ba5a"},"cell_type":"code","source":"df_temp = df_train.sample(1).copy().reset_index(drop=True)\ntrain_set = MyDataset( df_temp )\ntrain_loader = DataLoader( train_set, batch_size=1, shuffle=False )","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"445385cd2d78732550c911bd42f78866b1dce757"},"cell_type":"code","source":"image_list = []\n\nfor i in range(9):\n    for batch_i, data in enumerate( train_loader ):\n        batch_X, batch_Xp, batch_y = data\n        \n        # PyTorch使用transforms.ToTensor后，size为[N, C, H, W]\n        batch_X = np.transpose( batch_X.squeeze().numpy(), [1, 2, 0] )\n        batch_Xp = np.transpose( batch_Xp.squeeze().numpy(), [1, 2, 0] )\n        \n        image_list.append( batch_Xp )\n        break","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"85a39007196399302d0046d8b25c04d4be24d457"},"cell_type":"code","source":"print( batch_X.shape )\nplt.imshow( batch_X )","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"5daf707714f80ec27716869b4d447d749ed33e57"},"cell_type":"code","source":"fig, axes = plt.subplots( 3, 3, figsize=(9, 9) )\n\nfor i, ax in enumerate(axes.flat):\n    ax.imshow( image_list[i] )\n    ax.get_xaxis().set_visible(False)\n    ax.get_yaxis().set_visible(False)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"9f775cd1324dec875f39924686e102fde0db6cb8"},"cell_type":"code","source":"","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"name":"python","version":"3.6.6","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"}},"nbformat":4,"nbformat_minor":1}