{"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":"markdown","source":"# 目次\n* [学習データとテストデータのダウンロード](#download)\n * [ダウンロードデータの確認](#show_img)\n* [データ分析](#analyze)\n * [画像サイズの分布](#img_size)\n * [学習データを事前学習済みモデルによるベクトル化](#vector)\n* [分類学習の 学習データ と 検証データ と テストデータ の生成](#split)\n * [データ拡張](#aug)\n* [分類学習](#train)\n * [モデル構築](#build)\n   * [事前学習済みモデル](#trained)\n   * [CNNモデル](#cnn)\n* [submit データの作成](#submit)","metadata":{}},{"cell_type":"markdown","source":"<a id=\"download\"></a>\n# 学習データとテストデータのダウンロード\n「ogs-vs-cats-redux-kernels-edition」を Input に設置して，train.zip と test.zip を解凍．  \nOutput に解凍結果を train と test　のディレクトリに保存","metadata":{}},{"cell_type":"code","source":"import zipfile\nimport glob\nimport os\nimport numpy as np\nimport matplotlib.pyplot as plt\n\nfrom PIL import Image\n\ntrain_dir = 'train'\nwith zipfile.ZipFile('/kaggle/input/dogs-vs-cats-redux-kernels-edition/train.zip', 'r') as train_zip:\n    train_zip.extractall('')\n\ntrain_list = glob.glob(os.path.join(train_dir,'*.jpg'))\nprint(f\"Train Data: {len(train_list)}\")\n\nbase_dir = '/kaggle/working'\ntrain_dir = os.path.join(base_dir, 'train')\n\ntest_dir = 'test'\nwith zipfile.ZipFile('/kaggle/input/dogs-vs-cats-redux-kernels-edition/test.zip', 'r') as test_zip:\n    test_zip.extractall('')\n\ntest_list = glob.glob(os.path.join(test_dir,'*.jpg'))\nprint(f\"Test Data: {len(test_list)}\")\n\nbase_dir = '/kaggle/working'\ntest_dir = os.path.join(base_dir, 'test')","metadata":{"execution":{"iopub.status.busy":"2023-07-12T06:20:46.96361Z","iopub.execute_input":"2023-07-12T06:20:46.963995Z","iopub.status.idle":"2023-07-12T06:21:03.555668Z","shell.execute_reply.started":"2023-07-12T06:20:46.963961Z","shell.execute_reply":"2023-07-12T06:21:03.55455Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<a id='show_img'></a>\n## ダウンロードデータの確認\n学習データとテストデータの中身を1つ確認","metadata":{}},{"cell_type":"code","source":"print(f'学習データ数：{len(train_list)}', f'先頭のデータ：{train_list[0]}')\nprint(f'テストデータ数：{len(test_list)}', f'先頭のデータ：{test_list[0]}')","metadata":{"execution":{"iopub.status.busy":"2023-07-12T06:21:03.557776Z","iopub.execute_input":"2023-07-12T06:21:03.558154Z","iopub.status.idle":"2023-07-12T06:21:03.563527Z","shell.execute_reply.started":"2023-07-12T06:21:03.558118Z","shell.execute_reply":"2023-07-12T06:21:03.562565Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"学習データの中身をランダムに9つを表示","metadata":{}},{"cell_type":"code","source":"'''\nlabels = [path.split('/')[-1].split('.')[0] for path in train_list]\n\nrandom_idx = np.random.randint(1, len(train_list), size=9)\nfig, axes = plt.subplots(3, 3, figsize=(16, 12))\n\nfor idx, ax in enumerate(axes.ravel()):\n    img = Image.open(train_list[idx])\n    img_r = img.transpose(Image.FLIP_LEFT_RIGHT)\n    ax.set_title(labels[idx])\n    ax.imshow(img_r)\n#'''","metadata":{"execution":{"iopub.status.busy":"2023-07-12T06:21:03.564942Z","iopub.execute_input":"2023-07-12T06:21:03.565592Z","iopub.status.idle":"2023-07-12T06:21:03.578159Z","shell.execute_reply.started":"2023-07-12T06:21:03.565559Z","shell.execute_reply":"2023-07-12T06:21:03.577048Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<a id=\"analyze\"></a>\n# データ分析","metadata":{}},{"cell_type":"markdown","source":"<a id='img_size'></a>\n## 画像サイズの分布","metadata":{}},{"cell_type":"code","source":"'''\nimport numpy as np\n\nfrom PIL import Image\nimport numpy as np\nfrom PIL import ImageFile\nfrom sklearn.model_selection import train_test_split\n\nclasses = {'dog':0, 'cat':1}\nimg_list = []\nlabel_list = []\n\ntrain_labels = [path.split('/')[-1].split('.')[0] for path in train_list]\nfor i, img in enumerate(train_list) :\n    image = Image.open(img)\n    image = image.convert(\"RGB\")\n    data = np.asarray(image)\n    img_list.append(data)\n    label_list.append(classes[train_labels[i]])\n    \nprint(len(img_list))\n#'''","metadata":{"execution":{"iopub.status.busy":"2023-07-12T06:21:03.580944Z","iopub.execute_input":"2023-07-12T06:21:03.581311Z","iopub.status.idle":"2023-07-12T06:21:03.590248Z","shell.execute_reply.started":"2023-07-12T06:21:03.581274Z","shell.execute_reply":"2023-07-12T06:21:03.589248Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"'''\nimport collections\nc1 = collections.Counter(x)\nc2 = collections.Counter(y)\nprint(c1)\nprint(c2)\n#'''","metadata":{"execution":{"iopub.status.busy":"2023-07-12T06:21:03.591875Z","iopub.execute_input":"2023-07-12T06:21:03.592272Z","iopub.status.idle":"2023-07-12T06:21:03.601085Z","shell.execute_reply.started":"2023-07-12T06:21:03.592238Z","shell.execute_reply":"2023-07-12T06:21:03.599953Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"'''\nfrom matplotlib import pyplot as plt\nfrom mpl_toolkits.mplot3d import Axes3D\n\nx = []\ny = []\nfor img in img_list :\n    x.append(img.shape[0])\n    y.append(img.shape[1])\nhist, xedges, yedges = np.histogram2d(x, y, bins=5) # ５個区切りでxとyのヒストグラムを作成\nxpos, ypos = np.meshgrid(xedges[:-1], yedges[:-1]) # x,y座標を3D用の形式に変換（その１）\nzpos = 0 # zは常に0を始点にする\ndx = xpos[0][1] - xpos[0][0] # x座標の幅を設定\ndy = ypos[1][0] - ypos[0][0] # y座標の幅を設定\ndz = hist.ravel() # z座標の幅は棒の長さに相当\n\nxpos = xpos.ravel() # x座標を3D用の形式に変換（その２）\nypos = ypos.ravel() # y座標を3D用の形式に変換（その２）\n\nfig = plt.figure() # 描画領域を作成\nax = fig.add_subplot(111, projection=\"3d\") # 3Dの軸を作成\nax.bar3d(xpos,ypos,zpos,dx,dy,dz) # ヒストグラムを3D空間に表示\nplt.title(\"Histogram 2D\") # タイトル表示\nplt.xlabel(\"X\") # x軸の内容表示\nplt.ylabel(\"Y\") # y軸の内容表示\nax.set_zlabel(\"Z\") # z軸の内容表示\nplt.show()\n#'''","metadata":{"execution":{"iopub.status.busy":"2023-07-12T06:21:03.603051Z","iopub.execute_input":"2023-07-12T06:21:03.603311Z","iopub.status.idle":"2023-07-12T06:21:03.613446Z","shell.execute_reply.started":"2023-07-12T06:21:03.603289Z","shell.execute_reply":"2023-07-12T06:21:03.612413Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<a id='vector'></a>\n## 学習データを事前学習済みモデルによるベクトル化","metadata":{}},{"cell_type":"code","source":"'''\nimport numpy as np\nimport tensorflow as tf\nimport time\n\nmodel = tf.keras.applications.EfficientNetB0(include_top=False, pooling=\"avg\")\n\ndef image2vec(image_path):\n    raw = tf.io.read_file(image_path)\n    image = tf.image.decode_jpeg(raw, channels=3)\n    image = tf.image.resize(image, [64, 64])\n    vec = model.predict(np.array([image.numpy()]), verbose=0)[0]\n    return vec\n\ndef vector(train_list) :\n    train_img_vectors = []\n    for i, train in enumerate(train_list) :\n        train_img_vectors.append(image2vec(train))\n        if (i % 1000 == 0) :\n            print(i)\n    return train_img_vectors\n\n# 時間計測開始\ntime_sta = time.time()\n# 処理の実行\ntrain_img_vectors = vector(train_list)\n# 時間計測終了\ntime_end = time.time()\n# 経過時間（秒）\ntim = time_end- time_sta\nprint(f'{tim:.4f}sec')\n#'''","metadata":{"execution":{"iopub.status.busy":"2023-07-12T06:21:03.615236Z","iopub.execute_input":"2023-07-12T06:21:03.615682Z","iopub.status.idle":"2023-07-12T06:21:03.628464Z","shell.execute_reply.started":"2023-07-12T06:21:03.615644Z","shell.execute_reply":"2023-07-12T06:21:03.627307Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"2次元の主成分分析を行い，2次元上にプロット  \n学習データ 赤：犬 ，青：猫 とする","metadata":{}},{"cell_type":"code","source":"'''\nfrom sklearn.decomposition import PCA\ntrain_img_vectors_pca = PCA(n_components=2, random_state=1).fit_transform(train_img_vectors)\n\nlabels = [path.split('/')[-1].split('.')[0] for path in train_list]\nimport matplotlib.pyplot as plt\nplt.figure(figsize=(10,10))\n\nfor i, v in enumerate(train_img_vectors_pca) :\n    if labels[i] == 'dog' :\n        plt.scatter(v[0], v[1],s=1, c = 'red')\n    elif labels[i] == 'cat' :\n        plt.scatter(v[0], v[1],s=1, c = 'blue')\n    else :\n        plt.scatter(v[0], v[1],s=1, c = 'black')\n    if (i % 1000 == 0) :\n            print(i)\nplt.show()\n#'''","metadata":{"execution":{"iopub.status.busy":"2023-07-12T06:21:03.630278Z","iopub.execute_input":"2023-07-12T06:21:03.630657Z","iopub.status.idle":"2023-07-12T06:21:03.64189Z","shell.execute_reply.started":"2023-07-12T06:21:03.630613Z","shell.execute_reply":"2023-07-12T06:21:03.640875Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<a id=\"split\"></a>\n# 分類学習の 学習データ と 検証データ と テストデータ の生成","metadata":{}},{"cell_type":"code","source":"'''\nfrom PIL import Image\nimport os, glob\nimport numpy as np\nfrom PIL import ImageFile\nfrom sklearn.model_selection import train_test_split\n\nclasses = {'dog':0, 'cat':1}\nimage_size = 64\n\nX_train = []\ny_train = []\nX_test  = []\n\ntrain_labels = [path.split('/')[-1].split('.')[0] for path in train_list]\n\nfor i, img in enumerate(train_list) :\n    image = Image.open(img)\n    image = image.convert(\"RGB\")\n    image = image.resize((image_size, image_size))\n    data = np.asarray(image)\n    X_train.append(data)\n    y_train.append(classes[train_labels[i]])\n    \nfor i, img in enumerate(test_list) :\n    image = Image.open(img)\n    image = image.convert(\"RGB\")\n    image = image.resize((image_size, image_size))\n    data = np.asarray(image)\n    X_test.append(data)\n\nX_train = np.array(X_train)\ny_train = np.array(y_train)\nX_train, X_val, y_train, y_val = train_test_split(X_train, y_train, train_size=0.7, random_state=0)\n\nX_test  = np.array(X_test)\n\n# 入力データの各画素値を0-1の範囲で正規化(学習コストを下げるため)\n#X_train = X_train.astype(\"float\") / 255\n#X_val  = X_val.astype(\"float\") / 255\n#X_test  = X_test.astype(\"float\") / 255\n\n#'''","metadata":{"execution":{"iopub.status.busy":"2023-07-12T06:21:03.64359Z","iopub.execute_input":"2023-07-12T06:21:03.644029Z","iopub.status.idle":"2023-07-12T06:21:03.656216Z","shell.execute_reply.started":"2023-07-12T06:21:03.643996Z","shell.execute_reply":"2023-07-12T06:21:03.654972Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"生成データの確認","metadata":{}},{"cell_type":"code","source":"'''\nprint('学習・検証・テストデータ')\nprint(f'学習データ数：{len(X_train)} 検証データ数:{len(X_val)} テストデータ数：{len(X_test)}')\nprint(f'学習ラベル数：{len(y_train)} 検証ラベル数:{len(y_val)}')\nprint('1つのデータ')\nprint(f'学習の次元数：{X_train[0].shape} 検証の次元数：{X_val[0].shape} テストの次元数：{X_test[0].shape}')\nprint(f'学習ラベル：{y_train[0]} 検証ラベル：{y_val[0]}')\n#'''","metadata":{"execution":{"iopub.status.busy":"2023-07-12T06:21:03.661944Z","iopub.execute_input":"2023-07-12T06:21:03.662294Z","iopub.status.idle":"2023-07-12T06:21:03.671215Z","shell.execute_reply.started":"2023-07-12T06:21:03.662256Z","shell.execute_reply":"2023-07-12T06:21:03.669977Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"学習・検証データのラベル分布","metadata":{}},{"cell_type":"code","source":"'''\nimport collections\nc1 = collections.Counter(y_train)\nc2 = collections.Counter(y_val)\nprint(classes)\nprint(f'学習データのラベル分布：{c1}')\nprint(f'検証データのラベル分布：{c2}')\n#'''","metadata":{"execution":{"iopub.status.busy":"2023-07-12T06:21:03.6728Z","iopub.execute_input":"2023-07-12T06:21:03.673287Z","iopub.status.idle":"2023-07-12T06:21:03.684588Z","shell.execute_reply.started":"2023-07-12T06:21:03.673254Z","shell.execute_reply":"2023-07-12T06:21:03.683428Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<a id='aug'></a>\n## データ拡張","metadata":{}},{"cell_type":"code","source":"from PIL import Image\nimport os, glob\nimport numpy as np\nfrom PIL import ImageFile\nfrom sklearn.model_selection import train_test_split\n\nclasses = {'dog':0, 'cat':1}\nimage_size = 224\n#image_size = 64 # CNN\n\nX_train = []\ny_train = []\n\ntrain_labels = [path.split('/')[-1].split('.')[0] for path in train_list]\n\nfor i, img in enumerate(train_list) :\n    image = Image.open(img)\n    image = image.convert(\"RGB\")\n    image = image.resize((image_size, image_size))\n    data = np.asarray(image)\n    X_train.append(data)\n    y_train.append(classes[train_labels[i]])\n    \n    # FLIP_LEFT_RIGHT　は 左右反転\n    img_trains = image.transpose(Image.FLIP_LEFT_RIGHT)\n    data = np.asarray(img_trains)\n    X_train.append(data)\n    y_train.append(classes[train_labels[i]])\n    \nX_train = np.array(X_train)\ny_train = np.array(y_train)\nX_train, X_val, y_train, y_val = train_test_split(X_train, y_train, train_size=0.7, random_state=0)\n\nX_test  = []\n\nfor i, img in enumerate(test_list) :\n    image = Image.open(img)\n    image = image.convert(\"RGB\")\n    image = image.resize((image_size, image_size))\n    data = np.asarray(image)\n    X_test.append(data)\n    \nX_test  = np.array(X_test)","metadata":{"execution":{"iopub.status.busy":"2023-07-12T06:21:03.686234Z","iopub.execute_input":"2023-07-12T06:21:03.686617Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#'''\nprint('学習・検証・テストデータ')\nprint(f'学習データ数：{len(X_train)} 検証データ数:{len(X_val)} テストデータ数：{len(X_test)}')\nprint(f'学習ラベル数：{len(y_train)} 検証ラベル数:{len(y_val)}')\nprint('1つのデータ')\nprint(f'学習の次元数：{X_train[0].shape} 検証の次元数：{X_val[0].shape} テストの次元数：{X_test[0].shape}')\nprint(f'学習ラベル：{y_train[0]} 検証ラベル：{y_val[0]}')\n#'''","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<a id='train'></a>\n# 分類学習","metadata":{}},{"cell_type":"code","source":"from keras.models import Sequential ,Model\nfrom keras.layers import Conv2D, MaxPooling2D\nfrom keras.layers import Input, Activation, Dropout, Flatten, Dense\nfrom keras.optimizers import RMSprop\nimport tensorflow as tf\n\nimport keras\nimport numpy as np","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<a id='build'></a>\n### モデル構築","metadata":{}},{"cell_type":"markdown","source":"<a id='trained'></a>\n#### 事前学習済みモデルでモデル構築","metadata":{}},{"cell_type":"code","source":"#'''\ndef get_model(image_size, num_classes):\n    # 画像を受け取る層\n    inputs = Input(shape = image_size)\n    # EfficientNetB0を作成\n    x = tf.keras.applications.efficientnet.EfficientNetB0(include_top = False)(inputs)\n    # １次元に変換する層\n    x = Flatten()(x)\n    # 最終出力層\n    outputs = Dense(units = num_classes, activation = \"softmax\")(x)\n\n    # 定義した層を使ってモデル作成\n    model = Model(inputs = inputs, outputs = outputs)\n    # 最適化手法と損失関数を定義\n    model.compile(\n        optimizer = tf.keras.optimizers.Adam(learning_rate = 5e-5),\n        loss = \"sparse_categorical_crossentropy\",\n        metrics=['accuracy']\n    )\n    return model\n\n# モデルの呼び出し\ntf.keras.backend.clear_session()\nmodel = get_model(X_train.shape[-3:], 2)\nmodel.summary()\n#'''","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"データセットの生成","metadata":{}},{"cell_type":"code","source":"#'''\ntrain_dataset = tf.data.Dataset.from_tensor_slices((X_train, y_train))\ntest_dataset = tf.data.Dataset.from_tensor_slices((X_val, y_val))\n\ntrain_dataset = train_dataset.batch(32)\ntest_dataset = test_dataset.batch(32)\n\ntrain_dataset = train_dataset.shuffle(1024 * 50)\n\nbatch = next(iter(train_dataset))\nprint(batch[0].shape)\nprint(batch[1].shape)\n#'''","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#'''\ncheckpoint = tf.keras.callbacks.ModelCheckpoint(\n    \"best_weight.h5\",     # ファイル名\n    monitor = \"val_loss\", # 参照するloss\n    mode = \"min\",         # monitorが最小のときに保存\n    save_best_only = True,\n    save_weights_only = True\n)\n\nhistory = model.fit(\n    train_dataset,\n    validation_data = test_dataset,\n    epochs = 10,\n    callbacks = [checkpoint]\n)\n#'''","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#'''\nmodel.load_weights(\"best_weight.h5\")\npreds = model.predict(test_dataset)\nprint(preds[0])\nprint(y_val[0])\n#'''","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#'''\nplt.plot(history.history[\"loss\"], label = \"train\")\nplt.plot(history.history[\"val_loss\"], label = \"valid\")\nplt.legend()\nplt.show()\n#'''","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#'''\npred_labels = preds.argmax(axis = 1)\nprint(pred_labels[:5])\nprint(y_val[:5].reshape(-1))\n#'''","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#'''\nfrom sklearn.metrics import accuracy_score\n\nprint(accuracy_score(pred_labels, y_val.reshape(-1)))\n#'''","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<a id='cnn'></a>\n#### CNN で構築\nスコア0.60ぐらい","metadata":{}},{"cell_type":"code","source":"'''\ndef model_classify(X) :\n    model = Sequential() # モデルを生成するためのモジュール\n\n    # Xは(1200, 64, 64, 3)\n    # X.shape[1:]とすることで、(64, 64, 3)となり、入力にすることが可能です。\n    model.add(Conv2D(32,(3,3), padding='same',input_shape=X.shape[1:])) # 2次元畳み込み層のモジュール\n    model.add(Activation('relu')) # 活性化関数モジュール\n    model.add(Conv2D(32,(3,3))) # 2次元畳み込み層のモジュール\n    model.add(Activation('relu')) # 活性化関数モジュール\n    model.add(MaxPooling2D(pool_size=(2,2))) # 2次元最大プーリング層のモジュール\n    model.add(Dropout(0.1)) # ドロップアウトモジュール\n\n    model.add(Conv2D(64,(3,3), padding='same')) # 2次元畳み込み層のモジュール\n    model.add(Activation('relu')) # 活性化関数モジュール\n    model.add(Conv2D(64,(3,3))) # 2次元畳み込み層のモジュール\n    model.add(Activation('relu')) # 活性化関数モジュール\n    model.add(MaxPooling2D(pool_size=(2,2))) # 2次元最大プーリング層のモジュール\n    model.add(Dropout(0.25)) # ドロップアウトモジュール\n\n    model.add(Flatten()) # 入力を平滑化するモジュール\n    model.add(Dense(512)) # 全結合層のレイヤモジュール\n    model.add(Activation('relu')) # 活性化関数モジュール\n    model.add(Dropout(0.45)) # ドロップアウトモジュール\n    model.add(Dense(2)) # # 全結合層のレイヤモジュール(犬と猫を識別するため、２クラス分類のため2を指定)\n    model.add(Activation('softmax')) # 活性化関数モジュール\n\n    # 最適化アルゴリズムにRMSpropを利用\n    model.compile(\n        optimizer = tf.keras.optimizers.Adam(learning_rate = 5e-5),\n        loss = \"sparse_categorical_crossentropy\",\n        metrics=['accuracy']\n    )\n    \n    return model\n'''","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"'''\nmodel = model_classify(X_train)\nmodel.summary()\n#'''","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#model.fit(X_train, y_train, batch_size=28, epochs=40)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#score = model.evaluate(X_val, y_val, batch_size=28)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<a id='submit'></a>\n# submit データの作成","metadata":{"execution":{"iopub.status.busy":"2023-07-09T16:57:09.941619Z","iopub.execute_input":"2023-07-09T16:57:09.941946Z","iopub.status.idle":"2023-07-09T16:57:09.946959Z","shell.execute_reply.started":"2023-07-09T16:57:09.941919Z","shell.execute_reply":"2023-07-09T16:57:09.945485Z"}}},{"cell_type":"markdown","source":"CNN で作成","metadata":{}},{"cell_type":"code","source":"'''\npred = model.predict(X_test)\n\nimport pandas as pd\n\ndf1 = pd.DataFrame(pred, columns=['dog', 'cat'])\n\nids = [path.split('/')[-1].split('.')[0] for path in test_list]\nsubmit = list(zip(ids, df1['dog'].to_list()))\ndf2 = pd.DataFrame(submit, columns=['id', 'label'])\nprint(df2.head())\ndf2.to_csv('submit_cnn.csv', index=False)\n'''","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"'''\ndf = pd.read_csv('submit_cnn.csv')\ndf.head()\n#'''","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"事前学習済みモデルで作成","metadata":{}},{"cell_type":"code","source":"#'''\n# モデルの呼び出し\ntf.keras.backend.clear_session()\nmodel = get_model(X_train.shape[-3:], 2)\nmodel.load_weights(\"best_weight.h5\")\n#'''","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#'''\npred = model.predict(X_test)\n\nimport pandas as pd\n\ndf1 = pd.DataFrame(pred, columns=['dog', 'cat'])\n\nids = [path.split('/')[-1].split('.')[0] for path in test_list]\nsubmit = list(zip(ids, df1['dog'].to_list()))\ndf2 = pd.DataFrame(submit, columns=['id', 'label'])\nprint(df2.head())\ndf2.to_csv('submit_trained.csv', index=False)\n#'''","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#'''\ndf = pd.read_csv('submit_trained.csv')\ndf.head()\n#'''","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### Dog vs cats","metadata":{}},{"cell_type":"code","source":"'''\nPATH = '/kaggle/working/'\nSUBM = f'{PATH}sub/' \nos.makedirs(SUBM, exist_ok=True) \ndf.to_csv(f'{SUBM}subm.gz', compression='gzip', index=False)\n'''","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"'''\npreds = model.predict(X_test)\npred_labels = preds.argmax(axis = 1)\n\nimport pandas as pd\nids = [path.split('/')[-1].split('.')[0] for path in test_list]\nsubmit = list(zip(ids, pred_labels))\ndf = pd.DataFrame(submit, columns=['id', 'label'])\nprint(df.head())\ndf.to_csv('submit_trained.csv', index=False)\n'''","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}