mirror of
https://github.com/ml-explore/mlx-examples.git
synced 2025-06-24 17:31:18 +08:00
518 lines
102 KiB
Plaintext
518 lines
102 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"# Import Library"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 46,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"import mnist"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 47,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"import mlx.core as mx\n",
|
|
"import mlx.nn as nn\n",
|
|
"import mlx.optimizers as optim\n",
|
|
"\n",
|
|
"from tqdm import tqdm\n",
|
|
"import numpy as np\n",
|
|
"import matplotlib.pyplot as plt"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"# GAN Architecture"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Generator 👨🏻🎨"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 48,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"def GenBlock(in_dim:int,out_dim:int):\n",
|
|
" \n",
|
|
" return nn.Sequential(\n",
|
|
" nn.Linear(in_dim,out_dim),\n",
|
|
" nn.BatchNorm(out_dim),\n",
|
|
" nn.ReLU()\n",
|
|
" )"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 49,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"class Generator(nn.Module):\n",
|
|
"\n",
|
|
" def __init__(self, z_dim:int = 10, im_dim:int = 784, hidden_dim: int =128):\n",
|
|
" super(Generator, self).__init__()\n",
|
|
" # Build the neural network\n",
|
|
" self.gen = nn.Sequential(\n",
|
|
" GenBlock(z_dim, hidden_dim),\n",
|
|
" GenBlock(hidden_dim, hidden_dim * 2),\n",
|
|
" GenBlock(hidden_dim * 2, hidden_dim * 4),\n",
|
|
" GenBlock(hidden_dim * 4, hidden_dim * 8),\n",
|
|
"\n",
|
|
"\n",
|
|
" nn.Linear(hidden_dim * 8,im_dim),\n",
|
|
" nn.Sigmoid()\n",
|
|
" )\n",
|
|
" \n",
|
|
" def __call__(self, noise):\n",
|
|
"\n",
|
|
" return self.gen(noise)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 50,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"Generator(\n",
|
|
" (gen): Sequential(\n",
|
|
" (layers.0): Sequential(\n",
|
|
" (layers.0): Linear(input_dims=100, output_dims=128, bias=True)\n",
|
|
" (layers.1): BatchNorm(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
|
|
" (layers.2): ReLU()\n",
|
|
" )\n",
|
|
" (layers.1): Sequential(\n",
|
|
" (layers.0): Linear(input_dims=128, output_dims=256, bias=True)\n",
|
|
" (layers.1): BatchNorm(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
|
|
" (layers.2): ReLU()\n",
|
|
" )\n",
|
|
" (layers.2): Sequential(\n",
|
|
" (layers.0): Linear(input_dims=256, output_dims=512, bias=True)\n",
|
|
" (layers.1): BatchNorm(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
|
|
" (layers.2): ReLU()\n",
|
|
" )\n",
|
|
" (layers.3): Sequential(\n",
|
|
" (layers.0): Linear(input_dims=512, output_dims=1024, bias=True)\n",
|
|
" (layers.1): BatchNorm(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
|
|
" (layers.2): ReLU()\n",
|
|
" )\n",
|
|
" (layers.4): Linear(input_dims=1024, output_dims=784, bias=True)\n",
|
|
" (layers.5): Sigmoid()\n",
|
|
" )\n",
|
|
")"
|
|
]
|
|
},
|
|
"execution_count": 50,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"gen = Generator(100)\n",
|
|
"gen"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 51,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"def get_noise(n_samples, z_dim):\n",
|
|
" return np.random.randn(n_samples,z_dim)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Discriminator 🕵🏻♂️"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 52,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"def DisBlock(in_dim:int,out_dim:int):\n",
|
|
" return nn.Sequential(\n",
|
|
" nn.Linear(in_dim,out_dim),\n",
|
|
" nn.LeakyReLU(negative_slope=0.2)\n",
|
|
" )"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 53,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"class Discriminator(nn.Module):\n",
|
|
"\n",
|
|
" def __init__(self,im_dim:int = 784, hidden_dim:int = 128):\n",
|
|
" super(Discriminator, self).__init__()\n",
|
|
"\n",
|
|
" self.disc = nn.Sequential(\n",
|
|
" DisBlock(im_dim, hidden_dim * 4),\n",
|
|
" DisBlock(hidden_dim * 4, hidden_dim * 2),\n",
|
|
" DisBlock(hidden_dim * 2, hidden_dim),\n",
|
|
"\n",
|
|
" nn.Linear(hidden_dim,1),\n",
|
|
" )\n",
|
|
" \n",
|
|
" def __call__(self, noise):\n",
|
|
"\n",
|
|
" return self.disc(noise)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 54,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"Discriminator(\n",
|
|
" (disc): Sequential(\n",
|
|
" (layers.0): Sequential(\n",
|
|
" (layers.0): Linear(input_dims=784, output_dims=512, bias=True)\n",
|
|
" (layers.1): LeakyReLU()\n",
|
|
" )\n",
|
|
" (layers.1): Sequential(\n",
|
|
" (layers.0): Linear(input_dims=512, output_dims=256, bias=True)\n",
|
|
" (layers.1): LeakyReLU()\n",
|
|
" )\n",
|
|
" (layers.2): Sequential(\n",
|
|
" (layers.0): Linear(input_dims=256, output_dims=128, bias=True)\n",
|
|
" (layers.1): LeakyReLU()\n",
|
|
" )\n",
|
|
" (layers.3): Linear(input_dims=128, output_dims=1, bias=True)\n",
|
|
" )\n",
|
|
")"
|
|
]
|
|
},
|
|
"execution_count": 54,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"disc = Discriminator()\n",
|
|
"disc"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"# Model Training 🏋🏻♂️"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 55,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"# Set your parameters\n",
|
|
"criterion = nn.losses.binary_cross_entropy\n",
|
|
"n_epochs = 200\n",
|
|
"z_dim = 64\n",
|
|
"display_step = 500\n",
|
|
"batch_size = 128\n",
|
|
"lr = 0.00001"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 56,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"gen = Generator(z_dim)\n",
|
|
"mx.eval(gen.parameters())\n",
|
|
"gen_opt = optim.Adam(learning_rate=lr)\n",
|
|
"\n",
|
|
"disc = Discriminator()\n",
|
|
"mx.eval(disc.parameters())\n",
|
|
"disc_opt = optim.Adam(learning_rate=lr)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Losses"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 57,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"def disc_loss(gen, disc, real, num_images, z_dim):\n",
|
|
" noise = mx.array(get_noise(num_images, z_dim))\n",
|
|
" fake_images = gen(noise)\n",
|
|
" \n",
|
|
" fake_disc = disc(fake_images)\n",
|
|
" \n",
|
|
" fake_labels = mx.zeros((fake_images.shape[0],1))\n",
|
|
" fake_loss = nn.losses.binary_cross_entropy(fake_disc,fake_labels,with_logits=True)\n",
|
|
" \n",
|
|
" real_disc = disc(real)\n",
|
|
" real_labels = mx.ones((real.shape[0],1))\n",
|
|
"\n",
|
|
" real_loss = nn.losses.binary_cross_entropy(real_disc,real_labels,with_logits=True)\n",
|
|
"\n",
|
|
" disc_loss = (fake_loss + real_loss) / 2\n",
|
|
"\n",
|
|
" return disc_loss"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 58,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"def gen_loss(gen, disc, num_images, z_dim):\n",
|
|
"\n",
|
|
" noise = mx.array(get_noise(num_images, z_dim))\n",
|
|
" fake_images = gen(noise)\n",
|
|
" fake_disc = disc(fake_images)\n",
|
|
"\n",
|
|
" fake_labels = mx.ones((fake_images.shape[0],1))\n",
|
|
" \n",
|
|
" gen_loss = nn.losses.binary_cross_entropy(fake_disc,fake_labels,with_logits=True)\n",
|
|
"\n",
|
|
" return gen_loss"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 59,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"train_images, _, test_images, _ = map(\n",
|
|
" mx.array, getattr(mnist, 'mnist')()\n",
|
|
")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 133,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"60000"
|
|
]
|
|
},
|
|
"execution_count": 133,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"len(train_images)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 60,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"def batch_iterate(batch_size: int, ipt: list):\n",
|
|
" perm = np.random.permutation(len(ipt))\n",
|
|
" for s in range(0, len(ipt), batch_size):\n",
|
|
" ids = perm[s : s + batch_size]\n",
|
|
" yield [ipt[i] for i in ids]"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"### show batch of images"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 128,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"image/png": "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",
|
|
"text/plain": [
|
|
"<Figure size 500x500 with 25 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"for X in batch_iterate(16, train_images):\n",
|
|
" fig,axes = plt.subplots(5, 5, figsize=(5, 5))\n",
|
|
"\n",
|
|
" for i, ax in enumerate(axes.flat):\n",
|
|
" img = mx.array(X[i]).reshape(28,28)\n",
|
|
" ax.imshow(img,cmap='gray')\n",
|
|
" ax.axis('off')\n",
|
|
" break"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 147,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"def show_images(imgs:list[int],num_imgs:int = 25):\n",
|
|
" if (imgs.shape[0] > 0): \n",
|
|
" fig,axes = plt.subplots(5, 5, figsize=(5, 5))\n",
|
|
" \n",
|
|
" for i, ax in enumerate(axes.flat):\n",
|
|
" img = mx.array(imgs[0]).reshape(28,28)\n",
|
|
" ax.imshow(img,cmap='gray')\n",
|
|
" ax.axis('off')\n",
|
|
" plt.show()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 148,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"z_dim = 64\n",
|
|
"gen = Generator(z_dim)\n",
|
|
"mx.eval(gen.parameters())\n",
|
|
"gen_opt = optim.Adam(learning_rate=lr)\n",
|
|
"\n",
|
|
"disc = Discriminator()\n",
|
|
"mx.eval(disc.parameters())\n",
|
|
"disc_opt = optim.Adam(learning_rate=lr)\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 151,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
" 7%|▋ | 4/60 [08:34<2:00:03, 128.64s/it]\n"
|
|
]
|
|
},
|
|
{
|
|
"ename": "KeyboardInterrupt",
|
|
"evalue": "",
|
|
"output_type": "error",
|
|
"traceback": [
|
|
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
|
|
"\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)",
|
|
"Cell \u001b[0;32mIn[151], line 24\u001b[0m\n\u001b[1;32m 21\u001b[0m \u001b[38;5;66;03m# Update gradients\u001b[39;00m\n\u001b[1;32m 22\u001b[0m mx\u001b[38;5;241m.\u001b[39meval(disc\u001b[38;5;241m.\u001b[39mparameters(), disc_opt\u001b[38;5;241m.\u001b[39mstate)\n\u001b[0;32m---> 24\u001b[0m G_loss,G_grads \u001b[38;5;241m=\u001b[39m \u001b[43mG_loss_grad\u001b[49m\u001b[43m(\u001b[49m\u001b[43mgen\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdisc\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcur_batch_size\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mz_dim\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 26\u001b[0m \u001b[38;5;66;03m# Update optimizer\u001b[39;00m\n\u001b[1;32m 27\u001b[0m gen_opt\u001b[38;5;241m.\u001b[39mupdate(gen, G_grads)\n",
|
|
"File \u001b[0;32m~/miniforge3/lib/python3.10/site-packages/mlx/nn/utils.py:34\u001b[0m, in \u001b[0;36mvalue_and_grad.<locals>.wrapped_value_grad_fn\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 32\u001b[0m \u001b[38;5;129m@wraps\u001b[39m(fn)\n\u001b[1;32m 33\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mwrapped_value_grad_fn\u001b[39m(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[0;32m---> 34\u001b[0m value, grad \u001b[38;5;241m=\u001b[39m value_grad_fn(\u001b[43mmodel\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtrainable_parameters\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m, \u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[1;32m 35\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m value, grad\n",
|
|
"File \u001b[0;32m~/miniforge3/lib/python3.10/site-packages/mlx/nn/layers/base.py:310\u001b[0m, in \u001b[0;36mModule.trainable_parameters\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 307\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mtrainable_parameters\u001b[39m(\u001b[38;5;28mself\u001b[39m):\n\u001b[1;32m 308\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"Recursively return all the non frozen :class:`mlx.core.array` members of\u001b[39;00m\n\u001b[1;32m 309\u001b[0m \u001b[38;5;124;03m this Module as a dict of dicts and lists.\"\"\"\u001b[39;00m\n\u001b[0;32m--> 310\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfilter_and_map\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtrainable_parameter_filter\u001b[49m\u001b[43m)\u001b[49m\n",
|
|
"File \u001b[0;32m~/miniforge3/lib/python3.10/site-packages/mlx/nn/layers/base.py:298\u001b[0m, in \u001b[0;36mModule.filter_and_map\u001b[0;34m(self, filter_fn, map_fn, is_leaf_fn)\u001b[0m\n\u001b[1;32m 292\u001b[0m map_fn \u001b[38;5;241m=\u001b[39m map_fn \u001b[38;5;129;01mor\u001b[39;00m (\u001b[38;5;28;01mlambda\u001b[39;00m x: x)\n\u001b[1;32m 293\u001b[0m is_leaf_fn \u001b[38;5;241m=\u001b[39m is_leaf_fn \u001b[38;5;129;01mor\u001b[39;00m (\n\u001b[1;32m 294\u001b[0m \u001b[38;5;28;01mlambda\u001b[39;00m m, k, v: \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(v, (Module, \u001b[38;5;28mdict\u001b[39m, \u001b[38;5;28mlist\u001b[39m))\n\u001b[1;32m 295\u001b[0m )\n\u001b[1;32m 296\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m {\n\u001b[1;32m 297\u001b[0m k: _unwrap(\u001b[38;5;28mself\u001b[39m, k, v, filter_fn, map_fn, is_leaf_fn)\n\u001b[0;32m--> 298\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m k, v \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mitems\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 299\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m filter_fn(\u001b[38;5;28mself\u001b[39m, k, v)\n\u001b[1;32m 300\u001b[0m }\n",
|
|
"\u001b[0;31mKeyboardInterrupt\u001b[0m: "
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"# Train the GAN for only 1000 images\n",
|
|
"batch_size = 128\n",
|
|
"display_step = 15\n",
|
|
"cur_step = 0\n",
|
|
"mean_generator_loss = 0\n",
|
|
"mean_discriminator_loss = 0\n",
|
|
"\n",
|
|
"D_loss_grad = nn.value_and_grad(disc, disc_loss)\n",
|
|
"G_loss_grad = nn.value_and_grad(gen, gen_loss)\n",
|
|
"\n",
|
|
"\n",
|
|
"for epoch in tqdm(range(60)):\n",
|
|
"\n",
|
|
" for real in batch_iterate(batch_size, train_images[:2048]):\n",
|
|
" \n",
|
|
" D_loss,D_grads = D_loss_grad(gen, disc, real, cur_batch_size, z_dim)\n",
|
|
"\n",
|
|
" # Update optimizer\n",
|
|
" disc_opt.update(disc, D_grads)\n",
|
|
" \n",
|
|
" # Update gradients\n",
|
|
" mx.eval(disc.parameters(), disc_opt.state)\n",
|
|
"\n",
|
|
" G_loss,G_grads = G_loss_grad(gen, disc, cur_batch_size, z_dim)\n",
|
|
" \n",
|
|
" # Update optimizer\n",
|
|
" gen_opt.update(gen, G_grads)\n",
|
|
" \n",
|
|
" # Update gradients\n",
|
|
" mx.eval(gen.parameters(), gen_opt.state)\n",
|
|
" \n",
|
|
" \n",
|
|
" if cur_step % display_step == 0 and cur_step > 0 and batch_size:\n",
|
|
" print(f\"Step {epoch}: Generator loss: {G_loss}, discriminator loss: {D_loss}\")\n",
|
|
" fake_noise = mx.array(get_noise(batch_size, z_dim))\n",
|
|
" fake = gen(fake_noise)\n",
|
|
" show_images(fake)\n",
|
|
" show_images(real)\n",
|
|
" cur_step += 1"
|
|
]
|
|
}
|
|
],
|
|
"metadata": {
|
|
"kernelspec": {
|
|
"display_name": "base",
|
|
"language": "python",
|
|
"name": "python3"
|
|
},
|
|
"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.10.10"
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 2
|
|
}
|