強化学習の勉強に良さそうなサイト一覧

OpenAI Gym
Pythonではじめる強化学習
深層強化学習:ピクセルから『ポン』 – 前編
深層強化学習:ピクセルから『ポン』 – 後編
超シンプルにTensorFlowでDQN (Deep Q Network) を実装してみる 〜解説編② 学習の流れを理解する〜
PyBrainを用いて強化学習をしてみた
Q学習(Q-Learning)やバンディットアルゴリズムなどの強化学習のデモ用のコードを公開して保守していくことにした。
path-finding-q-learning-tutorial
DQNをKerasとTensorFlowとOpenAI Gymで実装する
強化学習で参考になったサイトまとめ
Q学習で最良経路をPythonで求めてみる

TensorFlow – 畳み込みニューラルネットワーク(CNN)をやってみる

TensorFlowのチュートリアルにあるので見てみます。
Deep MNIST for Experts
日本語に訳してくれているのがこれです。

CNNとは?(メモ)

畳み込みニューラルネットワーク(CNN)は、Convolutional neural networkの略だそうです。CNNじゃない一般的なものはニューラルネットワークの各ノードが全部結合しているので全結合といいます。全結合の弱点は、形状を持たないことです。確かにMNISTで試した時も、28×28の画像を784列の1次元にしていました。CNNの畳み込み層という層は、入力も出力も形状を持ちます。バッチ処理に対応する入力は、4次元です。バッチ数、高さ、幅、チャンネル数といったように持ちます。CNNのモデルは下記のようになります。

上記を1セットとして複数回繰り返します。その後で、Poolingしなかったり、ドロップアウトしたり、最後の方に全結合層を通したりして、最終結果を出力するようです。

畳み込み層でやる処理は、畳み込み演算というもので、フィルタを適用して積和演算をします。フィルタのパラメタが重みになります。バイアスもあって、畳み込み演算の結果に適用します。バイアスは1×1の数値です。

プーリング層は、縦横方向の空間を小さくすることです。例えば、2×2のMAXプーリングをストライド2で行うと、2×2の中で一番大きい数字を取ることを2の間隔で繰り返すことで、画像サイズを小さくします。プーリングは小さくするだけ(MAXプーリングなら最大値をとるだけ)なので、パラメタはないですし、チャンネル毎に実行するので、入力と出力でチャンネル数は変わりません。

Deep MNIST for Expertsをやってみる

最初の方は、CNNではなかったです。全結合のシンプルなやつでした。入力層と出力層のみのサンプルです。

CNN

下記のようになってました。自分が理解している内容をコメントに書きました。

数値が0.9919になったすごい。

畳み込みフィルターで画像をぼかしてみる

畳み込みニューラルネットワークは、畳み込みフィルターを使ってますが、畳み込みフィルターを使うと画像を加工出来ます。ぼかすには、画像の明るさを周辺の明るさの平均をとってそれで埋めていくことでぼけます。

適当な画像をぼかしてみようと思います。

まずこの画像をNumpy配列として取得します。画像は、幅800px、高さ600pxです。

結果

次に5×5のフィルターを作ります。フィルターの全領域の合計が1になるようにします。

結果

このフィルターをチャンネル毎に画像の左から順に適用していきます。

画像を表示します。

これだとモザイクって感じなので、全体的にぼやっとさせるには、下記のようにしたらいいと思います。効率性はよろしくないと思いますが、とりあえず出来ました。変えたところは、全ピクセルで別々に平均を計算するようにしたところです。

手書き文字を作れるJavascriptをつくってTensorFlowで予測させてみた

MNISTでテストしているだけだと味気ないので、ブラウザで数字を手書きして、それを予測するようにしてみました。JavascriptのCanvasでお絵かきアプリみたいのを作って、そこに手書きで数字を書いてボタン押したら、28×28に縮小して、Base64の状態でサーバに送ります。サーバでPythonが、numpyの配列にして、TensorFlowに渡して推測しております。

多分やり方は大体あってるのではないかと思ってるのですが、いかんせん精度が超悪いです。そもそもまだTensorFlowがCNNになっていないのですが、それでもMNISTで学習・テストすると97%位にはなっているものです。背景黒・文字色白で0-255の明るさを28×28もつ配列にしているので、形式は合っているはずなのですが、やはり文字の太さとか大きさとかそういうのによって、全然違うということなのかなと思っております。ブラウザで割と適当に数字を書いてもいい感じの精度で答えを言ってくるのかなと期待していたので残念です。とりあえず、今度CNNで対応してみて、それでもダメだったら、Javascriptの画像自体で訓練をしていくようにしてみようかなと思ってます。(何か根本的な原因がありそうな気もしますが)

GitHub

一応GitHubに入れておきました。誰か精度よくしてくれたら嬉しいです。

追記(2017/01/25)
上記のリポジトリは、「手書き文字を作れるJavascriptをつくってTensorFlowで予測させてみた(2)」の内容に更新しました。

PythonでWEBサーバ起動して、必要なディレクトリ・ファイルを作成

各ファイルの中身を作成

index.html

cgi-bin/mnist.py

cgi-bin/mytensor.py

ブラウザでアクセス

下記URLにアクセスすると、MNIST TESTというお絵かきページみたいのがでてきます。ちなみに、最初にsubmitボタン押すと、MNISTのダウンロードから学習までをするので、時間かかるし、結果も表示されません。2回目からはちゃんと結果が(一応)表示されます。

TensorFlow – MNISTで機械学習してみる(入力層・出力層のみ)

MNISTを取得する

TensorFlowのチュートリアル用にMNISTが簡単に取り込めるようになっているらしい。

上記を実行するとまだMNISTをダウンロードしてない場合はダウンロードしてくれる。

上記を実行すると、100件分のトレーニング用データとトレーニング用正解ラベルをもらえる。numpyの配列としてもらえる。input_data.read_data_setsの引数で、one_hot=Trueにすると、正解ラベルも正解を1、違うものを0とした配列でもらえる。

やってみること

  • MNISTのトレーニングデータで学習して、テストデータでテストする。
  • トレーニングデータは100件ずつ使って学習する。
  • 最も単純な入力層と出力層しかないものを試してみる。

コード

参考:jupyter_tfbook/Chapter02/MNIST softmax estimation.ipynb

Step: 100, Loss: 7747.071777, Accuracy: 0.848400
Step: 200, Loss: 5439.357910, Accuracy: 0.879900
Step: 300, Loss: 4556.465332, Accuracy: 0.890900
Step: 400, Loss: 4132.032715, Accuracy: 0.896100
Step: 500, Loss: 3836.136963, Accuracy: 0.902600
Step: 600, Loss: 3657.867920, Accuracy: 0.904100
Step: 700, Loss: 3498.280762, Accuracy: 0.907500
Step: 800, Loss: 3376.391602, Accuracy: 0.909400
Step: 900, Loss: 3292.480713, Accuracy: 0.910000
Step: 1000, Loss: 3207.918213, Accuracy: 0.912700
Step: 1100, Loss: 3147.843018, Accuracy: 0.914700
Step: 1200, Loss: 3092.903320, Accuracy: 0.916300
Step: 1300, Loss: 3057.232666, Accuracy: 0.915900
Step: 1400, Loss: 3010.664307, Accuracy: 0.916200
Step: 1500, Loss: 2972.114746, Accuracy: 0.917300

TensorFlowのWindows版をインストールする

TensorFlowのWindows版がでてた

「Windows10上のTensorFlowでGPUを利用しようとしてダメだった→できるようになったみたいです!」なんと、Windows版でGPU利用も可能なものが出てるらしい。「Google、オープンソースの機械学習ライブラリ「TensorFlow」のWindows版を公開」

Windows版は「Python」言語のパッケージ管理システム「PyPI」のパッケージとして配布されており、Windows 7/10およびWindows Server 2016で利用が可能。GPUアクセラレーションとして“CUDA 8.0”と“cuDNN 5.1”がサポートされている。

インストール

「TensorFlow が正式に Windows サポートして GPU が使えたので試してみた」ここに色々インストール手順が書いてあります。自分はNVIDAのサイトで登録とかすでにしているのですが、どんな登録をして、何をパソコンにインストールしたのかとかは忘れました。Pythonはanacondaでインストールしたはずでバージョンは3.5です。前は確かTensorFlowはPython2.7に対応していた気がしますが、3.3以上も対応しているようです。

Anacondaの64bit版の4.1.1で、Pythonのバージョンは3.5.2でした。

以下2つを実行して、TensorFlowとTensorFlow-GPUがインストールできるようです。

Successfully installed protobuf-3.1.0.post1 tensorflow-0.12.1

Successfully installed tensorflow-gpu-0.12.1

インストールできました。

動くかチェック

とりあえず使えるのかチェックしてみます。
tensor.pyというファイルに、下記を書いて実行してみます。

結果

GPU関連のインストール・設定等は全くできていなかったようです。

下記を書いて実行してみました。

結果

GPU関連でWarning的メッセージが沢山でるものの一応動いています。搭載しているGPUも認識されていて名前とかが表示されてます。

NVIDA関連の設定

CUDA Toolkit 8.0

https://developer.nvidia.com/cuda-downloads

上記のように設定してダウンロードして、インストールしました。結構時間かかりました。

cuDNN v5.1

下記でユーザ登録したらダウンロードできます。
https://developer.nvidia.com/rdp/cudnn-download
zip内のcudaフォルダの中身をC:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0にコピーします。

動作チェック

パソコンを再起動して、改めてtensor.pyを実行してみました。

全部successfullyと書いてるのでうまくいっているようです。

Python – MNISTを使う

機械学習で使えるサンプル画像の有名なのがMNISTだそうです。0-9までの手書き文字画像と、正解ラベルデータが、トレーニング用とテスト用で分けられています。
http://yann.lecun.com/exdb/mnist/

バイナリデータになっていて、画像等は全部データとしてつながっているらしい。機械学習は画像を数値として扱う必要があります。

参考:https://github.com/oreilly-japan/deep-learning-from-scratch/blob/master/dataset/mnist.py

Pythonでダウンロード・読み込み

ダウンロード

読み込み

gzipを使います。

試しに画像データを読み込んで1つ表示させてみます。

手書きの5っぽい画像が表示されました。
load_mnist関数は、gzipで読み込んで、np.frombufferというので、Numpyの配列に格納してます。data.reshapeで、画像サイズの784ずつに配列を分割してます。
784ずつに分割された配列で実際には機械学習すればいいと思います。実際の画像にするために、さらに1つの画像の縦横に合わせて配列を変換してます。

Python – 勾配法

勾配は、すべての変数に対する偏微分をベクトルにしたものです。勾配法は、勾配を使って関数が最小になるパラメタを探す方法のことです。偏微分はある点における、各パラメタに対する微分ですので、傾きです。傾きが分かるとパラメタをどう動かすとマイナスになるかが分かります。勾配はすべてのパラメタに対する傾きが入ってるので、これを使って全部のパラメタを徐々に関数の出力結果がマイナスになるように調整します。ただし、関数のグラフが凸凹している場合、ある部分においての凹の一番下についてしまった場合、出られなくなったりします。残念なことです。でも大体なんとかなるようです。ただしグラフの形状によっては、実際残念な結果に終わったり、最小値を発見するのにものすごく時間がかかったりするそうなのでケースバイケースで勾配法とは別の方法も試す必要があるそうです。

勾配によって、各パラメタの増減すべき方向が分かりますが、どの程度増減させるかは人間がいい感じの数字を設定する必要があります。この一回当たりにパラメタを増減させる数値は、学習率で決めます。偏微分結果に学習率を掛けたものが、増減数値になります。また、どこまでいけば本当の正解なのかは勾配法では分かりませんので、勾配法を何回繰り返すかも人間が決める必要があります。

勾配をPythonで書くと下記になります。

勾配法をPythonで書くと下記になります。

コードサンプル

python – 損失関数

ディープラーニングで使う損失関数の、二乗和誤差と交差エントロピー誤差。

二乗和誤差

二乗和誤差は、差の二乗を全部足して2で割る。

交差エントロピー誤差


$$E = -\displaystyle \sum_{k}t_k \log y_k$$

logは底がeの自然対数を表すそうです。np.logでできます。ディープラーニングで使うときは、yが出力で、tが正解ラベルです。正解ラベルは正解を1とし、間違いを0とすると、正解ラベル以外のものは全部0になるので無視できて、-log yになります。間違いのやつ無視していいのかなと思いましたが、間違いのやつを高確率と判断した場合、ソフトマックス関数では正解の確立が低くなるので問題ないのかなと思いました。

deltaは、np.log(0)が-infを出すことに対する対策です。超小さい数を加えています。

Python – 偏微分・勾配

偏微分

偏微分は、変数が2つ以上あるときに1つ以外を固定にして、固定じゃない1つに対して微分をすることだそうです。Pythonでやると簡単にできます。

下記の式で、x0が3、x1が4のときの偏微分


$$f(x_0, x_1)=x_0^2+x_1^2$$

コード

勾配

勾配は、すべての変数に対する偏微分をベクトルにしたものだそうです。

ディープラーニングのサンプルコード

メモ。ゼロから作るDeep Learningの本用のサンプルコードは、Githubで公開されてます。これは、Githubの公開リポジトリなのでブログに書いても大丈夫なやつなはずなのでメモ。

oreilly-japan/deep-learning-from-scratch

ソフトマックス関数

合計が1になるように、うまく数字を調整してくれる関数らしい。確率を確認するのに便利。


$$y_k = \frac{\exp(a_k)}{\displaystyle \sum_{i=1}^n \exp(a_i)}$$

aがn個あるときの、k番目のyを取得する。分母は全てのaの指数関数の和。分子はk番目のaの指数関数。

pythonで書くと下記になります。

指数関数を使っているので数字がものすごく大きくなる可能性があり、それによってオーバフローで変な数値が返ってくる場合があるため、aの最大値をそれぞれのaの値から引きます。これで全部0かマイナスになります。

ソフトマックス関数は、aのそれぞれの値の大きさの順番は変えません。なので、一番大きいaを取得したい場合は、ソフトマックス関数は不要です。

ディープラーニングの出力層で使う活性化関数は、回帰問題だと恒等関数、2クラス分類問題はシグモイド関数、多クラス分類問題はソフトマックス関数を使うのが一般的だそうです。シグモイドは0か1かを表すし、ソフトマックスは、複数の選択肢の確からしさを数値で表すからだと思います。回帰は数値を予測するので確率にする必要がないので恒等関数なんだと思います。

シグモイド関数

ディープラーニングでシグモイド関数というのを使いまっす。シグモイド関数は、何か入力されたら0~1の数値を返します。入力された数値が0未満だったら0を返して、そうでなければ1を返すような関数をステップ関数といいまして、これよりも緩やかに0~1の間を返すのでなんかいいらしいです。

シグモイド関数の式は、下記です。


$$h(x) = \frac{1}{1+\exp(-x))}$$

Pythonで書くと下記になります。

グラフにすると下記のようになります。

Python x TensorFLow – 最小二乗法

1次関数から試してみます。最小二乗法は、誤差を2乗した合計が小さくなるようにすることで、最もらしい関数を発見する方法です。1次関数でデータを10個つくって、作り出した関数を知らない前提で、機械に関数を発見してもらいます。

1次関数でやってみる

1次関数は下記でやってみます。
y = 3x * 5

トレーニングセット作成

データを10個つくります。xは、0,1,2,3,4,5,6,7,8,9です。Pythonでつくります。

[5, 8, 11, 14, 17, 20, 23, 26, 29, 32]

これはグラフにすると下記になります。

plot

TensorFlowでやってみる

モデルは、1次関数とします。パラメタは2つあります。誤差関数は、二乗誤差を使います。TensorFlowでやってみます。

Step: 10000, Loss: 0.556078
Step: 20000, Loss: 0.000000
Step: 30000, Loss: 0.000000
Step: 40000, Loss: 0.000000
Step: 50000, Loss: 0.000000
Step: 60000, Loss: 0.000000
Step: 70000, Loss: 0.000000
Step: 80000, Loss: 0.000000
Step: 90000, Loss: 0.000000
Step: 100000, Loss: 0.000000
[[ 5.]
[ 3.]]

plot2

1000刻みでLoss値を見てみる

20000回ですでに完璧に誤差がなくなっておりまして、きちんと正しい一次関数を発見しました。せっかくなので、1000刻みで見てみようと思います。

Step: 1000, Loss: 2144.477539
[[ 0.93216914]
[ 0.93001837]]
Step: 2000, Loss: 946.874451
[[ 1.73305488]
[ 1.72308087]]
Step: 3000, Loss: 324.689636
[[ 2.4027319 ]
[ 2.37532687]]
Step: 4000, Loss: 74.941284
[[ 2.92346025]
[ 2.85973501]]
Step: 5000, Loss: 13.527188
[[ 3.27773309]
[ 3.14026999]]
Step: 6000, Loss: 6.525241
[[ 3.50095201]
[ 3.2282424 ]]
Step: 7000, Loss: 4.923757
[[ 3.69913244]
[ 3.2147882 ]]
Step: 8000, Loss: 3.215882
[[ 3.94896293]
[ 3.17392874]]
Step: 9000, Loss: 1.630160
[[ 4.25151825]
[ 3.1236279 ]]
Step: 10000, Loss: 0.556078
[[ 4.56274843]
[ 3.07208133]]
Step: 11000, Loss: 0.099951
[[ 4.81459618]
[ 3.03052568]]
Step: 12000, Loss: 0.006101
[[ 4.95419312]
[ 3.00753903]]
Step: 13000, Loss: 0.000059
[[ 4.9954896 ]
[ 3.00074267]]
Step: 14000, Loss: 0.000000
[[ 4.99989605]
[ 3.00001764]]
Step: 15000, Loss: 0.000000
[[ 4.99996567]
[ 3.00000596]]
Step: 16000, Loss: 0.000000
[[ 4.9999795 ]
[ 3.00000358]]
Step: 17000, Loss: 0.000000
[[ 4.9999876 ]
[ 3.00000215]]
Step: 18000, Loss: 0.000000
[[ 4.99999428]
[ 3.00000095]]
Step: 19000, Loss: 0.000000
[[ 4.99999619]
[ 3.00000072]]
Step: 20000, Loss: 0.000000
[[ 4.99999857]
[ 3.00000024]]

頭よくなっていく過程が分かります。しかし、1次関数かどうかは実際には分からないので、1次~10次までを確認して、一番いい感じのやつを発見するようなプログラムにするといいのではないかと思いました。あと、トレーニングセットとテストセットとかいうらしいですが、最初の学習データとは別のテストデータも必要になります。理由は過学習してしまう可能性があるからです。例えば10個のデータであれば9次関数をつくると確実に10個のデータを再現できる関数になります。しかしこれは過学習しており、11個目のデータがあったときに全然めちゃくちゃになってしまいます。

誤差つきの4次関数でやってみる

では次に4次関数でやってみます。また、実際のデータっぽく誤差をいれてみます。ソースコードきたないですが、実験なのでお許しください。

param_cntは、モデル式のパラメタの最大数です。11と入れると、10次関数まで調べます。3だと2次関数まで調べます。do_cntは、学習回数です。chk_cntは、何回ごとにloss値を出力させるか、です。4次関数にnp.random.normalで正規分布の誤差をいれています。平均0で、標準偏差3の正規分布の誤差ということになるそうです。

1次関数:
Step: 5000, Loss: 215542.093750
[[ 4.95924044]
[ 3.95200872]]
Step: 10000, Loss: 203412.828125
[[ 9.88683128]
[ 5.01568365]]
Step: 15000, Loss: 192418.406250
[[ 14.8010807]
[ 5.1672349]]
Step: 20000, Loss: 182398.625000
[[ 19.70719528]
[ 5.31404638]]
2次関数:
Step: 5000, Loss: 68691.289062
[[ 4.37834597]
[ 4.78828716]
[ 4.51071978]]
Step: 10000, Loss: 19349.113281
[[ 6.14278746]
[ 9.20509338]
[ 8.05002975]]
Step: 15000, Loss: 14812.129883
[[ 0.76773846]
[ 11.64998531]
[ 9.2823782 ]]
Step: 20000, Loss: 13354.574219
[[ -4.00546932]
[ 11.78009605]
[ 9.61374664]]
3次関数:
Step: 5000, Loss: 67975.859375
[[ 4.38982058]
[ 4.47143745]
[ 4.52593517]
[ 0.12835987]]
Step: 10000, Loss: 18511.107422
[[ 6.25019884]
[ 7.83472824]
[ 8.12683201]
[ 0.19194219]]
Step: 15000, Loss: 14246.777344
[[ 0.85353625]
[ 7.43424273]
[ 9.42072201]
[ 0.286881 ]]
Step: 20000, Loss: 12680.401367
[[-3.94125748]
[ 7.13879824]
[ 9.76669121]
[ 0.31357336]]
4次関数:
Step: 5000, Loss: 116.987244
[[ 1.75886464]
[ 0.82387865]
[ 0.73796004]
[ 0.90688848]
[ 0.49740523]]
Step: 10000, Loss: 21.997097
[[ 4.06656361]
[ 1.1654942 ]
[ 0.78540492]
[ 0.88064975]
[ 0.48745832]]
Step: 15000, Loss: 16.351856
[[ 5.03755283]
[ 1.10082293]
[ 0.56437576]
[ 0.88661832]
[ 0.49617034]]
Step: 20000, Loss: 16.351896
[[ 5.03769445]
[ 1.10081434]
[ 0.56434351]
[ 0.8866201 ]
[ 0.4961707 ]]
5次関数:
Step: 5000, Loss: 119.090012
[[ 1.74797881e+00]
[ 1.08122551e+00]
[ 7.19700754e-01]
[ 8.64906728e-01]
[ 4.98723030e-01]
[ 1.43910421e-03]]
Step: 10000, Loss: 22.015015
[[ 4.06811666e+00]
[ 1.07059586e+00]
[ 7.93005526e-01]
[ 8.97920549e-01]
[ 4.86883730e-01]
[ -6.27588655e-04]]
Step: 15000, Loss: 16.261492
[[ 5.05882359e+00]
[ 1.18433976e+00]
[ 5.52112699e-01]
[ 8.70472431e-01]
[ 4.96929288e-01]
[ 5.98916959e-04]]
Step: 20000, Loss: 16.260433
[[ 5.05913115e+00]
[ 1.18449724e+00]
[ 5.52029669e-01]
[ 8.70452166e-01]
[ 4.96929288e-01]
[ 6.06292742e-04]]
6次関数:
Step: 5000, Loss: 53.637337
[[ 2.38433266e+00]
[ 1.57903039e+00]
[ 1.11886275e+00]
[ 8.11793208e-01]
[ 4.61589992e-01]
[ 2.50088377e-03]
[ 6.97513111e-04]]
Step: 10000, Loss: 18.967039
[[ 4.32346010e+00]
[ 1.32767844e+00]
[ 9.70935225e-01]
[ 8.36955488e-01]
[ 4.52258199e-01]
[ 2.08282284e-03]
[ 1.26212556e-03]]
Step: 15000, Loss: 16.296326
[[ 4.93837500e+00]
[ 1.22425616e+00]
[ 6.37905777e-01]
[ 8.61216605e-01]
[ 4.87015426e-01]
[ 1.01356197e-03]
[ 2.91907112e-04]]
Step: 20000, Loss: 16.242428
[[ 5.01489973e+00]
[ 1.20275176e+00]
[ 5.88385046e-01]
[ 8.65994036e-01]
[ 4.92458344e-01]
[ 8.08077923e-04]
[ 1.36406394e-04]]
7次関数:
Step: 5000, Loss: 89.665520
[[ 2.32143140e+00]
[ 1.53826487e+00]
[ 1.07825494e+00]
[ 6.85688794e-01]
[ 4.76195693e-01]
[ 1.93343945e-02]
[ -2.91685792e-05]
[ -4.58549795e-04]]
Step: 10000, Loss: 20.448008
[[ 4.28025007e+00]
[ 1.64763474e+00]
[ 1.00642896e+00]
[ 7.50945508e-01]
[ 4.48578656e-01]
[ 8.27948842e-03]
[ 1.35072204e-03]
[ -1.31144610e-04]]
Step: 15000, Loss: 17.463367
[[ 4.70802307e+00]
[ 1.52105701e+00]
[ 7.85070360e-01]
[ 7.84407139e-01]
[ 4.71286625e-01]
[ 6.25595590e-03]
[ 7.26952916e-04]
[ -1.02008424e-04]]
Step: 20000, Loss: 16.643923
[[ 4.87714958e+00]
[ 1.42680812e+00]
[ 6.72681332e-01]
[ 8.05022180e-01]
[ 4.83814031e-01]
[ 5.21623669e-03]
[ 3.65617452e-04]
[ -9.24795459e-05]]
8次関数:
Step: 5000, Loss: 131.079254
[[ 2.88559628e+00]
[ 1.24204707e+00]
[ 1.10422873e+00]
[ 3.27726752e-01]
[ 2.82681823e-01]
[ 7.58507699e-02]
[ 2.27710828e-02]
[ -2.43731448e-03]
[ -6.57664554e-04]]
Step: 10000, Loss: 28.809479
[[ 4.29814291e+00]
[ 2.01223731e+00]
[ 1.31598830e+00]
[ 3.96377593e-01]
[ 3.03849131e-01]
[ 5.24885505e-02]
[ 1.58709679e-02]
[ -1.51652610e-03]
[ -4.02022008e-04]]
Step: 15000, Loss: 347.819122
[[ 4.51162624e+00]
[ 2.24438071e+00]
[ 1.33831608e+00]
[ 4.33518320e-01]
[ 3.07972670e-01]
[ 4.39823009e-02]
[ 1.46628506e-02]
[ -1.24611927e-03]
[ -3.21475236e-04]]
Step: 20000, Loss: 22.053818
[[ 4.52574492e+00]
[ 2.27882338e+00]
[ 1.34143877e+00]
[ 4.55701292e-01]
[ 3.11556101e-01]
[ 4.05396298e-02]
[ 1.40584493e-02]
[ -1.09993061e-03]
[ -3.34182230e-04]]
9次関数:
Step: 5000, Loss: 5552.634766
[[ 2.33792377e+00]
[ 7.79350579e-01]
[ 6.53970003e-01]
[ 2.03688577e-01]
[ 1.83490813e-01]
[ 4.28588130e-02]
[ 4.29749712e-02]
[ 3.35324835e-03]
[ -1.39146764e-03]
[ -1.60500247e-04]]
Step: 10000, Loss: 194.072403
[[ 4.08490229e+00]
[ 1.23215306e+00]
[ 9.06385481e-01]
[ 2.92194337e-01]
[ 2.03426927e-01]
[ 5.21436632e-02]
[ 3.42375599e-02]
[ 7.02911580e-04]
[ -1.01602043e-03]
[ -9.27555739e-05]]
Step: 15000, Loss: 115.676407
[[ 4.94008017e+00]
[ 1.50322270e+00]
[ 1.05627847e+00]
[ 3.42464149e-01]
[ 2.18068600e-01]
[ 5.66791482e-02]
[ 2.89440639e-02]
[ -7.18827709e-04]
[ -8.12099199e-04]
[ -3.92189686e-05]]
Step: 20000, Loss: 57.366673
[[ 5.27173281e+00]
[ 1.66980028e+00]
[ 1.15057874e+00]
[ 3.71282339e-01]
[ 2.29773715e-01]
[ 5.85983880e-02]
[ 2.56161764e-02]
[ -1.47335778e-03]
[ -6.85952662e-04]
[ -1.29779210e-05]]
10次関数:
Step: 5000, Loss: 2263.479736
[[ 1.01189530e+00]
[ 2.97042310e-01]
[ 2.68756747e-01]
[ 8.43940526e-02]
[ 8.09634402e-02]
[ 2.73650903e-02]
[ 2.04845257e-02]
[ 8.72469600e-03]
[ 2.38272268e-03]
[ -4.05140279e-04]
[ -1.13759939e-04]]
Step: 10000, Loss: 1553.578125
[[ 1.83733785e+00]
[ 4.96752053e-01]
[ 4.51538861e-01]
[ 1.11230105e-01]
[ 1.25275597e-01]
[ 2.73409784e-02]
[ 2.71124728e-02]
[ 7.42600206e-03]
[ 1.07120932e-03]
[ -3.40760889e-04]
[ -7.36084112e-05]]
Step: 15000, Loss: 860.454346
[[ 2.45131707e+00]
[ 7.04376996e-01]
[ 5.79612136e-01]
[ 1.44563615e-01]
[ 1.54916033e-01]
[ 2.92531345e-02]
[ 3.12672704e-02]
[ 6.10585557e-03]
[ 1.98022972e-04]
[ -2.84481910e-04]
[ -4.43308709e-05]]
Step: 20000, Loss: 585.964172
[[ 2.91786623e+00]
[ 9.03335571e-01]
[ 6.71693385e-01]
[ 1.79319546e-01]
[ 1.75147504e-01]
[ 3.20737772e-02]
[ 3.38761806e-02]
[ 4.85530496e-03]
[ -3.96082381e-04]
[ -2.33632789e-04]
[ -2.46588024e-05]]
6次関数
[[5.014899730682373], [1.2027517557144165], [0.5883850455284119], [0.8659940361976624], [0.4924583435058594], [0.0008080779225565493], [0.00013640639372169971]]

g7

6次関数が選ばれました。本当は違うんだけど、グラフは点をしっかり大体通ってます。テストデータで確かめると、4次関数の方がいいってなるのかもしれない。今度はテストデータで確かめたり色々してみようと思います。

TensorFlowの勉強によさそうな記事

TensorFlowのよさそうな解説記事

ここをメンテしていきます。
中学生にも分かるTensorFlow入門 その1 テンソルとはなにか
TensorFlowとは
TensorFlowとは? データフローグラフを構築・実行してみよう
Googleの公開した人工知能ライブラリTensorFlowを触ってみた
TensorFlowで始める深層学習 (1)そもそも何が出来るの?
TensorFlowを遊び倒す! 1-1. MNIST For ML Beginners
TensorFlowで顔識別モデルに最適化した入力画像を生成する
TensorFlow を使った 機械学習ことはじめ (GDG京都 機械学習勉強会)
Windows で動かす TensorFlow
機械学習を始めたい方に見て欲しいTensorflow入門資料まとめ