{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.10","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"# This Python 3 environment comes with many helpful analytics libraries installed\n# It is defined by the kaggle/python Docker image: https://github.com/kaggle/docker-python\n# For example, here's several helpful packages to load\n\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\n# Input data files are available in the read-only \"../input/\" directory\n# For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory\n\nimport os\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        print(os.path.join(dirname, filename))\n\n# You can write up to 20GB to the current directory (/kaggle/working/) that gets preserved as output when you create a version using \"Save & Run All\" \n# You can also write temporary files to /kaggle/temp/, but they won't be saved outside of the current session\n\nprint(\"\")\nprint(\"Completed\")\nprint(\"\")","metadata":{"execution":{"iopub.status.busy":"2023-07-28T08:30:36.956307Z","iopub.execute_input":"2023-07-28T08:30:36.956922Z","iopub.status.idle":"2023-07-28T08:30:36.988135Z","shell.execute_reply.started":"2023-07-28T08:30:36.956888Z","shell.execute_reply":"2023-07-28T08:30:36.987119Z"},"trusted":true},"execution_count":1,"outputs":[{"name":"stdout","text":"/kaggle/input/dogs-vs-cats-redux-kernels-edition/sample_submission.csv\n/kaggle/input/dogs-vs-cats-redux-kernels-edition/train.zip\n/kaggle/input/dogs-vs-cats-redux-kernels-edition/test.zip\n\nCompleted\n\n","output_type":"stream"}]},{"cell_type":"code","source":"# 解凍&確認に必要なライブラリのインポート\nimport shutil\nimport glob\n\n# Inputデータ内、「train.zip」「test.zip」をOutputデータとして使用ディレクトリで解凍(学習&テスト用)\nshutil.unpack_archive('/kaggle/input/dogs-vs-cats-redux-kernels-edition/train.zip', '/kaggle/working/unpack')\nshutil.unpack_archive('/kaggle/input/dogs-vs-cats-redux-kernels-edition/test.zip', '/kaggle/working/unpack')\n\n# Inputデータ内、「sample_submission.csv」をOutputデータとして使用ディレクトリにコピー(提出用)\nshutil.copyfile('/kaggle/input/dogs-vs-cats-redux-kernels-edition/sample_submission.csv','/kaggle/working/sample_submission.csv')\n     \n# /kaggle/workingフォルダ以下に入っているファイルを確認\nfiles = glob.glob('/kaggle/working/*')\nfor file in files:\n    print(file)\nfiles = glob.glob('/kaggle/working/unpack/*')\nfor file in files:\n    print(file)\n\nprint(\"\")\nprint(\"Completed\")\nprint(\"\")","metadata":{"execution":{"iopub.status.busy":"2023-07-28T08:30:36.989878Z","iopub.execute_input":"2023-07-28T08:30:36.990206Z","iopub.status.idle":"2023-07-28T08:30:53.892543Z","shell.execute_reply.started":"2023-07-28T08:30:36.990178Z","shell.execute_reply":"2023-07-28T08:30:53.891075Z"},"trusted":true},"execution_count":2,"outputs":[{"name":"stdout","text":"/kaggle/working/sample_submission.csv\n/kaggle/working/unpack\n/kaggle/working/unpack/train\n/kaggle/working/unpack/test\n\nCompleted\n\n","output_type":"stream"}]},{"cell_type":"code","source":"# Outputデータ内、「train」「test」ディレクトリ内のデータを確認\nTrain_data_list = glob.glob(os.path.join(\"unpack/train\",'*.jpg'))\nprint(f\"Train_data_num: {len(Train_data_list)}\")\n\nTest_data_list = glob.glob(os.path.join(\"unpack/test\",'*.jpg'))\nprint(f\"Test_Data_num: {len(Test_data_list)}\")\n\nprint(\"\")\nprint(\"Completed\")\nprint(\"\")","metadata":{"execution":{"iopub.status.busy":"2023-07-28T08:30:53.894022Z","iopub.execute_input":"2023-07-28T08:30:53.894516Z","iopub.status.idle":"2023-07-28T08:30:54.026518Z","shell.execute_reply.started":"2023-07-28T08:30:53.89447Z","shell.execute_reply":"2023-07-28T08:30:54.025527Z"},"trusted":true},"execution_count":3,"outputs":[{"name":"stdout","text":"Train_data_num: 25000\nTest_Data_num: 12500\n\nCompleted\n\n","output_type":"stream"}]},{"cell_type":"code","source":"# ディレクトリ構造を描画するためのライブラリをインストール\n!pip install Tree\nprint(\"----------------------\")\n\n# ./datasetディレクトリ以下のパス\ntrain_dir = \"./dataset/trainData\"\nvalid_dir = \"./dataset/validData\"\ntest_dir = \"./dataset/testData\"\n\n# 訓練データ\nos.makedirs(\"%s/dogs\" %train_dir, exist_ok=True)\nos.makedirs(\"%s/cats\" %train_dir, exist_ok=True)\n# 検証データ\nos.makedirs(\"%s/dogs\" %valid_dir, exist_ok=True)\nos.makedirs(\"%s/cats\" %valid_dir, exist_ok=True)\n# テストデータ\nos.makedirs(\"%s\" %test_dir, exist_ok=True)\n\n!tree -d ./\n\nprint(\"\")\nprint(\"Completed\")\nprint(\"\")","metadata":{"execution":{"iopub.status.busy":"2023-07-28T08:30:54.028314Z","iopub.execute_input":"2023-07-28T08:30:54.029151Z","iopub.status.idle":"2023-07-28T08:31:09.831876Z","shell.execute_reply.started":"2023-07-28T08:30:54.029117Z","shell.execute_reply":"2023-07-28T08:31:09.830524Z"},"trusted":true},"execution_count":4,"outputs":[{"name":"stdout","text":"Collecting Tree\n  Downloading Tree-0.2.4.tar.gz (6.5 kB)\n  Preparing metadata (setup.py) ... \u001b[?25ldone\n\u001b[?25hRequirement already satisfied: Pillow in /opt/conda/lib/python3.10/site-packages (from Tree) (9.5.0)\nCollecting svgwrite (from Tree)\n  Downloading svgwrite-1.4.3-py3-none-any.whl (67 kB)\n\u001b[2K     \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m67.1/67.1 kB\u001b[0m \u001b[31m2.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n\u001b[?25hRequirement already satisfied: setuptools in /opt/conda/lib/python3.10/site-packages (from Tree) (59.8.0)\nRequirement already satisfied: click in /opt/conda/lib/python3.10/site-packages (from Tree) (8.1.3)\nBuilding wheels for collected packages: Tree\n  Building wheel for Tree (setup.py) ... \u001b[?25ldone\n\u001b[?25h  Created wheel for Tree: filename=Tree-0.2.4-py3-none-any.whl size=7874 sha256=5909bb3e843cd4d0537112a3ce95e4d404ba1c1ca454dca184cccb2504d2b53b\n  Stored in directory: /root/.cache/pip/wheels/06/1e/8c/73b3a97f37991dc90603631567511071513ee3c6d819393232\nSuccessfully built Tree\nInstalling collected packages: svgwrite, Tree\nSuccessfully installed Tree-0.2.4 svgwrite-1.4.3\n\u001b[33mWARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv\u001b[0m\u001b[33m\n\u001b[0m----------------------\n\u001b[01;34m./\u001b[00m\n├── \u001b[01;34mdataset\u001b[00m\n│   ├── \u001b[01;34mtestData\u001b[00m\n│   ├── \u001b[01;34mtrainData\u001b[00m\n│   │   ├── \u001b[01;34mcats\u001b[00m\n│   │   └── \u001b[01;34mdogs\u001b[00m\n│   └── \u001b[01;34mvalidData\u001b[00m\n│       ├── \u001b[01;34mcats\u001b[00m\n│       └── \u001b[01;34mdogs\u001b[00m\n└── \u001b[01;34munpack\u001b[00m\n    ├── \u001b[01;34mtest\u001b[00m\n    └── \u001b[01;34mtrain\u001b[00m\n\n11 directories\n\nCompleted\n\n","output_type":"stream"}]},{"cell_type":"code","source":"# データ移動元パスを定義\nsource_dir = \"./unpack\"\n\n# 最初の10000枚をtrainDataフォルダに格納\nfor i in range(10000):\n  os.rename(\"%s/train/dog.%d.jpg\" %(source_dir, i+0), \"%s/dogs/dog%04d.jpg\" %(train_dir, i+0))\n  os.rename(\"%s/train/cat.%d.jpg\" %(source_dir, i+0), \"%s/cats/cat%04d.jpg\" %(train_dir, i+0))\n\n# 次の2500枚をvalidDataフォルダに格納\nfor i in range(2500):\n  os.rename(\"%s/train/dog.%d.jpg\" %(source_dir, 10000+i+0), \"%s/dogs/dog%04d.jpg\" %(valid_dir, i+0))\n  os.rename(\"%s/train/cat.%d.jpg\" %(source_dir, 10000+i+0), \"%s/cats/cat%04d.jpg\" %(valid_dir, i+0))\n\n# /unpack/test/*.jpgをtestDataフォルダに格納\nread_dir = './unpack/test/'\nread_files = os.listdir(read_dir)\nfor read_name in read_files:\n    copy_from_path = read_dir + read_name\n    copy_to_path = test_dir + '/' + read_name \n    shutil.copy(copy_from_path, copy_to_path)\n    \nprint(\"\")\nprint(\"Completed\")\nprint(\"\")","metadata":{"execution":{"iopub.status.busy":"2023-07-28T08:31:09.834007Z","iopub.execute_input":"2023-07-28T08:31:09.835174Z","iopub.status.idle":"2023-07-28T08:31:11.823013Z","shell.execute_reply.started":"2023-07-28T08:31:09.835138Z","shell.execute_reply":"2023-07-28T08:31:11.821795Z"},"trusted":true},"execution_count":5,"outputs":[{"name":"stdout","text":"\nCompleted\n\n","output_type":"stream"}]},{"cell_type":"code","source":"# Outputデータ内、「train」「test」ディレクトリ内のデータを確認\nTrain_data_dogs_list = glob.glob(os.path.join(\"dataset/trainData/dogs/\",'*.jpg'))\nTrain_data_cats_list = glob.glob(os.path.join(\"dataset/trainData/cats/\",'*.jpg'))\nprint(f\"trainData_dogs: {len(Train_data_dogs_list)}\")\nprint(f\"trainData_cats: {len(Train_data_cats_list)}\")\n\nValid_data_dogs_list = glob.glob(os.path.join(\"dataset/validData/dogs/\",'*.jpg'))\nValid_data_cats_list = glob.glob(os.path.join(\"dataset/validData/cats/\",'*.jpg'))\nprint(f\"validData_dogs: {len(Valid_data_dogs_list)}\")\nprint(f\"validData_cats: {len(Valid_data_cats_list)}\")\n\nTest_data_list = glob.glob(os.path.join(\"dataset/testData/\",'*.jpg'))\nprint(f\"testData_num: {len(Test_data_list)}\")\n\n!tree -d ./dataset\n\nprint(\"\")\nprint(\"Completed\")\nprint(\"\")","metadata":{"execution":{"iopub.status.busy":"2023-07-28T08:32:37.037894Z","iopub.execute_input":"2023-07-28T08:32:37.038283Z","iopub.status.idle":"2023-07-28T08:32:38.271445Z","shell.execute_reply.started":"2023-07-28T08:32:37.038252Z","shell.execute_reply":"2023-07-28T08:32:38.269915Z"},"trusted":true},"execution_count":7,"outputs":[{"name":"stdout","text":"trainData_dogs: 10000\ntrainData_cats: 10000\nvalidData_dogs: 2500\nvalidData_cats: 2500\ntestData_num: 12500\n\u001b[01;34m./dataset\u001b[00m\n├── \u001b[01;34mtestData\u001b[00m\n├── \u001b[01;34mtrainData\u001b[00m\n│   ├── \u001b[01;34mcats\u001b[00m\n│   └── \u001b[01;34mdogs\u001b[00m\n└── \u001b[01;34mvalidData\u001b[00m\n    ├── \u001b[01;34mcats\u001b[00m\n    └── \u001b[01;34mdogs\u001b[00m\n\n7 directories\n\nCompleted\n\n","output_type":"stream"}]}]}