夏休みの日記 8/25

夏休みのoutput

大学の文化祭用にpix2pixを使った簡単なwebアプリを作ろうと思い、まずはwebアプリのローカル環境を整えました。

OS: Windows 10
MySQL: 8.0.17
Python: 3.7.3

仮想環境を作る

まずは、venvを使って仮想環境を作ります。

python -m venv [new env name]

その後、仮想環境を立ち上げます。

.\[new env name]\Scripts\activate

必要なパッケージのインストール

pip install [package]

で必要なパッケージをインストールします。今回は必要最小限のDjango, PyMySQLをインストールしました。注意事項として、現在(2019/08/25)ではDjango2.2にPyMySQLの最新バージョンが対応していないということで、Django2.1をインストールしました。(実際に2.2でやってみたところ、エラーがでました)

pip install django==2.1

Djangoプロジェクトを作る

以下のコマンドを実行すると、Djangoのプロジェクトを作れます。

django-admin startproject mysite

このプロジェクトが実際に動くかどうかは以下のコマンドを実行してみるとわかります。

python manage.py runserver

localhost:8000にアクセスしてみるとロケットが確認できると思います。

MySQLのインストール

公式サイトへアクセスしてインストーラをダウンロードします。インストーラでやることはここでは省きます。

もしコマンドプロンプト上でmysqlを使いたい場合はPathを通す必要があります。

mysql --version

上記のコマンドを実行してきちんとバージョンが表示されたらpathは通っています。

djangoとの連携に備えて新しくdatabaseを作っておきます。

まずはmysqlに設定したユーザ名とパスワードでログインします。

mysql -u [ユーザ名] -p

するとパスワードを聞かれるので、パスワードが通るとログインできます。

データベースを作っていきます。

mysql> show databases; // databaseの表示
mysql> create database [データベース名];

これでMySQLの準備は完了です。

MySQLDjangoの連携

djangoはデフォルトでsqliteと連携しているため、djangomysqlが連携するためには、settings.pyを編集する必要があります。

以下の部分を編集してください。

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': '[データベース名]',
        'USER': '[ユーザ名]',
        'PASSWORD': '[パスワード]',
        'HOST': '',
        'PORT': '',
    }
}

HOST, PORTはローカルの場合設定しなくても大丈夫です。

MySQLのサーバーを起動後に以下のコマンドを実行します。

python manage.py migrate

するとデータベース内にテーブルが用意されて連携が完了しました。

終わりに

次はtemplate.htmlを作って表示させます。

夏休みの日記 8/22

夏休みのoutput

pix2pixの論文を読みました

pix2pixの論文

pix2pixって何

ある画像を別の画像に(構造を保ったまま)変換するモデルです。例えば猫の線画を着色して猫の写真のように変換したりなどできます。

モデル

ベースとしてはGeneratorとDiscriminatorを競うように学習させていくGANを用います。

pix2pixの特徴としては、以下が挙げられます。

  1. 通常のGANと異なり、conditional GANを用いる
  2. Gが本物と似ている画像を生成したかどうかのL1Lossを加える
  3. GeneratorにU-netの構造を採用する

1. Conditional GAN

このGANはGeneratorに情報を与えてその情報の条件の下で生成させます。例えば、今は猫の画像をもとに生成してください、と情報を与えてやります。つまり、今までGANは何も知らない状態のまま手書き数字やらを生成していたのを、あるラベル情報をもとに生成させるようにしてやるのです。

理由としては、このモデルは線画を着色したり、写真の物体を色分けした抽象画にしたりと、変換しても画像の構造はへんかしていません。そのため、ある構造のもとで生成することが有効と考えられるからです。

潜在変数を z、条件のラベルを x、本物のラベルを yとして、lossは以下の式で表されます。

 {
\displaystyle \mathcal{L}_{cGAN} (G, D) = \mathbb{E} [ \log D(x, y) ] + \mathbb{E} [ \log (1 - D(x, G(x, z))) ]
}

2. L1Loss

これもGANとは異なり、Gが本物に似せられているかの程度を学習させることでよりGの精度を上げようとしています。式は以下の通りです

 {
\displaystyle \mathcal{L}_{L1} (G) = \mathbb{E} [ || y - G(x, z) || ]1
}

3. U-net

このモデルでは入力画像と出力画像の構造は変わらないはずなのでDownsampleによる前layerの情報を極力保つように後のlayerに前layerの情報をそのまま渡すようにします。より具体的には、 n をlayerの総数とするとlayer {i}の情報はlayer n-iに渡すようにします。ここで、layerどうしはEncoderとDecoderの関係になっています。つまり、Encode前の情報を渡していることになります。

今回はここまでとして、次回はこれを実装していきます。

Windowsでの環境構築ってめんどくさいね

前書き

この本を買ったので早速環境構築をすることにしました。しかし、それが苦難の道のりでした...。

つくりながら学ぶ! PyTorchによる発展ディープラーニング

つくりながら学ぶ! PyTorchによる発展ディープラーニング

※今回のお話は有益な情報があまりないので暇な人だけ見てください

環境構築

OS: Winodows 10
Python: 3.7.3
conda: 4.7.10

conda

まず考えたのは、Anacondaはインストール済みだったのでconda installしよう、ということでした。公式サイトへ行き、提示されたコマンドconda install pytorch-cpu torchvision-cpu -c pytorchを実行しようとしました。(CUDAは本に合わせてインストールしていません)すると、upgradeを実行してくれといわれたため、先にconda update -n base condaを実行しました。その後conda info -eを実行すると、

# >>>>>>>>>>>>>>>>>>>>>> ERROR REPORT <<<<<<<<<<<<<<<<<<<<<<

    Traceback (most recent call last):
      File "C:\Users\under\Anaconda3\lib\site-packages\conda\exceptions.py", line 1062, in __call__
        return func(*args, **kwargs)
      File "C:\Users\under\Anaconda3\lib\site-packages\conda\cli\main.py", line 84, in _main
        exit_code = do_call(args, p)
      File "C:\Users\under\Anaconda3\lib\site-packages\conda\cli\conda_argparse.py", line 80, in do_call
        module = import_module(relative_mod, __name__.rsplit('.', 1)[0])
      File "C:\Users\under\Anaconda3\lib\importlib\__init__.py", line 127, in import_module
        return _bootstrap._gcd_import(name[level:], package, level)
      File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
      File "<frozen importlib._bootstrap>", line 983, in _find_and_load
      File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
      File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
      File "<frozen importlib._bootstrap_external>", line 728, in exec_module
      File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
      File "C:\Users\under\Anaconda3\lib\site-packages\conda\cli\main_info.py", line 19, in <module>
        from ..core.index import _supplement_index_with_system
      File "C:\Users\under\Anaconda3\lib\site-packages\conda\core\index.py", line 9, in <module>
        from .package_cache_data import PackageCacheData
      File "C:\Users\under\Anaconda3\lib\site-packages\conda\core\package_cache_data.py", line 15, in <module>
        from conda_package_handling.api import InvalidArchiveError
      File "C:\Users\under\Anaconda3\lib\site-packages\conda_package_handling\api.py", line 3, in <module>
        from libarchive.exception import ArchiveError as _LibarchiveArchiveError
      File "C:\Users\under\Anaconda3\lib\site-packages\libarchive\__init__.py", line 1, in <module>
        from .entry import ArchiveEntry
      File "C:\Users\under\Anaconda3\lib\site-packages\libarchive\entry.py", line 6, in <module>
        from . import ffi
      File "C:\Users\under\Anaconda3\lib\site-packages\libarchive\ffi.py", line 48, in <module>
        libarchive = ctypes.cdll.LoadLibrary(libarchive_path)
      File "C:\Users\under\Anaconda3\lib\ctypes\__init__.py", line 434, in LoadLibrary
        return self._dlltype(name)
      File "C:\Users\under\Anaconda3\lib\ctypes\__init__.py", line 356, in __init__
        self._handle = _dlopen(self._name, mode)
    TypeError: LoadLibrary() argument 1 must be str, not None

このようなエラーがでてconda info, conda listが使えなくなりました。 ここを見たのですが、結局どのように修正するかよくわかりませんでした...(わかる方いたら教えてください)

pip

次に、TwitterのTL上で

このようなアドバイスをもらったのでpipをつかおうと思いました。やり方はこの記事を参考にしました。


pip3 install _を行うとSSLのエラーが起きましたが、これはOpenSSLを入れたら解決しました。

その後仮想環境はたてられたのですが、torchvisionをインストールする際に問題が起きます。 pip3 install https://download.pytorch.org/whl/cpu/torchvision-0.3.0-cp37- cp37m-win_amd64.whlを実行すると

  ERROR: Could not find a version that satisfies the requirement torch>=1.1.0 (from torchvision==0.3.0) (from versions: 0.1.2, 0.1.2.post1, 0.1.2.post2)
ERROR: No matching distribution found for torch>=1.1.0 (from torchvision==0.3.0)

このようなエラーがでてしまいました。torchとtorchvision別々にインストールすると、

>>> import torchvision
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\under\app\pytorch_practice\venv\lib\site-packages\torchvision\__init__.py", line 1, in <module>
    from torchvision import models
  File "C:\Users\under\app\pytorch_practice\venv\lib\site-packages\torchvision\models\__init__.py", line 11, in <module>
    from . import detection
  File "C:\Users\under\app\pytorch_practice\venv\lib\site-packages\torchvision\models\detection\__init__.py", line 1, in <module>
    from .faster_rcnn import *
  File "C:\Users\under\app\pytorch_practice\venv\lib\site-packages\torchvision\models\detection\faster_rcnn.py", line 7, in <module>
    from torchvision.ops import misc as misc_nn_ops
  File "C:\Users\under\app\pytorch_practice\venv\lib\site-packages\torchvision\ops\__init__.py", line 1, in <module>
    from .boxes import nms, box_iou
  File "C:\Users\under\app\pytorch_practice\venv\lib\site-packages\torchvision\ops\boxes.py", line 2, in <module>
    from torchvision import _C
ImportError: DLL load failed: 指定されたモジュールが見つかりません。

torchvisionのインストールの際にエラーが起きました。競合が起きてそうでしたが詳細がよくわかりませんでした...。

結局

google colab上で!pip install torch torchvisionをするとインストールできてimportもうまくいきました。今までの苦労はいったい....。とはいえ今後はdockerで環境構築をしてみようと思います。

ただの愚痴です

今日あった出来事で、かなりストレスが溜まっているのでここに全部吐き出そうと思います。

# 親
なぜストレスがたまっているのか、その原因は**親**、とくに父親です。じぶんの父親は、かなり暴力的な思考の持ち主でありたびたび脅してきます。それに加えて、子供を自分の思い通りにしたいらしく、かなり無茶苦茶なことを言ってきます。一番衝撃を受けたのは、「医者になって俺を養え」と言ってきたことです。こんな親もいるんだなと、いつも軽く受け流しています。

しかし、今日はいつもよりもかなりストレスがたまったのでブログを書こうと決意しました。以下、今日の出来事を記します。
私は、今日技術書典に向けて線形代数・確率論の資料を作成していました。朝九時ぐらいから夕方までずっとやっていたのですが、突然6時に父親から電話がかかってきて
居酒屋に来い、来ないとどうなるかわかるだろ?と言ってきました。怒ると確実に殴られるので、渋々居酒屋に行きました。そして、延々と私が慶應に行ったことを店の人に自慢していました。何の生産性もない話で途中で聞くのを放棄していました。ビール瓶を三杯ほど飲んだ後に、違う居酒屋へはしごしました。そこでの話も、私がバイトして手に入れたお金を少しよこせ、だの、お前はただ3日バイトしてそんだけ稼げていいよな、だの愚痴を聞かされました。

...ふざけんな!

と思いました。稼ぐために、私がどれだけ努力してるか知りもしないくせにふざけたことをぬかすな!!!

と思いました。

もちろん父親も私の学費を稼ぐために働いてくれているのでしょう。毎日毎日仕事をやってくれているのでしょう。しかし、それを子供に直接愚痴るのはどうでしょうか?
私にとってはプレッシャーでしかないです。

結局その居酒屋で、逃げるように家に帰ってきました。


以上が私の愚痴です。汚いところをおみせして申し訳ありませんでした。引き続き、春休みの目標を達成するために精進していく所存です。

Probability

はじめに

ここでは、確率論の基礎となる定義を確認していきます。より具体例を増やそうと思っているので、お待ちください。

——

確率の定義

定義に入る前に具体的な確率を見てみます。 例えばコイントスで表裏がでる確率って同様に確からしいとすると \frac{1}{2}です。他にもサイコロの1の目が出る確率は \frac{1}{6}です。このような確率が生じる集合を標本空間(sample space)とよみ、  \Omegaで表します。次に標本空間内の事象(events)の集合を Aとして、関数 P: A  \rightarrow [0, 1]を定めてみます。 このときに以下の性質を満たすとします。

 (i) P(\Omega)=1 \\
(ii)P(A_1 \cup A_2 \cdots A_n) = P(A_1)+P(A_2)+ \cdots + P(A_n)  \quad (A_iは素集合であるとする)

このとき、 (\Omega, A, P)確率空間(probability space)とします。具体例を通して確認してみましょう。

サイコロの具体例

6面ダイスを想像してみます。このとき、標本空間 \Omega = { 1, 2, 3, 4, 5, 6}が表されます。そして、出る目が2の倍数であるときの事象は A = {2, 4, 6}です。 そのため、2の倍数である確率は \frac{3}{6}=\frac{1}{2}となります。

この確率空間は以下の定理を満たすから確認してみます。

確率の命題

命題(proposition)1
(i)P(A^c)=1 - P(A) \quad (A^cはAの補集合) \\
(ii)B \subseteq A \Rightarrow P(B) \leqq P(A) \\
(iii)0 = P(\phi) \leqq P(A) \leqq P(\Omega)=1
命題(proposition)2
P(A \cup B) = P(A) + P(B) - P(A \cap B)
命題(proposition)3
P(A_1 \cup \cdots \cup A_n) \leqq P(A_1) + \cdots P(A_n) \quad (A_iは素集合とは限らない)

条件付き確率

Bという事象が起きたうえで、Aという事象起きるとき、その確率を p(A|B)と表して、

 P(A|B) = \frac{P(A \cap B)}{P(B)}

とかきます。また、次のような定理があります。

命題(proposition)4 (Bayes’ rule)
P(A|B)= \frac{P(B|A)P(A)}{P(B)}

この定理はベイズの定理といい、ベイズ学習の基礎となる定理です。 条件付き確率とベイズの定理も具体例を通して確認してみます。

条件付き確率の具体例

図のような2つの箱があるとします。


A: 1の箱が選ばれる事象 \\
B: 赤玉が取り出される事象

と定義してみると、条件付き確率は次のようになります。

  P(A)=\frac{1}{2} \quad P(B) = \frac{1}{2} \times \frac{3}{4} + \frac{1}{2} \times \frac{1}{2} = \frac{5}{8} \quad P(A \cap B) = \frac{1}{2} \times \frac{3}{4} = \frac{3}{8} \\
条件付き確率の定義より、 \\
P(B|A) = \frac{P(A \cap B)}{P(A)} = \frac{\frac{3}{8}}{\frac{1}{2}} = \frac{3}{4} \\
ベイズの定理より、\\
P(A|B) = \frac{P(B|A)P(A)}{P(B)}= \frac{\frac{3}{4} \times \frac{1}{2}}{\frac{5}{8}} = \frac{3}{5}

確率変数(probability variables)

さっき説明した確率空間だと数値的に確率は扱いにくいと思います。そのために、次は確率分布、確率変数という概念を導入していきます。 確率空間内には、標本空間 \Omegaが存在しています。その \Omegaに対して関数 x:\Omega \rightarrow \mathbb{R}を定めます。この x確率変数といいます。集合だったときに対して、実数で表されるからより扱いやすくなります。

今までの確率はサイコロのように離散的な確率でした。 ここからは連続的な確率も出てくるので紹介していきます。

離散確率変数

離散確率変数では、 p: X \rightarrow [0, 1]と定められた確率質量関数 p(x)が存在します。このとき、 p(x)は以下の式を満たします。

 \Sigma_{x \in X} p(x) = 1

連続確率変数

連続確率変数では、 p: X \rightarrow [0, 1]と定められた確率密度関数 p(x)が存在します。または確率分布と呼ばれます。そして p(x)は以下の式を満たします。

  (i) \int p(x)dx = 1 \\
(ii) p(x) \geqq 0

確率密度関数で有名なものに、ガウス分布確率密度関数があり、以下の式で表されます。

独立

ここで、新たな概念を紹介します。 P(A \cap B)が次のように表されるとき、 P(A), P(B)独立であるとよばれます。  A, Bは標本空間内の集合であるとしています。

  P(A \cap B) = P(A)P(B)

先ほど導入した確率変数 X, Yを使って書き直してみます。このとき、 p(X, Y)同時確率分布とよばれます。確率変数が互いに独立であるときは、次のように表されます。

  p(X, Y) = p(X)p(Y)

この式は、二つ以上の確率変数が存在するときにも、成り立ちます。実際に \boldsymbol{X} = (X_1, \cdots, X_n)^{T}の確率変数が互いに独立であるときは、同時確率分布は次のように表されます

  p(X_1, \cdots, X_n) = \prod_{i=1}^{n} p(X_i)

同時確率分布 p(X, Y)が存在しているとき、一つの確率変数について和をとる(もしくは積分する)ともう一方の確率分布を得ることができます。

 p(X) = \int p(X, Y)dy

確率の平均・分散共分散

この章では、確率分布の特徴を表す要素となる概念について紹介していきます。確率分布の平均などの計算結果を覚えておく必要はありませんが、覚えておくと後々楽になります。

期待値・平均

まずは、期待値・平均の定義を確認していきます。

確率変数のベクトル \boldsymbol{x}が存在して、その写像 f(\boldsymbol{x})に対して期待値は次のように定義されます。

期待値
\mathbb{E[f(\boldsymbol{x})]} = \int f(\boldsymbol{x}) q(x)d \boldsymbol{x}

 \boldsymbol{x}自身の期待値 \mathbb{E[\boldsymbol{x}]}をとるとき、 \mathbb{E[\boldsymbol{x}]}を確率の平均とします。(以下、 \mathbb{E[\boldsymbol{x}]} = \muと表現します。)

平均
\mathbb{E[\boldsymbol{x}]} = \int xq(x)dx \\
\mathbb{E[\boldsymbol{x}]} = \Sigma xq(x)

平均はデータの中心となる値を数値化したものであるということができます。

分散共分散

分散共分散の定義を確認していきます。

確率変数 Xに対して、分散(variance)は次のように表されます。

分散
 Var(X) =  \mathbb{E[(x - \mu)^2]}

定義のように確率変数の平均と確率変数の差を二乗していることから、分散は平均を基準としたデータの広がり具合を数値化したものであるといえます。

共分散(covariance)は、二つの確率変数の関係を計るときに用いられる数値です。 二つの独立な確率変数 X, Yに対して、次のように定義されます。

共分散
 Cov(X, Y) =  \mathbb{E}[(X - \mu_x)]\mathbb{E}[(Y - \mu_y)]

ここからは多次元での分散共分散の表現方法を確かめていきます。 確率変数のベクトル \boldsymbol{X} = (X_1, \cdots, X_n)^{T}に対して、その平均ベクトル \boldsymbol{\mu} = (\mu_1, \cdots, \mu_n)^{T}が存在するとします。 このとき、以下の計算により分散共分散行列を表現することができます。

分散共分散行列
 \Sigma =  \mathbb{E}[(\boldsymbol{X - \mu})] \mathbb{E}[(\boldsymbol{X - \mu})^T]

この式は、行列となって次のように表されます。


\left(
 \begin{array}{ccccc}
Var(X_1) & \cdots & Cov(X_1, X_n) \\\
\vdots & \ddots & \vdots \\\
Cov(X_n, X_1) & \cdots & Var(X_n) 
\end{array}
\right)

対角に分散、それ以外の成分に共分散が表れていることが確認できます。

終わりに

今回は、確率論の基礎となる概念をまとめました。概念をまとめた後は実際に計算してみるとより確率のイメージが湧くと思います。ぜひ計算してみてください。 次回は、いろいろな確率分布を紹介しながら平均、分散を計算していこうと思います。ついでに確率分布の図も紹介しようと思っています。 いずれにしても重要なことは、ド葛本社をみることです、必ずみましょう 最後に参考とした文献をまとめておきます。

機械学習スタートアップシリーズ ベイズ推論による機械学習入門 (KS情報科学専門書)

機械学習スタートアップシリーズ ベイズ推論による機械学習入門 (KS情報科学専門書)

ベイズ統計の理論と方法

ベイズ統計の理論と方法

確率と統計 (現代基礎数学)

確率と統計 (現代基礎数学)

ISIさんから教えてもらった良いやつ

2018年を振り返ろう

こんばんは、supercell です。今年もそろそろ終わりを迎えますね。なので、2018年の出来事、感想を一月ごとに振り返ってみようと思います。

1月

この頃、僕はまだ浪人生で駿◯に通ってました。国立は東工大で、私立は慶應、早稲田を受ける予定でした。そのため、センター試験の勉強はあまりせず、二次試験ばかりを解いていました。やはり試験が近づいていることがあり、不安定な精神状態でした。ただセンター試験の結果が割と良かったため、人間であることを保つことができました。予備校の先生と相談し、東工大慶應、早稲田を受けることに決定しました。

2月

慶應、早稲田、東工大の入試を受けました。最後の入試が終わったときは、やり遂げたという気持ちでいっぱいでした。結果としては、慶應学門2合格、早稲田基幹理工lll不合格でした。早稲田のほうが解けた感触があっただけ複雑な気持ちでした。

3月

東工大の結果が帰ってきました。結果は1点差で不合格でした....ほんっっっっっっっとうに悔しかったです。何度も結果を見返しました。しかし、結果は同じでした。これ以上浪人するわけにもいかなかったので、慶應に進学することを決めました。この頃は、大学で人工知能やりたいなーぐらいで具体的な計画は立てていませんでした。

4月

いよいよ大学に入学しました。この当時はpcに関してはほぼ素人で、当然webや人工知能の知識もありませんでした。でも、興味はあったので、入学式に配られたサークル一覧表で見たKCS(Keio Computer Society)に入ろうと決めました。素人のくせによく技術サークルに入ろうなんて思いましたね...kcsでは、unity(ゲーム制作が主)班、blender(3DCG制作)班、DTM(音楽制作)班、AI班がありました。当然AIには興味があったのでAI班に入りましたが、unityとblenderにも興味があったので入りました。あと、非公式でpythonの勉強会があったのでそれにも参加しました。

5月

blender講習会の一環として、ペンギンを作りました。さらに個人でイルカを作ってみました。(後に自分のアイコンとなる)unity班ではゲームを制作してみたのですが、C#の文法が分からず頭が?で埋まってました。AI班ではゼロから作るdeep learningを使った講習を受けていました。はえーって感じでした。python講習会が一番実りが大きいと感じました。良かったところは、一方的な講習ではなく、輪講形式だったところです。まあ、pythonがわかりやすかったってこともあります。

6月

blenderはキャラに手を出しましたが、難しすぎて断念しました。unityはほぼ行かなくなり、AIはなんとか食いついて講習を受けていました。(ただし、虚無)この頃、webもやりたいなと思い始めて、html,cssを独学で勉強し始めていました。そして、Ogiwara 神と出会いました。彼のアドバイスを受けて、PHPを触り始めました。

7月

ある程度書籍とprogateでPHPを学んだ後に、フレームワークの概念を教えてもらい、PHPフレームワークであるLaravel を学び始めました。 しかし、テストのせいで7月後半は虚無でした。

8月

夏休みに入りました。 途中で中断したLaravel の学習を再開しました。毎日Laravelを触っていたので、このときは頭がおかしかったのだと思ってます。

9月

KCSの合宿に参加しました。合宿といっても、ただLaravelを触る場所が変化しただけでした。まあ、KCSメンバーとともに開発できたのは割と良かったと思ってます。来年度は観光と開発両方をする合宿が良いですね、個人的な意見です。 9月後半は、大学が始まりました。

10月

10月は、unity班とblender班を実質やめて、AI班に絞りました。また、個人的にwebの勉強をしていました。python講習会は後期kaggle班へと進化(?)しました。後期kaggle班では、python機械学習プログラミングを輪講形式で学習しました。AI班では、三田祭に向けたモデルを作り始めました。ただモデルの作り方が全く分からず、???でした。

11月

Ogiwara神のすすめで、webサービスインターンを受けることにしました。というのも、webサービスの一連の流れがまだわかっていなかったからです。Docker(クジラ)もわからなかったので 3社受けた内、1社受かりインターンに行くことになりました。業務ではVue.js,Djangoを扱いました。あと、化学実験が始まりました。虚無でした。

12月

python機械学習プログラミングを読んでいましたが、所々分からないところがあったので、「確率と統計」を合わせて読み始めました。また、数学の基礎を固める必要性を感じたため、集合と位相や線形代数入門を読み始めました。12月後半(現在も含む)は、Flutterを学び始めました。これは、マルチプラットフォームで、iosandroidのアプリを作成できます。皆さんの予想通り、Ogiwara神のすすめです。

以上が、2018年の振り返りとなります。なかなか濃い一年でした。来年度はPRMLとか読んで機械学習極めたいですね。ここまで読んでいただきありがとうございました。