{"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":"\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\nimport os\nfrom keras import layers\nfrom keras import models\nfrom keras import optimizers\nimport tensorflow as tf\nimport tensorflow.keras.layers as layers\nimport cv2\n'''\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        print(os.path.join(dirname, filename))\n'''\n\n\n","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# 学習モデルの定義","metadata":{}},{"cell_type":"code","source":"model = models.Sequential()\nmodel.add(layers.Conv2D(32,(3,3),activation=\"relu\",input_shape=(150,150,3)))\nmodel.add(layers.MaxPooling2D((2,2)))\n \nmodel.add(layers.Conv2D(64,(3,3),activation=\"relu\"))\nmodel.add(layers.MaxPooling2D((2,2)))\n \nmodel.add(layers.Conv2D(128,(3,3),activation=\"relu\"))\nmodel.add(layers.MaxPooling2D((2,2)))\n \nmodel.add(layers.Conv2D(128,(3,3),activation=\"relu\"))\nmodel.add(layers.MaxPooling2D((2,2)))\n \nmodel.add(layers.Flatten())\n \nmodel.add(layers.Dense(512,activation=\"relu\"))\nmodel.add(layers.Dense(1,activation=\"sigmoid\"))\n\nmodel.compile(loss=\"binary_crossentropy\",\n             optimizer=optimizers.RMSprop(lr=1e-4),\n             metrics=[\"acc\"])\n \nmodel.summary()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# 訓練データの前処理","metadata":{}},{"cell_type":"code","source":"from keras.preprocessing.image import ImageDataGenerator\n#データの正規化 \ntrain_datagen = ImageDataGenerator(rescale=1./255)\nvalidation_datagen = ImageDataGenerator(rescale=1./255)\n#訓練データ\ntrain_dir = ('../input/use-data/data/train') \n#教師データ\nvalidation_dir = ('../input/use-data/data/vali') \n\ntrain_generator = train_datagen.flow_from_directory(\n    train_dir,\n    target_size=(150,150),\n    batch_size=32,\n    class_mode=\"binary\"\n)\n \nvalidation_generator = validation_datagen.flow_from_directory(\n    validation_dir,\n    target_size=(150,150),\n    batch_size=32,\n    class_mode=\"binary\"\n)","metadata":{"execution":{"iopub.status.busy":"2021-07-30T07:56:56.880687Z","iopub.execute_input":"2021-07-30T07:56:56.88105Z","iopub.status.idle":"2021-07-30T07:56:57.64383Z","shell.execute_reply.started":"2021-07-30T07:56:56.881021Z","shell.execute_reply":"2021-07-30T07:56:57.642634Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# 学習と学習モデルの保存","metadata":{}},{"cell_type":"code","source":"#学習開始\nhistory = model.fit_generator(train_generator,\n                             steps_per_epoch=6000/32,\n                             epochs=30,\n                             validation_data=validation_generator,\n                             validation_steps=1250/32)\n#学習モデルの保存\nmodel.save('../working/dog_cat.h5')\n","metadata":{"execution":{"iopub.status.busy":"2021-07-28T08:40:41.764263Z","iopub.execute_input":"2021-07-28T08:40:41.764689Z","iopub.status.idle":"2021-07-28T08:40:47.409149Z","shell.execute_reply.started":"2021-07-28T08:40:41.764637Z","shell.execute_reply":"2021-07-28T08:40:47.407568Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# モデルでの予測","metadata":{}},{"cell_type":"code","source":"from keras.preprocessing import image\nimport re\nimport csv\nimport glob","metadata":{"execution":{"iopub.status.busy":"2021-07-28T08:37:00.916318Z","iopub.execute_input":"2021-07-28T08:37:00.916974Z","iopub.status.idle":"2021-07-28T08:37:00.922343Z","shell.execute_reply.started":"2021-07-28T08:37:00.916905Z","shell.execute_reply":"2021-07-28T08:37:00.921202Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"p = re.compile(r'\\d+')\nimcount = 1\ntest_list = glob.glob('../input/use-data/data/test/*.jpg')\ntest_list = sorted(test_list,key=lambda s: int(p.search(s).group()))\n\n#モデルの読み込み\nmodel = models.load_model('../working/dog_cat.h5')\n\n#csv書き込み\nwith open('../working/submission.csv', 'w') as f:\n  writer= csv.writer(f, lineterminator='\\n')\n  writer.writerow(['id', 'label'])\n  for i in test_list:\n    img = image.load_img(i, target_size=(150, 150))\n    x = image.img_to_array(img)\n    x = np.expand_dims(x, axis=0)\n    x = x / 255.0\n    result_predict = model.predict(x)\n    writer.writerow([imcount, result_predict[0][0]])\n    imcount += 1\n\n\n","metadata":{"execution":{"iopub.status.busy":"2021-07-28T08:37:21.728703Z","iopub.execute_input":"2021-07-28T08:37:21.729163Z","iopub.status.idle":"2021-07-28T08:37:21.811766Z","shell.execute_reply.started":"2021-07-28T08:37:21.729122Z","shell.execute_reply":"2021-07-28T08:37:21.810538Z"},"trusted":true},"execution_count":null,"outputs":[]}]}