Skip to content

Instantly share code, notes, and snippets.

@uni-3
Created January 19, 2021 14:09
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 uni-3/c34f127a3fd4b9e190d6db96ccbfe05d to your computer and use it in GitHub Desktop.
Save uni-3/c34f127a3fd4b9e190d6db96ccbfe05d to your computer and use it in GitHub Desktop.
ising_cnn.ipynb
Display the source blob
Display the rendered blob
Raw
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"name": "ising_cnn.ipynb",
"provenance": [],
"collapsed_sections": [],
"mount_file_id": "15N9IfaIbgktH_zmyOnXyCGde28QU3yj2",
"authorship_tag": "ABX9TyNz1guicjhBtwr3wRJQpKZP",
"include_colab_link": true
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
}
},
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "view-in-github",
"colab_type": "text"
},
"source": [
"<a href=\"https://colab.research.google.com/gist/uni-3/c34f127a3fd4b9e190d6db96ccbfe05d/ising_cnn.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "zACKMlZGF-RE"
},
"source": [
"## 学習データ生成"
]
},
{
"cell_type": "code",
"metadata": {
"id": "3VEk-Qr0GE5A"
},
"source": [
"import os\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"import tensorflow as tf\n",
"\n",
"np.random.seed(14)"
],
"execution_count": 1,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "wNulxwxpF9aO"
},
"source": [
"def e_calc(spins, size):\n",
" \"\"\"\n",
" あるスピン配位におけるハミルトニアンの計算。周期境界条件を使う\n",
" Args:\n",
" spins(array) : スピン配位\n",
" size(int) : 二次元正方格子のサイズ\n",
"\n",
" Returns:\n",
" e(float) : エネルギー\n",
" \"\"\"\n",
" e = 0\n",
" for i in range(size):\n",
" for j in range(size):\n",
" # +方向の周期境界条件\n",
" ii = 0 if i + 1 == size else i\n",
" jj = 0 if j + 1 == size else j\n",
" e += spins[i, j] * (spins[ii, j] + spins[i, jj])\n",
"\n",
" return e\n"
],
"execution_count": 2,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "-q4rEJkNJIFD"
},
"source": [
"def ising_sim(T, J=1.0, T_thresh=2.27, steps=20000, snaps=50):\n",
" \"\"\"\n",
" シミュレーション実行\n",
" Args:\n",
" T : 温度\n",
" J : 相互作用定数\n",
" T_thresh : 温度閾値、フラグの取得の判定に使う\n",
" steps : シミュレーション回数\n",
" snaps : snapshotとしてspin配位などを取得する個数\n",
"\n",
" Returns:\n",
" array : 各温度に対するstepのsnapshot、[[[steps t, h, s, d],...], ...]\n",
" \"\"\"\n",
" res = []\n",
" # init スピン配位 0 or 1 を生成、 -1 or 1にする\n",
" s = np.random.randint(0, 2, (size, size)) * -2 + 1\n",
" # 系のエネルギー\n",
" h = -J * e_calc(s, size)\n",
" # 無秩序相フラグ。学習時の正解データに使われる\n",
" d = 0 if T <= T_thresh else 1\n",
"\n",
" for step in range(steps):\n",
" # 適当な点について\n",
" i = np.random.randint(0, size-1)\n",
" j = np.random.randint(0, size-1)\n",
"\n",
" # 変更後の配位\n",
" s_trans = s.copy()\n",
" s_trans[i, j] = -1*s[i, j]\n",
" \n",
" s_adj = s[i-1, j] + s[i+1, j] + s[i, j-1] + s[i, j+1]\n",
" h_diff = -J*(s_trans[i, j] - s[i,j])*s_adj\n",
"\n",
" # メトロポリステスト 状態の更新\n",
" # エネルギーが下がるか\n",
" if h_diff <= 0:\n",
" s = s_trans\n",
" h = h + h_diff\n",
" else:\n",
" # j->iへの遷移確率\n",
" p_j_i = np.exp(-1*h_diff/(T*kb))\n",
"\n",
" # 遷移するか判定\n",
" if np.random.random() < p_j_i:\n",
" s = s_trans\n",
" h = h + h_diff\n",
" \n",
" if step % int(steps/snaps) == 0:\n",
" res.append([step, T, h, s, d])\n",
"\n",
" return res\n"
],
"execution_count": 6,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "XAogpo_QF9cR"
},
"source": [
"# 二次元正方格子の大きさ\n",
"size = 32\n",
"# Tの閾値\n",
"T_thresh = 2.27"
],
"execution_count": 7,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "6TQQMIiZJ8Da",
"outputId": "143e3408-3466-4ca9-a82f-426d36449c70"
},
"source": [
"# ボルツマン定数 1じゃないとうまくいかない\n",
"kb = 1 # 1.38 * 10**-23\n",
"\n",
"# 温度範囲\n",
"T = np.linspace(0., 5., 41)\n",
"\n",
"# イジングモデルの拡張 Edwards-Andersonモデル、磁化の項を追加 -B*sum(s_i)\n",
"#B = 1.0\n",
"\n",
"# 各温度に対するstepのsnapshot、[[[steps t, h, s, d],...], ...] が返ってくる\n",
"%time sims = [ising_sim(t, steps=20000) for t in T]"
],
"execution_count": 8,
"outputs": [
{
"output_type": "stream",
"text": [
"/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:41: RuntimeWarning: divide by zero encountered in double_scalars\n"
],
"name": "stderr"
},
{
"output_type": "stream",
"text": [
"CPU times: user 14 s, sys: 68.5 ms, total: 14 s\n",
"Wall time: 14.1 s\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "YnDAPzPlw6nF",
"outputId": "cf9d2b7a-13c6-4ba4-f1d3-2c681ceac720"
},
"source": [
"# 各step Tの範囲について step T H s d\n",
"sims = np.array(sims)\n",
"sims.shape"
],
"execution_count": 9,
"outputs": [
{
"output_type": "stream",
"text": [
"/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:2: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray\n",
" \n"
],
"name": "stderr"
},
{
"output_type": "execute_result",
"data": {
"text/plain": [
"(41, 50, 5)"
]
},
"metadata": {
"tags": []
},
"execution_count": 9
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "uiVTabzTLYX_"
},
"source": [
"# np save\n",
"path = \"drive/MyDrive/Colab Notebooks/data/ising\"\n",
"np.save(os.path.join(path, \"sims.npy\"), sims)\n"
],
"execution_count": 10,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 281
},
"id": "dlWi24DDw9Zk",
"outputId": "a11f86aa-aac0-4989-a822-7c263d5f1046"
},
"source": [
"# 最終stepの温度とエネルギー\n",
"plt.axvline(x=2.27, ymin=0, ymax=1, linestyle=\"--\", color=\"gray\", label=\"$T_c=2.27$\")\n",
"plt.xlabel(\"$T$\")\n",
"plt.ylabel(\"$H$\")\n",
"plt.plot(sims[:, 49][:, 1], sims[:, 49][:, 2])\n",
"plt.show()"
],
"execution_count": 25,
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "9weEtIbzR2yF"
},
"source": [
"def plot_spin(s, t):\n",
" plt.imshow(s, cmap='YlOrRd')\n",
" plt.colorbar(ticks=[-1, 1], orientation='vertical')\n",
" plt.title(f\"T={t}\")\n",
" plt.show()\n"
],
"execution_count": 12,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 809
},
"id": "bsNjeHorzSCU",
"outputId": "93e7b833-e872-4190-dffe-8a6dbb0984c6"
},
"source": [
"# 温度ごとの最終stepでのスピン配位\n",
"# 高温\n",
"plot_spin(sims[:, 49][40][3], sims[:, 49][40][1])\n",
"# ちょっと高い\n",
"plot_spin(sims[:, 49][20][3], sims[:, 49][20][1])\n",
"# 閾値以下\n",
"plot_spin(sims[:, 49][0][3], sims[:, 49][0][1])\n"
],
"execution_count": 13,
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 2 Axes>"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 2 Axes>"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 2 Axes>"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "lHvXCfqoDaZM"
},
"source": [
"### dataset"
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "kv0siXI86IKK",
"outputId": "e780f491-d4ff-44df-dfc8-bf386b50e0f6"
},
"source": [
"import os\n",
"import numpy as np\n",
"# np load\n",
"# あるT stepsについて\n",
"# [[[steps0, T1, H, s, d], []],.., [[steps1, T2, H, s, d]] ]\n",
"path = \"drive/MyDrive/Colab Notebooks/data/ising\"\n",
"\n",
"sim_np = np.load(os.path.join(path, \"sims.npy\"), allow_pickle=True)\n",
"sim_np.shape"
],
"execution_count": 14,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"(41, 50, 5)"
]
},
"metadata": {
"tags": []
},
"execution_count": 14
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "G6HphBiSEAAH"
},
"source": [
"t = []\n",
"data = []\n",
"labels = []\n",
"\n",
"for sim_t in sim_np:\n",
" for sim_step in sim_t:\n",
" t.append(sim_step[1])\n",
" data.append(sim_step[3])\n",
" labels.append(sim_step[4])\n",
"\n",
"t = np.array(t)\n",
"data = np.array(data)\n",
"labels = np.array(labels)\n"
],
"execution_count": 15,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "EPEsFLxeHPyR",
"outputId": "64ef5311-8fb2-44e6-9b79-f9c48dd92192"
},
"source": [
"t.shape, data.shape, labels.shape"
],
"execution_count": 16,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"((2050,), (2050, 32, 32), (2050,))"
]
},
"metadata": {
"tags": []
},
"execution_count": 16
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "2iA6sRWqlp3L",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "a356fefb-019b-4d22-9db8-b8c9fb834e88"
},
"source": [
"# 学習、評価データ\n",
"# 偶数\n",
"train_data = data[::2]\n",
"train_labels = labels[::2]\n",
"train_t = t[::2]\n",
"# 奇数\n",
"val_data = data[1::2]\n",
"val_labels = labels[1::2]\n",
"val_t = t[1::2]\n",
"\n",
"train_data.shape, val_data.shape, train_labels.shape"
],
"execution_count": 17,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"((1025, 32, 32), (1025, 32, 32), (1025,))"
]
},
"metadata": {
"tags": []
},
"execution_count": 17
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "mC3RTj688kU9"
},
"source": [
"### 学習"
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "faX7Vy0K_EQ_",
"outputId": "6d5e698f-df52-49fd-c7ef-a78c8051cec1"
},
"source": [
"# 4次元配列にする必要がある\n",
"train_data.reshape(train_data.shape[0], train_data.shape[1], train_data.shape[2], 1).shape, train_labels.shape\n"
],
"execution_count": 18,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"((1025, 32, 32, 1), (1025,))"
]
},
"metadata": {
"tags": []
},
"execution_count": 18
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "MNqbbeat7hHv"
},
"source": [
"import tensorflow as tf\n"
],
"execution_count": 19,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "ASPUAxxa64e7"
},
"source": [
"tf.random.set_seed(14)\n",
"model = tf.keras.models.Sequential()\n",
"\n",
"model.add(tf.keras.layers.Conv2D(32, 3, input_shape=(32, 32, 1)))\n",
"model.add(tf.keras.layers.Activation('relu'))\n",
"model.add(tf.keras.layers.MaxPool2D(pool_size=(2,2)))\n",
"model.add(tf.keras.layers.Flatten())\n",
"model.add(tf.keras.layers.Dense(512))\n",
"model.add(tf.keras.layers.Activation('relu'))\n",
"model.add(tf.keras.layers.Dropout(0.2))\n",
"model.add(tf.keras.layers.Dense(2, activation='softmax'))\n",
"\n"
],
"execution_count": 20,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "lC_2ndM87B2V"
},
"source": [
"model.compile(optimizer='adam', \n",
" #loss='categorical_crossentropy', # for onehot\n",
" loss='sparse_categorical_crossentropy', # for 1dim [0, 1, 1,...]\n",
" metrics=['accuracy']\n",
" )"
],
"execution_count": 21,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "pG2dCjpb7FVS",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "79e533dd-6ee6-4de6-e72c-da905e8879ef"
},
"source": [
"model.fit(train_data.reshape(train_data.shape[0], train_data.shape[1], train_data.shape[2], 1)\n",
", train_labels, epochs=50)\n"
],
"execution_count": 22,
"outputs": [
{
"output_type": "stream",
"text": [
"Epoch 1/50\n",
"33/33 [==============================] - 2s 47ms/step - loss: 1.2248 - accuracy: 0.6846\n",
"Epoch 2/50\n",
"33/33 [==============================] - 1s 45ms/step - loss: 0.2169 - accuracy: 0.9343\n",
"Epoch 3/50\n",
"33/33 [==============================] - 1s 44ms/step - loss: 0.1260 - accuracy: 0.9623\n",
"Epoch 4/50\n",
"33/33 [==============================] - 2s 46ms/step - loss: 0.0870 - accuracy: 0.9753\n",
"Epoch 5/50\n",
"33/33 [==============================] - 1s 43ms/step - loss: 0.0842 - accuracy: 0.9723\n",
"Epoch 6/50\n",
"33/33 [==============================] - 1s 45ms/step - loss: 0.1532 - accuracy: 0.9441\n",
"Epoch 7/50\n",
"33/33 [==============================] - 1s 44ms/step - loss: 0.0955 - accuracy: 0.9628\n",
"Epoch 8/50\n",
"33/33 [==============================] - 1s 44ms/step - loss: 0.0233 - accuracy: 0.9957\n",
"Epoch 9/50\n",
"33/33 [==============================] - 1s 44ms/step - loss: 0.0126 - accuracy: 0.9998\n",
"Epoch 10/50\n",
"33/33 [==============================] - 1s 43ms/step - loss: 0.0079 - accuracy: 0.9991\n",
"Epoch 11/50\n",
"33/33 [==============================] - 1s 43ms/step - loss: 0.0057 - accuracy: 1.0000\n",
"Epoch 12/50\n",
"33/33 [==============================] - 1s 44ms/step - loss: 0.0038 - accuracy: 1.0000\n",
"Epoch 13/50\n",
"33/33 [==============================] - 1s 44ms/step - loss: 0.0048 - accuracy: 1.0000\n",
"Epoch 14/50\n",
"33/33 [==============================] - 1s 43ms/step - loss: 0.0036 - accuracy: 1.0000\n",
"Epoch 15/50\n",
"33/33 [==============================] - 1s 44ms/step - loss: 0.0026 - accuracy: 1.0000\n",
"Epoch 16/50\n",
"33/33 [==============================] - 1s 42ms/step - loss: 0.0015 - accuracy: 1.0000\n",
"Epoch 17/50\n",
"33/33 [==============================] - 1s 43ms/step - loss: 0.0016 - accuracy: 1.0000\n",
"Epoch 18/50\n",
"33/33 [==============================] - 1s 44ms/step - loss: 0.0019 - accuracy: 1.0000\n",
"Epoch 19/50\n",
"33/33 [==============================] - 1s 43ms/step - loss: 0.0013 - accuracy: 1.0000\n",
"Epoch 20/50\n",
"33/33 [==============================] - 1s 44ms/step - loss: 0.0015 - accuracy: 1.0000\n",
"Epoch 21/50\n",
"33/33 [==============================] - 1s 44ms/step - loss: 0.0011 - accuracy: 1.0000\n",
"Epoch 22/50\n",
"33/33 [==============================] - 1s 44ms/step - loss: 9.5573e-04 - accuracy: 1.0000\n",
"Epoch 23/50\n",
"33/33 [==============================] - 1s 44ms/step - loss: 5.9069e-04 - accuracy: 1.0000\n",
"Epoch 24/50\n",
"33/33 [==============================] - 1s 43ms/step - loss: 6.7907e-04 - accuracy: 1.0000\n",
"Epoch 25/50\n",
"33/33 [==============================] - 1s 44ms/step - loss: 5.9639e-04 - accuracy: 1.0000\n",
"Epoch 26/50\n",
"33/33 [==============================] - 1s 43ms/step - loss: 5.4333e-04 - accuracy: 1.0000\n",
"Epoch 27/50\n",
"33/33 [==============================] - 1s 44ms/step - loss: 7.3722e-04 - accuracy: 1.0000\n",
"Epoch 28/50\n",
"33/33 [==============================] - 1s 44ms/step - loss: 4.8315e-04 - accuracy: 1.0000\n",
"Epoch 29/50\n",
"33/33 [==============================] - 1s 43ms/step - loss: 4.7125e-04 - accuracy: 1.0000\n",
"Epoch 30/50\n",
"33/33 [==============================] - 1s 45ms/step - loss: 4.9303e-04 - accuracy: 1.0000\n",
"Epoch 31/50\n",
"33/33 [==============================] - 1s 43ms/step - loss: 3.2690e-04 - accuracy: 1.0000\n",
"Epoch 32/50\n",
"33/33 [==============================] - 1s 43ms/step - loss: 9.1963e-04 - accuracy: 1.0000\n",
"Epoch 33/50\n",
"33/33 [==============================] - 1s 44ms/step - loss: 3.7872e-04 - accuracy: 1.0000\n",
"Epoch 34/50\n",
"33/33 [==============================] - 1s 43ms/step - loss: 4.5470e-04 - accuracy: 1.0000\n",
"Epoch 35/50\n",
"33/33 [==============================] - 1s 45ms/step - loss: 4.0846e-04 - accuracy: 1.0000\n",
"Epoch 36/50\n",
"33/33 [==============================] - 1s 43ms/step - loss: 2.4900e-04 - accuracy: 1.0000\n",
"Epoch 37/50\n",
"33/33 [==============================] - 1s 44ms/step - loss: 1.8388e-04 - accuracy: 1.0000\n",
"Epoch 38/50\n",
"33/33 [==============================] - 1s 42ms/step - loss: 2.2290e-04 - accuracy: 1.0000\n",
"Epoch 39/50\n",
"33/33 [==============================] - 1s 44ms/step - loss: 1.9954e-04 - accuracy: 1.0000\n",
"Epoch 40/50\n",
"33/33 [==============================] - 1s 44ms/step - loss: 1.4136e-04 - accuracy: 1.0000\n",
"Epoch 41/50\n",
"33/33 [==============================] - 1s 44ms/step - loss: 1.9248e-04 - accuracy: 1.0000\n",
"Epoch 42/50\n",
"33/33 [==============================] - 1s 45ms/step - loss: 1.3301e-04 - accuracy: 1.0000\n",
"Epoch 43/50\n",
"33/33 [==============================] - 1s 43ms/step - loss: 1.4390e-04 - accuracy: 1.0000\n",
"Epoch 44/50\n",
"33/33 [==============================] - 1s 45ms/step - loss: 1.4932e-04 - accuracy: 1.0000\n",
"Epoch 45/50\n",
"33/33 [==============================] - 1s 44ms/step - loss: 1.0272e-04 - accuracy: 1.0000\n",
"Epoch 46/50\n",
"33/33 [==============================] - 1s 44ms/step - loss: 9.4546e-05 - accuracy: 1.0000\n",
"Epoch 47/50\n",
"33/33 [==============================] - 1s 44ms/step - loss: 7.8335e-05 - accuracy: 1.0000\n",
"Epoch 48/50\n",
"33/33 [==============================] - 1s 44ms/step - loss: 9.0572e-05 - accuracy: 1.0000\n",
"Epoch 49/50\n",
"33/33 [==============================] - 1s 43ms/step - loss: 1.0638e-04 - accuracy: 1.0000\n",
"Epoch 50/50\n",
"33/33 [==============================] - 1s 43ms/step - loss: 7.3474e-05 - accuracy: 1.0000\n"
],
"name": "stdout"
},
{
"output_type": "execute_result",
"data": {
"text/plain": [
"<tensorflow.python.keras.callbacks.History at 0x7f5664226550>"
]
},
"metadata": {
"tags": []
},
"execution_count": 22
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "enZmPgvWdM41"
},
"source": [
"# save load\n",
"#model.save(os.path.join(path, 'cnn_model'))\n",
"#model = tf.keras.models.load_model(os.path.join(path, 'cnn_model'))\n"
],
"execution_count": 23,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 297
},
"id": "rEB7lB2md_wz",
"outputId": "1f7da15c-5bfc-4636-8daa-7c8e1f54a0c9"
},
"source": [
"# 各最終stepにおけるクラスの所属確率\n",
"step_num = 49\n",
"preds_proba = model.predict(val_data.reshape(val_data.shape[0], val_data.shape[1], val_data.shape[2], 1))\n",
"\n",
"t = val_t[::step_num]\n",
"# 0/1\n",
"p0 = preds_proba[:, 0][::step_num]\n",
"p1 = preds_proba[:, 1][::step_num]\n",
"\n",
"plt.axvline(x=2.27, ymin=0, ymax=1, linestyle=\"--\", color=\"gray\", label=\"$T_c=2.27$\")\n",
"plt.plot(t, p0, label=\"$T<T_c$\", marker=\".\", color=\"b\")\n",
"plt.plot(t, p1, label=\"$T>T_c$\", marker=\".\", color=\"r\")\n",
"plt.legend()\n",
"plt.xlabel(\"$T$\")\n",
"plt.ylabel(\"predict proba\")\n",
"plt.title(\"temp. vs predict proba\")\n",
"plt.show()\n"
],
"execution_count": 24,
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "VqwPnEIuKmfo"
},
"source": [
""
],
"execution_count": 24,
"outputs": []
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment