{"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 numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\nimport os\n# for dirname, _, filenames in os.walk('/kaggle/input'):\n#     for filename in filenames:\n#         print(os.path.join(dirname, filename))\n# ","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2021-12-05T04:32:39.808339Z","iopub.execute_input":"2021-12-05T04:32:39.808761Z","iopub.status.idle":"2021-12-05T04:32:39.813733Z","shell.execute_reply.started":"2021-12-05T04:32:39.808713Z","shell.execute_reply":"2021-12-05T04:32:39.812899Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from tensorflow.keras.preprocessing.image import ImageDataGenerator\nigen=ImageDataGenerator(rescale=1/255, validation_split=0.1,\n#                        width_shift_range=0.1, height_shift_range=0.1, \n#                        zoom_range=0.2, \n#                         horizontal_flip=True, # vertical_flip=True,\n#                         shear_range=0.1,\n                        rotation_range=15,\n                        shear_range=0.1,\n                        zoom_range=0.2,\n                        horizontal_flip=True,\n                        width_shift_range=0.1, \n                        height_shift_range=0.1,\n                        brightness_range=(0.9,1.1)\n                        )\nigen_test=ImageDataGenerator(rescale=1/255)\n\ntrainp = '../input/animal-classification/train'\ntestp = '../input/animal-classification/test'\n","metadata":{"execution":{"iopub.status.busy":"2021-12-05T08:00:08.09336Z","iopub.execute_input":"2021-12-05T08:00:08.093649Z","iopub.status.idle":"2021-12-05T08:00:08.099844Z","shell.execute_reply.started":"2021-12-05T08:00:08.093611Z","shell.execute_reply":"2021-12-05T08:00:08.098869Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from PIL import Image\nimport matplotlib.pyplot as plt\n\nfor i in range(1, 11):\n    a=Image.open(trainp+'/cat/cat_'+str(i)+'.jpg')\n    plt.imshow(a)\n    print(a.size)\n#     plt.show()","metadata":{"execution":{"iopub.status.busy":"2021-12-05T08:00:08.484519Z","iopub.execute_input":"2021-12-05T08:00:08.485062Z","iopub.status.idle":"2021-12-05T08:00:09.2238Z","shell.execute_reply.started":"2021-12-05T08:00:08.485025Z","shell.execute_reply":"2021-12-05T08:00:09.223095Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"bs=32\ntarget_size = 150\nisize=(target_size,target_size)\nishape=(target_size,target_size,3)","metadata":{"execution":{"iopub.status.busy":"2021-12-05T08:00:09.225391Z","iopub.execute_input":"2021-12-05T08:00:09.225787Z","iopub.status.idle":"2021-12-05T08:00:09.231111Z","shell.execute_reply.started":"2021-12-05T08:00:09.22575Z","shell.execute_reply":"2021-12-05T08:00:09.230437Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train = igen.flow_from_directory('../input/animal-classification/train', batch_size = bs, target_size = isize, \n                                 class_mode = 'categorical', subset='training', shuffle=True)\nvalid = igen.flow_from_directory('../input/animal-classification/train', batch_size = bs, target_size = isize, \n                                 class_mode = 'categorical', subset='validation', shuffle=True)\n\nsub = pd.read_csv(\"../input/animal-classification/Sample_submission.csv\")\ntest = sub.copy()\ntest.ID = test.ID.astype(str)\ntest['file'] = testp + '/test/' + test.ID + '.jpg'\ntest = igen_test.flow_from_dataframe(test, x_col='file', y_col=None, batch_size = bs, target_size = isize, \n                                 class_mode = None, shuffle=False)","metadata":{"execution":{"iopub.status.busy":"2021-12-05T08:00:09.23238Z","iopub.execute_input":"2021-12-05T08:00:09.233098Z","iopub.status.idle":"2021-12-05T08:00:09.834215Z","shell.execute_reply.started":"2021-12-05T08:00:09.233061Z","shell.execute_reply":"2021-12-05T08:00:09.83345Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"x, y = valid.next()\nprint(x.shape, y.shape)\nfor i in range(bs):\n    plt.imshow((x[i]*255).astype('int'))\n    plt.show()\n    print(y[i])","metadata":{"execution":{"iopub.status.busy":"2021-12-05T08:00:09.835955Z","iopub.execute_input":"2021-12-05T08:00:09.836813Z","iopub.status.idle":"2021-12-05T08:01:59.921281Z","shell.execute_reply.started":"2021-12-05T08:00:09.836772Z","shell.execute_reply":"2021-12-05T08:01:59.920592Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from tensorflow.keras.models import Sequential\nfrom tensorflow.keras.layers import Conv2D, MaxPooling2D, Dense, Flatten, Dropout, BatchNormalization","metadata":{"execution":{"iopub.status.busy":"2021-12-05T05:04:37.427905Z","iopub.execute_input":"2021-12-05T05:04:37.428705Z","iopub.status.idle":"2021-12-05T05:04:37.434615Z","shell.execute_reply.started":"2021-12-05T05:04:37.428668Z","shell.execute_reply":"2021-12-05T05:04:37.432173Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"md=Sequential()\n\nmd.add(Conv2D(16,(3,3), activation='relu', input_shape=ishape))\nmd.add(Conv2D(16,(3,3), activation='relu'))\nmd.add(MaxPooling2D())\nmd.add(Dropout(0.5))\n\nmd.add(BatchNormalization())\nmd.add(Conv2D(32,(3,3), activation='relu'))\nmd.add(Conv2D(32,(3,3), activation='relu'))\nmd.add(MaxPooling2D())\nmd.add(Dropout(0.5))\n\nmd.add(BatchNormalization())\nmd.add(Conv2D(64,(3,3), activation='relu'))\nmd.add(Conv2D(64,(3,3), activation='relu'))\nmd.add(MaxPooling2D())\nmd.add(Dropout(0.5))\n\nmd.add(BatchNormalization())\nmd.add(Conv2D(128,(3,3), activation='relu'))\nmd.add(Conv2D(128,(3,3), activation='relu'))\nmd.add(MaxPooling2D())\nmd.add(Dropout(0.5))\n\nmd.add(Flatten())\nmd.add(Dense(512, activation='relu')) #\n# md.add(Dense(256, activation='relu'))\nmd.add(Dense(128, activation='relu')) #\n# md.add(Dense(64, activation='relu'))\nmd.add(Dense(32, activation='relu'))  #\nmd.add(Dense(4, activation='softmax'))\nmd.summary()","metadata":{"execution":{"iopub.status.busy":"2021-12-05T04:32:53.907327Z","iopub.execute_input":"2021-12-05T04:32:53.908736Z","iopub.status.idle":"2021-12-05T04:32:56.65047Z","shell.execute_reply.started":"2021-12-05T04:32:53.908682Z","shell.execute_reply":"2021-12-05T04:32:56.6498Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# from tensorflow.keras.utils import plot_model\n# plot_model(md, 'CNN2.png')","metadata":{"execution":{"iopub.status.busy":"2021-12-05T04:32:56.653395Z","iopub.execute_input":"2021-12-05T04:32:56.653606Z","iopub.status.idle":"2021-12-05T04:32:56.656732Z","shell.execute_reply.started":"2021-12-05T04:32:56.653578Z","shell.execute_reply":"2021-12-05T04:32:56.656059Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# 학습일지\n1. dropout(0.5) -> All\n    - 학습율이 너무 더딤, 25% 멈춤\n2. delete dropout -> all\n    - 40%에서 진동\n3. bs: 16 -> 4\n    - 꾸준히 증가하지만 그 폭이 좁음. 마찬가지로 45%에서 진동\n4. imgsize: 128 -> 64, Conv2D 2층으로 시작(16, 8)\n    - 40%에서 진동\n5. batchnorm, dropout 임의 적용\n    - 40%에서 진동\n6. 교수님 코드 카피코딩\n    - 40 진동\n7. dropout을 CNN에서\n    - 40 진동\n8. 데이터 증강\n    - 32%에서 고정\n9. 데이터 증강, dropout 제거\n    - 30%에서 진동\n10. 데이터 증강, 밝기 올림 (0.2,1.3) -> (0.7,1.3)\n    - 30%에서 진동\n11. zoom_range 0.2 -> 0.5\n    - 32%에서 고정\n12. 다른 모델 사용 및 상하반전 삭제\n    - 32%에서 고정\n13. 아직은 데이터 증강을 할 때가 아니라고 판단, 시드를 고정하고 학습률 개선\n14. train 데이터를 섞어서 학습\n    - 학습률 46%까지 올라감\n15. batchsize: 8 -> 1\n    - 학습률 32% 고정\n16. batchsize: 1 -> 16\n    - 학습율 50%찍음\n17. RMSProp -> Adam\n    - 학습율 42%, 과적합\n18. batchsize: 16 -> 32\n    - 50%, epoch 10 이후부터 과적합\n19. 데이터증강, zoom, horizontal_flip, 밝기조절\n    - 변동이 크지만 학습이 이루어짐. acc는 56%까지 올라가나 제출 결과 48%에 그침\n20. 다시 되돌리고, CNN 층 하나 더 생성\n    - 55%까지 상승\n21. 레이어가 너무 작아져 padding크기를 조정\n    - 오히려 작았을 때가 더 좋은 결과, 49%\n22. 다시 되돌리고, Dense 층을 늘림\n    - 48, 50%\n23. Dense 층을 줄임, 30번 학습\n    - 54%\n24. batchsize: 32 -> 16, epoch 40\n    - 50%\n25. 전이학습, epoch 20, base 학습x\n    - epoch 10에서 더이상 학습이 이뤄지는 것 같지 않음\n    - 90%\n    - 이어서 fine-tuning\n        - 92% 찍었으나 초중반에 학습이 멈춤\n26. Adam 대신 RMSProp 사용해보기\n    - 89%, 마찬가지로 epoch 20까지 돌려도 90%에서 학습이 더뎌짐.\n    - fine-tuning\n        - 92%, Adam과 큰 차이 없음\n27. 조금 더 복잡한 모델 적용시켜보기\n    - 90%, 큰 차이 없음\n    - fine-tuning\n        - 90% 오히려 낮게 나옴\n28. 데이터 증강\n    - 좌우 뒤집기와 밝기 및 기울기 조정\n    - 92%\n29. 복잡한 모델 설정\n    - 결과 차원이 작으므로 많은 필터를 적용(128개)한 뒤 버림(dropout 0.5)\n    - 93%\n30. base모델을 초기화하지 않고 나은 결과값이 나온 base모델을 계속 학습시키기\n    - \n        ","metadata":{}},{"cell_type":"code","source":"import tensorflow as tf\ntf.random.set_seed(2)\n\nmd.compile(optimizer='RMSProp', loss='categorical_crossentropy', metrics='acc')","metadata":{"execution":{"iopub.status.busy":"2021-12-05T04:32:56.658181Z","iopub.execute_input":"2021-12-05T04:32:56.658409Z","iopub.status.idle":"2021-12-05T04:32:56.678445Z","shell.execute_reply.started":"2021-12-05T04:32:56.658379Z","shell.execute_reply":"2021-12-05T04:32:56.677592Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# hist=md.fit(train, epochs=30, validation_data=valid)","metadata":{"execution":{"iopub.status.busy":"2021-12-05T04:32:56.679778Z","iopub.execute_input":"2021-12-05T04:32:56.680164Z","iopub.status.idle":"2021-12-05T04:32:56.684745Z","shell.execute_reply.started":"2021-12-05T04:32:56.68013Z","shell.execute_reply":"2021-12-05T04:32:56.68396Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# result=md.predict(test)\n# for i in range(len(result)):\n#     sub.iloc[i,1] = result[i].argmax()\n# sub","metadata":{"execution":{"iopub.status.busy":"2021-12-05T04:32:56.686016Z","iopub.execute_input":"2021-12-05T04:32:56.686459Z","iopub.status.idle":"2021-12-05T04:32:56.693094Z","shell.execute_reply.started":"2021-12-05T04:32:56.686417Z","shell.execute_reply":"2021-12-05T04:32:56.692389Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# sub.to_csv(\"sub.csv\", index=False)\n","metadata":{"execution":{"iopub.status.busy":"2021-12-05T04:32:56.694537Z","iopub.execute_input":"2021-12-05T04:32:56.69484Z","iopub.status.idle":"2021-12-05T04:32:56.70209Z","shell.execute_reply.started":"2021-12-05T04:32:56.694803Z","shell.execute_reply":"2021-12-05T04:32:56.701278Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# 전이학습","metadata":{}},{"cell_type":"code","source":"import numpy as np\nimport tensorflow as tf\nfrom tensorflow import keras","metadata":{"execution":{"iopub.status.busy":"2021-12-05T07:53:26.243886Z","iopub.execute_input":"2021-12-05T07:53:26.244142Z","iopub.status.idle":"2021-12-05T07:53:26.248497Z","shell.execute_reply.started":"2021-12-05T07:53:26.244112Z","shell.execute_reply":"2021-12-05T07:53:26.247694Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Create base model\nbase_model = keras.applications.Xception(\n    weights='imagenet',\n    input_shape=(150, 150, 3),\n    include_top=False)","metadata":{"execution":{"iopub.status.busy":"2021-12-05T08:33:18.278998Z","iopub.execute_input":"2021-12-05T08:33:18.279263Z","iopub.status.idle":"2021-12-05T08:33:19.34055Z","shell.execute_reply.started":"2021-12-05T08:33:18.279233Z","shell.execute_reply":"2021-12-05T08:33:19.339754Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Freeze base model\nbase_model.trainable = False\n\ninputs = keras.Input(shape=(150, 150, 3))\n\nscale_layer = keras.layers.Rescaling(scale=2, offset=-1) # 0~1 -> -1~1\n\nx = scale_layer(inputs)\n\nx = base_model(x, training=False)\n\nx = keras.layers.GlobalAveragePooling2D()(x)\nx = keras.layers.Dropout(0.25)(x)  # Regularize with dropout\n\n# x = keras.layers.Dense(512, activation= 'relu')(x)\n# x = keras.layers.Dense(128, activation= 'relu')(x)\n# x = keras.layers.Dense(32, activation= 'relu')(x)\noutputs = keras.layers.Dense(4, activation= 'softmax')(x)\nmodel = keras.Model(inputs, outputs)\nmodel.summary()","metadata":{"execution":{"iopub.status.busy":"2021-12-05T09:35:54.179531Z","iopub.execute_input":"2021-12-05T09:35:54.180243Z","iopub.status.idle":"2021-12-05T09:35:54.513895Z","shell.execute_reply.started":"2021-12-05T09:35:54.180205Z","shell.execute_reply":"2021-12-05T09:35:54.513182Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Create base model\nbase_model1 = keras.applications.Xception(\n    weights='imagenet',\n    input_shape=(150, 150, 3),\n    include_top=False)","metadata":{"execution":{"iopub.status.busy":"2021-12-05T08:41:23.698987Z","iopub.execute_input":"2021-12-05T08:41:23.699241Z","iopub.status.idle":"2021-12-05T08:41:24.777259Z","shell.execute_reply.started":"2021-12-05T08:41:23.699211Z","shell.execute_reply":"2021-12-05T08:41:24.776459Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Freeze base model\nbase_model1.trainable = False\n\ninputs = keras.Input(shape=(150, 150, 3))\n\nscale_layer = keras.layers.Rescaling(scale=2, offset=-1) # 0~1 -> -1~1\n\nx = scale_layer(inputs)\n\nx = base_model1(x, training=False)\n\nx = tf.keras.layers.BatchNormalization()(x)\nx = tf.keras.layers.Conv2D(128, 3, activation='relu', padding='same')(x)\nx = keras.layers.Dropout(0.5)(x)\n\nx = keras.layers.GlobalAveragePooling2D()(x)\nx = keras.layers.Dropout(0.2)(x)\n\nx = keras.layers.Dense(128, activation= 'relu')(x)\nx = keras.layers.Dense(32, activation= 'relu')(x)\n\noutputs = keras.layers.Dense(4, activation= 'softmax')(x)\n\nmodel1 = keras.Model(inputs, outputs)\nmodel1.summary()","metadata":{"execution":{"iopub.status.busy":"2021-12-05T08:41:24.779044Z","iopub.execute_input":"2021-12-05T08:41:24.779276Z","iopub.status.idle":"2021-12-05T08:41:25.14957Z","shell.execute_reply.started":"2021-12-05T08:41:24.779242Z","shell.execute_reply":"2021-12-05T08:41:25.148782Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.compile(\n    optimizer=keras.optimizers.Adam(),\n    loss='categorical_crossentropy',\n    metrics='acc',\n)\nepochs = 10\nhist = model.fit(train, epochs=epochs, validation_data=valid)","metadata":{"execution":{"iopub.status.busy":"2021-12-05T08:49:00.314805Z","iopub.execute_input":"2021-12-05T08:49:00.315365Z","iopub.status.idle":"2021-12-05T08:54:41.914454Z","shell.execute_reply.started":"2021-12-05T08:49:00.315327Z","shell.execute_reply":"2021-12-05T08:54:41.913629Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# model1.compile(\n#     optimizer=keras.optimizers.Adam(),\n#     loss='categorical_crossentropy',\n#     metrics='acc',\n# )\nepochs = 10\nhist1 = model1.fit(train, epochs=epochs, validation_data=valid)","metadata":{"execution":{"iopub.status.busy":"2021-12-05T08:41:29.912138Z","iopub.execute_input":"2021-12-05T08:41:29.912391Z","iopub.status.idle":"2021-12-05T08:47:02.424658Z","shell.execute_reply.started":"2021-12-05T08:41:29.912361Z","shell.execute_reply":"2021-12-05T08:47:02.42392Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# fine-tuning\nbase_model.trainable = True\nmodel.summary()\n\nmodel.compile(\n    optimizer=keras.optimizers.Adam(1e-7),  # Low learning rate\n    loss='categorical_crossentropy',\n    metrics='acc',\n)\n\nepochs = 5\nhist = model.fit(train, epochs=epochs, validation_data=valid)","metadata":{"execution":{"iopub.status.busy":"2021-12-05T09:21:46.785643Z","iopub.execute_input":"2021-12-05T09:21:46.785946Z","iopub.status.idle":"2021-12-05T09:24:58.252922Z","shell.execute_reply.started":"2021-12-05T09:21:46.78591Z","shell.execute_reply":"2021-12-05T09:24:58.25213Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# fine-tuning\nbase_model1.trainable = True\nmodel1.summary()\n\nmodel1.compile(\n    optimizer=keras.optimizers.Adam(1e-7),  # Low learning rate\n    loss='categorical_crossentropy',\n    metrics='acc',\n)\n\nepochs = 5\nhist = model1.fit(train, epochs=epochs, validation_data=valid)","metadata":{"execution":{"iopub.status.busy":"2021-12-05T09:25:00.405789Z","iopub.execute_input":"2021-12-05T09:25:00.406347Z","iopub.status.idle":"2021-12-05T09:28:12.350365Z","shell.execute_reply.started":"2021-12-05T09:25:00.406307Z","shell.execute_reply":"2021-12-05T09:28:12.349507Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"result=model1.predict(test)\nfor i in range(len(result)):\n    sub.iloc[i,1] = result[i].argmax()\nsub\nsub.to_csv(\"sub.csv\", index=False)\n","metadata":{"execution":{"iopub.status.busy":"2021-12-05T09:29:11.110401Z","iopub.execute_input":"2021-12-05T09:29:11.111266Z","iopub.status.idle":"2021-12-05T09:29:16.665918Z","shell.execute_reply.started":"2021-12-05T09:29:11.111228Z","shell.execute_reply":"2021-12-05T09:29:16.665126Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"loss=hist.history['loss']\nval_loss=hist.history['val_loss']\nacc=hist.history['acc']\nval_acc=hist.history['val_acc']\nep=np.arange(1,len(loss)+1)\n\nimport matplotlib.pyplot as plt\nplt.figure(figsize=(10,8))\nplt.plot(ep, loss, 'b', label='loss')\nplt.plot(ep, val_loss, 'g', label='val_loss')\nplt.title('Loss')\nplt.legend()\n\nplt.figure(figsize=(10,8))\nplt.plot(ep, acc, 'r', label='acc')\nplt.plot(ep, val_acc, 'y', label='val_acc')\nplt.title('Accuracy')\nplt.legend()","metadata":{"execution":{"iopub.status.busy":"2021-12-05T07:19:57.346702Z","iopub.execute_input":"2021-12-05T07:19:57.346941Z","iopub.status.idle":"2021-12-05T07:19:57.772053Z","shell.execute_reply.started":"2021-12-05T07:19:57.346908Z","shell.execute_reply":"2021-12-05T07:19:57.771395Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# md=Sequential()\n\n# md.add(Conv2D(16,(3,3), activation='relu', input_shape=ishape))\n# md.add(Conv2D(16,(3,3), activation='relu'))\n# md.add(MaxPooling2D())\n# md.add(Dropout(0.5))\n\n# md.add(BatchNormalization())\n# md.add(Conv2D(32,(3,3), activation='relu'))\n# md.add(Conv2D(32,(3,3), activation='relu'))\n# md.add(MaxPooling2D())\n# md.add(Dropout(0.5))\n\n# md.add(BatchNormalization())\n# md.add(Conv2D(64,(3,3), activation='relu'))\n# md.add(Conv2D(64,(3,3), activation='relu'))\n# md.add(MaxPooling2D())\n# md.add(Dropout(0.5))\n\n# md.add(BatchNormalization())\n# md.add(Conv2D(128,(3,3), activation='relu'))\n# md.add(Conv2D(128,(3,3), activation='relu'))\n# md.add(MaxPooling2D())\n# md.add(Dropout(0.5))\n\n# md.add(Flatten())\n# md.add(Dense(512, activation='relu')) #\n# # md.add(Dense(256, activation='relu'))\n# md.add(Dense(128, activation='relu')) #\n# # md.add(Dense(64, activation='relu'))\n# md.add(Dense(32, activation='relu'))  #\n# md.add(Dense(4, activation='softmax'))\n# md.summary()","metadata":{"execution":{"iopub.status.busy":"2021-12-05T05:22:36.060805Z","iopub.execute_input":"2021-12-05T05:22:36.061006Z","iopub.status.idle":"2021-12-05T05:22:36.065063Z","shell.execute_reply.started":"2021-12-05T05:22:36.06098Z","shell.execute_reply":"2021-12-05T05:22:36.064281Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# train_ds.take(1)","metadata":{"execution":{"iopub.status.busy":"2021-12-05T04:33:37.628422Z","iopub.status.idle":"2021-12-05T04:33:37.629025Z","shell.execute_reply.started":"2021-12-05T04:33:37.628784Z","shell.execute_reply":"2021-12-05T04:33:37.628812Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}