Skip to content

Instantly share code, notes, and snippets.

@ftnext
Last active June 3, 2018 06:55
Show Gist options
  • Save ftnext/cd763fc4cec9f44373ad330443cad5aa to your computer and use it in GitHub Desktop.
Save ftnext/cd763fc4cec9f44373ad330443cad5aa to your computer and use it in GitHub Desktop.
Chainer v4 ビギナー向けチュートリアル https://qiita.com/mitmul/items/1e35fba085eb07a92560 をData Science Virtual Machine - Windows 2016 NC6で実施した。MNISTの5.学習の途中で時間切れになった。学習結果が2イテレーション目から出力されているのは、1イテレーション回したあとエラーで落ちたため。こちらのレポートも参照:http://nikkie-ftnext.hatenablog.com/entry/2018/06/02/232402
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"Python 3.6.3 :: Anaconda custom (64-bit)\n"
]
}
],
"source": [
" !python -V"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Chainer: 4.1.0\n",
"NumPy: 1.11.3\n",
"CuPy:\n",
" CuPy Version : 5.0.0b1\n",
" CUDA Root : C:\\Program Files\\NVIDIA GPU Computing Toolkit\\CUDA\\v9.0\n",
" CUDA Build Version : 9000\n",
" CUDA Driver Version : 9000\n",
" CUDA Runtime Version : 9000\n",
" cuDNN Build Version : 7103\n",
" cuDNN Version : 7103\n",
" NCCL Build Version : None\n"
]
}
],
"source": [
"import chainer\n",
"chainer.print_runtime_info()"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
" from chainer.datasets import mnist"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"Downloading from http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz...\n",
"Downloading from http://yann.lecun.com/exdb/mnist/train-labels-idx1-ubyte.gz...\n",
"Downloading from http://yann.lecun.com/exdb/mnist/t10k-images-idx3-ubyte.gz...\n",
"Downloading from http://yann.lecun.com/exdb/mnist/t10k-labels-idx1-ubyte.gz...\n"
]
}
],
"source": [
"train_val, test = mnist.get_mnist(withlabel=True, ndim=1)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"%matplotlib inline"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
" import matplotlib.pyplot as plt"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAP8AAAD8CAYAAAC4nHJkAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4xLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvAOZPmwAABrBJREFUeJzt3blrFX0fxuH3vIqFooY0CoKIFhEV\nSaOCCCISRNAiaiNYKVYGrNLYWUQElyJokUqwEUuXRgu3QggElyZgr6TTuC/EnOcvON/oyWru62rv\njDOFH6b4ObHRbDb/B+T5/3w/ADA/xA+hxA+hxA+hxA+hxA+hxA+hxA+hxA+hls7lzRqNhn9OCLOs\n2Ww2/uTnvPkhlPghlPghlPghlPghlPghlPghlPghlPghlPghlPghlPghlPghlPghlPghlPghlPgh\nlPghlPghlPghlPghlPghlPghlPghlPghlPghlPghlPghlPghlPghlPghlPghlPghlPghlPghlPgh\nlPghlPgh1NL5fgBm15IlS8p99erVs3r/vr6+ltvy5cvLa7u6usr9zJkz5X758uWW2/Hjx8trf/z4\nUe4XL14s9/Pnz5f7QuDND6HED6HED6HED6HED6HED6HED6Gc88+B9evXl/uyZcvKfffu3eW+Z8+e\nlltHR0d57dGjR8t9Pr19+7bcBwcHy723t7fl9vnz5/La169fl/vTp0/L/V/gzQ+hxA+hxA+hxA+h\nxA+hxA+hGs1mc+5u1mjM3c3mUHd3d7k/evSo3Gf7s9qFanJystxPnjxZ7l++fGn73mNjY+X+4cOH\ncn/z5k3b955tzWaz8Sc/580PocQPocQPocQPocQPocQPocQPoZzzz4DOzs5yHx4eLveNGzfO5OPM\nqKmefXx8vNz37dvXcvv161d5beq/f5gu5/xASfwQSvwQSvwQSvwQSvwQSvwQyq/ungHv378v9/7+\n/nI/dOhQub98+bLcp/oV1pVXr16Ve09PT7l//fq13Ldu3dpyO3v2bHkts8ubH0KJH0KJH0KJH0KJ\nH0KJH0KJH0L5nn8BWLVqVblP9d9JDw0NtdxOnTpVXnvixIlyv3XrVrmz8PieHyiJH0KJH0KJH0KJ\nH0KJH0KJH0L5nn8B+PTp07Su//jxY9vXnj59utxv375d7pOTk23fm/nlzQ+hxA+hxA+hxA+hxA+h\nxA+hfNK7CKxYsaLldu/evfLavXv3lvvBgwfL/eHDh+XO3PNJL1ASP4QSP4QSP4QSP4QSP4QSP4Ry\nzr/Ibdq0qdxfvHhR7uPj4+X++PHjch8ZGWm5Xb9+vbx2Lv9uLibO+YGS+CGU+CGU+CGU+CGU+CGU\n+CGUc/5wvb295X7jxo1yX7lyZdv3PnfuXLnfvHmz3MfGxtq+92LmnB8oiR9CiR9CiR9CiR9CiR9C\niR9COeentG3btnK/evVque/fv7/tew8NDZX7wMBAub97967te//LnPMDJfFDKPFDKPFDKPFDKPFD\nKPFDKOf8TEtHR0e5Hz58uOU21e8KaDTq4+pHjx6Ve09PT7kvVs75gZL4IZT4IZT4IZT4IZT4IZSj\nPubNz58/y33p0qXlPjExUe4HDhxouT158qS89l/mqA8oiR9CiR9CiR9CiR9CiR9CiR9C1QepxNu+\nfXu5Hzt2rNx37NjRcpvqHH8qo6Oj5f7s2bNp/fmLnTc/hBI/hBI/hBI/hBI/hBI/hBI/hHLOv8h1\ndXWVe19fX7kfOXKk3NeuXfvXz/Snfv/+Xe5jY2PlPjk5OZOPs+h480Mo8UMo8UMo8UMo8UMo8UMo\n8UMo5/z/gKnO0o8fP95ym+ocf8OGDe080owYGRkp94GBgXK/e/fuTD5OHG9+CCV+CCV+CCV+CCV+\nCCV+COWobw6sWbOm3Lds2VLu165dK/fNmzf/9TPNlOHh4XK/dOlSy+3OnTvltT7JnV3e/BBK/BBK\n/BBK/BBK/BBK/BBK/BDKOf8f6uzsbLkNDQ2V13Z3d5f7xo0b23qmmfD8+fNyv3LlSrk/ePCg3L9/\n//7Xz8Tc8OaHUOKHUOKHUOKHUOKHUOKHUOKHUDHn/Lt27Sr3/v7+ct+5c2fLbd26dW0900z59u1b\ny21wcLC89sKFC+X+9evXtp6Jhc+bH0KJH0KJH0KJH0KJH0KJH0KJH0LFnPP39vZOa5+O0dHRcr9/\n/365T0xMlHv1zf34+Hh5Lbm8+SGU+CGU+CGU+CGU+CGU+CGU+CFUo9lszt3NGo25uxmEajabjT/5\nOW9+CCV+CCV+CCV+CCV+CCV+CCV+CCV+CCV+CCV+CCV+CCV+CCV+CCV+CCV+CCV+CCV+CCV+CCV+\nCCV+CCV+CCV+CDWnv7obWDi8+SGU+CGU+CGU+CGU+CGU+CGU+CGU+CGU+CGU+CGU+CGU+CGU+CGU\n+CGU+CGU+CGU+CGU+CGU+CGU+CGU+CGU+CGU+CHUf+FsNTkv2hLSAAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x1de195880b8>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"label 5\n"
]
}
],
"source": [
"x, t = train_val[0]\n",
"plt.imshow(x.reshape(28,28), cmap='gray')\n",
"plt.axis('off')\n",
"plt.show()\n",
"print('label', t)"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
" from chainer.datasets import split_dataset_random"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
" train, valid = split_dataset_random(train_val, 50000, seed=0)"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training dataset size 50000\n",
"Validation dataset size 10000\n"
]
}
],
"source": [
"print('Training dataset size', len(train))\n",
"print('Validation dataset size', len(valid))"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
" # Iterator\n",
" from chainer import iterators"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"batchsize = 128"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"train_iter = iterators.SerialIterator(train, batchsize)\n",
"valid_iter = iterators.SerialIterator(valid, batchsize, repeat=False, shuffle=False)\n",
"test_iter = iterators.SerialIterator(test, batchsize, repeat=False, shuffle=False)"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [],
"source": [
" # Define Network\n",
"import chainer.links as L\n",
"import chainer.functions as F"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import random\n",
"import numpy\n",
"import chainer"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def reset_seed(seed=0):\n",
" random.seed(seed)\n",
" numpy.random.seed(seed)\n",
" if chainer.cuda.available:\n",
" chainer.cuda.cupy.random.seed(seed)"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"reset_seed(0)"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"class MLP(chainer.Chain):\n",
" \n",
" def __init__(self, n_mid_units=100, n_out=10):\n",
" super(MLP, self).__init__()\n",
" \n",
" with self.init_scope():\n",
" self.l1 = L.Linear(None, n_mid_units)\n",
" self.l2 = L.Linear(n_mid_units, n_mid_units)\n",
" self.l3 = L.Linear(n_mid_units, n_out)\n",
" \n",
" def __call__(self, x):\n",
" h1 = F.relu(self.l1(x))\n",
" h2 = F.relu(self.l2(h1))\n",
" return self.l3(h2)"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [],
"source": [
"gpu_id = 0\n",
"net = MLP()\n",
"if gpu_id >= 0:\n",
" net.to_gpu(gpu_id)"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(100,)\n",
"[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n",
" 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n",
" 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n",
" 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n",
" 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n",
" 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]\n",
"None\n"
]
}
],
"source": [
"print(net.l1.b.shape)\n",
"print(net.l1.b.array)\n",
"print(net.l1.W.array)"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"from chainer import optimizers\n",
"optimizer = optimizers.SGD(lr=0.01).setup(net)"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import numpy as np\n",
"from chainer.dataset import concat_examples\n",
"from chainer.cuda import to_cpu"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"max_epoch = 10"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"epoch:02 train_loss:0.5911 val_loss:0.5340 val_accuracy:0.8650\n",
"epoch:03 train_loss:0.5907 val_loss:0.4239 val_accuracy:0.8842\n",
"epoch:04 train_loss:0.4681 val_loss:0.3746 val_accuracy:0.8952\n",
"epoch:05 train_loss:0.3593 val_loss:0.3450 val_accuracy:0.9022\n",
"epoch:06 train_loss:0.1758 val_loss:0.3250 val_accuracy:0.9082\n",
"epoch:07 train_loss:0.4435 val_loss:0.3136 val_accuracy:0.9103\n",
"epoch:08 train_loss:0.3708 val_loss:0.2987 val_accuracy:0.9147\n",
"epoch:09 train_loss:0.1589 val_loss:0.2898 val_accuracy:0.9158\n",
"epoch:10 train_loss:0.2851 val_loss:0.2781 val_accuracy:0.9201\n"
]
}
],
"source": [
"while train_iter.epoch < max_epoch:\n",
" train_batch = train_iter.next()\n",
" x, t = concat_examples(train_batch, gpu_id)\n",
" \n",
" y = net(x)\n",
" \n",
" loss = F.softmax_cross_entropy(y, t)\n",
"\n",
" net.cleargrads()\n",
" loss.backward()\n",
" \n",
" optimizer.update()\n",
" \n",
" \n",
" if train_iter.is_new_epoch:\n",
" print('epoch:{:02d} train_loss:{:.04f}'.format(\n",
" train_iter.epoch, float(to_cpu(loss.data))), end=' ')\n",
" valid_losses = []\n",
" valid_accuracies = []\n",
" while True:\n",
" valid_batch = valid_iter.next()\n",
" x_valid, t_valid = concat_examples(valid_batch, gpu_id)\n",
" with chainer.using_config('train', False), chainer.using_config('enable_backprop', False):\n",
" y_valid = net(x_valid)\n",
" loss_valid = F.softmax_cross_entropy(y_valid, t_valid)\n",
" valid_losses.append(to_cpu(loss_valid.array))\n",
" \n",
" accuracy = F.accuracy(y_valid, t_valid)\n",
" accuracy.to_cpu()\n",
" valid_accuracies.append(accuracy.array)\n",
" \n",
" if valid_iter.is_new_epoch:\n",
" valid_iter.reset()\n",
" break\n",
" print('val_loss:{:.04f} val_accuracy:{:.04f}'.format(\n",
" np.mean(valid_losses), np.mean(valid_accuracies)))"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python [default]",
"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.6.3"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment