Skip to content

Instantly share code, notes, and snippets.

@maxoobot
Last active March 21, 2020 04:37
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save maxoobot/0fb5d164c6c71bf0782c51883ef02a07 to your computer and use it in GitHub Desktop.
Save maxoobot/0fb5d164c6c71bf0782c51883ef02a07 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"uuid": "a3ebf42a-b439-4688-9789-899e28ddc200"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"2.0.0-alpha0\n"
]
}
],
"source": [
"import numpy as np\n",
"import tensorflow as tf\n",
"import os\n",
"import matplotlib.pyplot as plt\n",
"from sklearn.model_selection import StratifiedShuffleSplit\n",
"print(tf.__version__)"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"uuid": "57863da7-465a-4cd8-b296-04daa5ef770d"
},
"outputs": [],
"source": [
"tf.set_random_seed(42)"
]
},
{
"cell_type": "markdown",
"metadata": {
"uuid": "fa0730d8-2d4a-4517-b863-baadcc7c6a42"
},
"source": [
"### データの準備"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"uuid": "b0e88dd7-9f39-49e4-9eda-b1093fb00d20"
},
"outputs": [],
"source": [
"# データの読み込み\n",
"train_data = np.genfromtxt(\"/nas/data/fashion-mnist_train.csv\", delimiter=',', skip_header=1)\n",
"test_data = np.genfromtxt(\"/nas/data/fashion-mnist_test.csv\", delimiter=',', skip_header=1)\n",
"\n",
"train_images, train_labels = train_data[:, 1:], train_data[:, 0]\n",
"test_images, test_labels = test_data[:, 1:], test_data[:, 0]"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"uuid": "ddae21b1-48d9-4d1c-854e-b174722693a4"
},
"outputs": [],
"source": [
"# 入力データ(画像情報)を2Dに変換\n",
"X = train_images.reshape((-1, 28, 28, 1))\n",
"X_test = test_images.reshape((-1, 28, 28, 1))"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"uuid": "4dc12b9a-dc9b-4d34-a0be-29587d63cc0b"
},
"outputs": [],
"source": [
"# 出力データ(ラベル)をone-hotエンコード\n",
"classes_to_index = dict((c, i) for i, c in enumerate(np.unique(train_labels)))\n",
"\n",
"y = np.zeros((train_labels.shape[0], len(np.unique(train_labels))))\n",
"y_test = np.zeros((test_labels.shape[0], len(np.unique(test_labels))))\n",
"\n",
"for i, c in enumerate(train_labels):\n",
" y[i, classes_to_index[c]] = 1\n",
" \n",
"for i, c in enumerate(test_labels):\n",
" y_test[i, classes_to_index[c]] = 1"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"uuid": "2e52e630-d56b-48be-90ac-2a2518949f3d"
},
"outputs": [],
"source": [
"# validationデータを作成\n",
"strat_split = StratifiedShuffleSplit(n_splits=1, test_size=1/6, random_state=1)\n",
"for train_index, valid_index in strat_split.split(X, y):\n",
" X_train, X_valid = X[train_index], X[valid_index]\n",
" y_train, y_valid = y[train_index], y[valid_index]"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"uuid": "5030db41-a952-4acd-a1e5-97a3562b118a"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(50000, 28, 28, 1) (10000, 28, 28, 1) (10000, 28, 28, 1)\n",
"(50000, 10) (10000, 10) (10000, 10)\n"
]
}
],
"source": [
"print(X_train.shape, X_valid.shape, X_test.shape)\n",
"print(y_train.shape, y_valid.shape, y_test.shape)"
]
},
{
"cell_type": "markdown",
"metadata": {
"cellType": "markdown",
"uuid": "6ba50475-02c1-4c86-92a4-8cbc6a73640d"
},
"source": [
"### モデル構築"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"uuid": "970132bb-553e-4e62-85a7-0d46614687c8"
},
"outputs": [],
"source": [
"inputs = tf.keras.Input(shape=(28, 28, 1))\n",
"conv1 = tf.keras.layers.Conv2D(32, 5, activation='relu')(inputs)\n",
"pool1 = tf.keras.layers.MaxPooling2D(2)(conv1)\n",
"conv2 = tf.keras.layers.Conv2D(64, 5, activation='relu')(pool1)\n",
"pool2 = tf.keras.layers.MaxPooling2D(2)(conv2)\n",
"flatten = tf.keras.layers.Flatten()(pool2)\n",
"dense = tf.keras.layers.Dense(1024, activation='relu')(flatten)\n",
"dropout = tf.keras.layers.Dropout(0.4)(dense)\n",
"outputs= tf.keras.layers.Dense(10, activation='softmax')(dropout)\n",
"\n",
"model = tf.keras.Model(inputs=inputs, outputs=outputs, name=\"fashion_mnist_model\")\n",
"model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])"
]
},
{
"cell_type": "markdown",
"metadata": {
"uuid": "96bdca2d-15a7-4fcb-8821-55eaea848aa2"
},
"source": [
"### モデル学習"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"uuid": "82c6edfe-c85c-4842-84b2-29c23daf17a4"
},
"outputs": [],
"source": [
"checkpoint_dir = \"/nas/model/checkpoints/\"\n",
"if not os.path.exists(checkpoint_dir):\n",
" os.makedirs(checkpoint_dir)"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"uuid": "cb9421cf-81b2-4698-916e-fe18e0ce38b1"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Train on 50000 samples, validate on 10000 samples\n",
"Epoch 1/20\n",
"50000/50000 [==============================] - 8s 161us/sample - loss: 0.6825 - acc: 0.8022 - val_loss: 0.3931 - val_acc: 0.8543\n",
"Epoch 2/20\n",
"50000/50000 [==============================] - 7s 135us/sample - loss: 0.4081 - acc: 0.8522 - val_loss: 0.4430 - val_acc: 0.8485\n",
"Epoch 3/20\n",
"50000/50000 [==============================] - 7s 135us/sample - loss: 0.3856 - acc: 0.8609 - val_loss: 0.3789 - val_acc: 0.8671\n",
"Epoch 4/20\n",
"50000/50000 [==============================] - 7s 135us/sample - loss: 0.3622 - acc: 0.8687 - val_loss: 0.3890 - val_acc: 0.8665\n",
"Epoch 5/20\n",
"50000/50000 [==============================] - 7s 135us/sample - loss: 0.3473 - acc: 0.8739 - val_loss: 0.3384 - val_acc: 0.8818\n",
"Epoch 6/20\n",
"50000/50000 [==============================] - 7s 135us/sample - loss: 0.3308 - acc: 0.8794 - val_loss: 0.3291 - val_acc: 0.8847\n",
"Epoch 7/20\n",
"50000/50000 [==============================] - 7s 134us/sample - loss: 0.3249 - acc: 0.8823 - val_loss: 0.3443 - val_acc: 0.8797\n",
"Epoch 8/20\n",
"50000/50000 [==============================] - 7s 134us/sample - loss: 0.3097 - acc: 0.8876 - val_loss: 0.3466 - val_acc: 0.8781\n",
"Epoch 9/20\n",
"50000/50000 [==============================] - 7s 134us/sample - loss: 0.3127 - acc: 0.8866 - val_loss: 0.3484 - val_acc: 0.8811\n",
"Epoch 10/20\n",
"50000/50000 [==============================] - 7s 134us/sample - loss: 0.3018 - acc: 0.8931 - val_loss: 0.3623 - val_acc: 0.8691\n",
"Epoch 11/20\n",
"50000/50000 [==============================] - 7s 135us/sample - loss: 0.2912 - acc: 0.8954 - val_loss: 0.3603 - val_acc: 0.8872\n",
"Epoch 12/20\n",
"50000/50000 [==============================] - 7s 135us/sample - loss: 0.2809 - acc: 0.8990 - val_loss: 0.3735 - val_acc: 0.8864\n",
"Epoch 13/20\n",
"50000/50000 [==============================] - 7s 135us/sample - loss: 0.2796 - acc: 0.8993 - val_loss: 0.3664 - val_acc: 0.8862\n",
"Epoch 14/20\n",
"50000/50000 [==============================] - 7s 134us/sample - loss: 0.2805 - acc: 0.8993 - val_loss: 0.3920 - val_acc: 0.8822\n",
"Epoch 15/20\n",
"50000/50000 [==============================] - 7s 134us/sample - loss: 0.2739 - acc: 0.9036 - val_loss: 0.3779 - val_acc: 0.8818\n",
"Epoch 16/20\n",
"50000/50000 [==============================] - 7s 134us/sample - loss: 0.2690 - acc: 0.9049 - val_loss: 0.3813 - val_acc: 0.8836\n",
"Epoch 17/20\n",
"50000/50000 [==============================] - 7s 134us/sample - loss: 0.2617 - acc: 0.9077 - val_loss: 0.3980 - val_acc: 0.8845\n",
"Epoch 18/20\n",
"50000/50000 [==============================] - 7s 134us/sample - loss: 0.2607 - acc: 0.9089 - val_loss: 0.4079 - val_acc: 0.8931\n",
"Epoch 19/20\n",
"50000/50000 [==============================] - 7s 134us/sample - loss: 0.2462 - acc: 0.9134 - val_loss: 0.4304 - val_acc: 0.8855\n",
"Epoch 20/20\n",
"50000/50000 [==============================] - 7s 135us/sample - loss: 0.2507 - acc: 0.9115 - val_loss: 0.4088 - val_acc: 0.8911\n"
]
}
],
"source": [
"model_checkpoint = tf.keras.callbacks.ModelCheckpoint(checkpoint_dir+'fashion_mnist{epoch:02d}.h5', period=1,save_weights_only=True)\n",
"history = model.fit(X_train, y_train, epochs=20, verbose=1, callbacks=[model_checkpoint], validation_data=(X_valid, y_valid))"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"uuid": "c8e8b8e9-1dfa-46bb-9a63-c6672d4ba31f"
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.plot(history.history['acc'])\n",
"plt.plot(history.history['val_acc'])\n",
"plt.ylabel('accuracy')\n",
"plt.xlabel('epoch')\n",
"plt.legend(['train', 'validation'], loc='upper left')\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"uuid": "f1756568-6caf-4c3a-a69a-16328aca2dee"
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.plot(history.history['loss'])\n",
"plt.plot(history.history['val_loss'])\n",
"plt.ylabel('loss')\n",
"plt.xlabel('epoch')\n",
"plt.legend(['train', 'validation'], loc='upper left')\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"uuid": "ef3cdc4f-18dd-45b7-ae0a-b4cbc2ea49d6"
},
"outputs": [],
"source": [
"# モデルを前のエポック状態に戻す\n",
"model.load_weights(checkpoint_dir+'fashion_mnist05.h5')"
]
},
{
"cell_type": "markdown",
"metadata": {
"uuid": "2330b2e8-ef4e-42e4-8469-93793ba03c3f"
},
"source": [
"### モデル評価"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"uuid": "37289f6a-aebf-4066-8653-df9f1f89f58e"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"10000/10000 [==============================] - 1s 55us/sample - loss: 0.3492 - acc: 0.8843\n"
]
},
{
"data": {
"text/plain": [
"[0.3492289930522442, 0.8843]"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"model.evaluate(X_test, y_test)"
]
},
{
"cell_type": "markdown",
"metadata": {
"cellType": "markdown",
"uuid": "831865f4-039b-48ad-a82a-ea21a56ae121"
},
"source": [
"### モデル保存"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"uuid": "c9a397be-f653-4266-973d-dc77bc77f137"
},
"outputs": [],
"source": [
"directory = \"./\"\n",
"if not os.path.exists(directory):\n",
" os.makedirs(directory)\n",
"model.save(directory + \"mnist_model.h5\")"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"uuid": "ef022bf0-c897-4772-9178-61fdb424cd89"
},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Tensorflow 2.0",
"language": "python",
"name": "tf2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.8"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment