20190709のTensorFlowに関する記事は4件です。

TensorFlow, keras メモ

keras.layers.Embedding()
この層はEmbedding(埋め込み)層です。この層は、整数にエンコードされた語彙を受け取り、それぞれの単語インデックスに対応する埋め込みベクトルを検索します。埋め込みベクトルは、モデルの訓練の中で学習されます。ベクトル化のために、出力行列には次元が1つ追加されます。その結果、次元は、(batch, sequence, embedding)となります。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

誰でもわかるニューラルネットワーク:「回帰」と「中心への回帰」

ニューラルネットワークを学ぶ際に必要なのが、回帰分析の知識です。ニューラルネットワークのもっとも単純な構造はパーセプトロンと呼ばれ、人の脳の神経細胞を模したものです。これはつぎのように描かれます。

image.png

これをニューロンと呼びますが、人の脳にはこれが無数にあり、情報の伝達をしています。その具合は

image.png

といった具合です。入力を$X_1$, $X_2$、出力をyとしてみましょう。

image.png

これは$X$という入力データが$y$という出力データに変換されている様子を示しています。

回帰分析

連続した値をとるデータに対して、別のデータにより定量的な関係をモデル化するとき、それを回帰と呼びます。そして、回帰を用いてデータを分析することを回帰分析というのです。この回帰分析の最も基本的なモデルを線形回帰モデルと呼びます。

$$ y=f(X) = aX +b $$

のようにあらわされます。$a$は回帰係数、$b$は切片です。図で表すと、

image.png

というような形になります。1つの直線が$X$と$y$の関係を表現しているのが分かります。先ほど、データは連続しているといいましたが、とびとびの値をとるときには分類といいます。この直線はデータの分類にも役に立ちます。一般にニューラルネットワークの文脈では分類を説明することが多いので、直線で2つの種類のデータを分類するととらえるほうがなじみやすいかもしれません。

平均への回帰

少し紛らわしいのが平均への回帰です。こちらは普遍的な統計的な現象を表します。コインを複数用意し、コインの表が出たら1、裏が出たら-1とします。ひとつひとつについて、何回かコインを投げると、その値の平均値は0にはならずに偏りを持ちます。大きな偏りももったコインについて再度コインを投げると、その平均は最初のコイン投げの全体の平均に近くなります。これは偶然により生じた偏りが今回は起こらないからです。このような現象を平均への回帰といいます。

参考:
「シミュレーターでまなぶニューラルネットワーク」(アマゾンkindle出版)
((https://www.amazon.co.jp/gp/product/B07MJ9R2T8?pf_rd_p=7b903293-68b0-4a33-9b7c-65c76866a371&pf_rd_r=4JRRRHRRE1FHXSY1EP5G))

「統計学の7原則」(パンローリング)

誰でもわかるニューラルネットワーク:ノイズの影響をテンソルフロー・プレイグラウンドで試してみた。
https://qiita.com/innovation1005/items/584e66edb0e08f037a80

誰でもわかるニューラルネットワーク:ロジスティック回帰をテンソルフロー・プレイグラウンドで試してみた。
https://qiita.com/drafts/5750dce7aecbb350264d

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

誰でもわかるニューラルネットワーク:「回帰」と「平均への回帰」

ニューラルネットワークを学ぶ際に必要なのが、回帰分析の知識です。ニューラルネットワークのもっとも単純な構造はパーセプトロンと呼ばれ、人の脳の神経細胞を模したものです。これはつぎのように描かれます。

image.png

これをニューロンと呼びますが、人の脳にはこれが無数にあり、情報の伝達をしています。その具合は

image.png

といった具合です。入力を$X_1$, $X_2$、出力をyとしてみましょう。

image.png

これは$X$という入力データが$y$という出力データに変換されている様子を示しています。

回帰分析

連続した値をとるデータに対して、別のデータにより定量的な関係をモデル化するとき、それを回帰と呼びます。そして、回帰を用いてデータを分析することを回帰分析というのです。この回帰分析の最も基本的なモデルを線形回帰モデルと呼びます。

$$ y=f(X) = aX +b $$

のようにあらわされます。$a$は回帰係数、$b$は切片です。図で表すと、

image.png

というような形になります。1つの直線が$X$と$y$の関係を表現しているのが分かります。先ほど、データは連続しているといいましたが、とびとびの値をとるときには分類といいます。この直線はデータの分類にも役に立ちます。一般にニューラルネットワークの文脈では分類を説明することが多いので、直線で2つの種類のデータを分類するととらえるほうがなじみやすいかもしれません。

平均への回帰

少し紛らわしいのが平均への回帰です。こちらは普遍的な統計的な現象を表します。コインを複数用意し、コインの表が出たら1、裏が出たら-1とします。ひとつひとつについて、何回かコインを投げると、その値の平均値は0にはならずに偏りを持ちます。大きな偏りももったコインについて再度コインを投げると、その平均は最初のコイン投げの全体の平均に近くなります。これは偶然により生じた偏りが今回は起こらないからです。このような現象を平均への回帰といいます。

ニューラルネットワークの基本:分類問題

ニューラルネットワークの学習でまず最初に出てくるのが分類問題です。もっとも目にするのはアヤメの問題です。アヤメにはいくつかの種類があり、その種類をニューラルネットワークで分類しましょうという問題です。その背後にあるのが線形回帰の問題です。つぎのような図を見たことがあると思います。

image.png

単純パーセプトロンという最も簡単なニューラルネットワークです。さきほどのニューロンを模して造られています。形が似ているのに気づかれると思います。入力が$X_1$, $X_2$で、出力がyは先ほどと同じです。つぎの図を見てください。x軸が$X_1$、y軸が$X_2$として$y$を赤と青の色としましょう。

image.png
出所:playground.tensorflow.org

赤と青の点が2か所に分かれて分布していますが、これを分類してくれるのが線形回帰です。赤と青の点は連続値ではないことに注意をしてください。つぎの図が分類の結果です。

image.png

直線を引いて分類してみましょう。

image.png

先ほどの図でいうと

image.png
出所:playground.tensorflow.org

といった感じです。白い線で青い点と赤い点が分離されました。これは線形回帰の原理を使っているのです。

すでにお気づきのことと思いますが、単純パーセプトロンは1層のニューラルネットワークになります。おなじ一層のニューラルネットワークでも複数のニューロンをもつことができます。その際には複数の直線を用いて、データを分類していることになります。また、1つのニューロンに複数の入力データが与えらえると、これは他重回帰をしているのと同じになります。したがって、一層のニューラルネットワークでも随分とたくさんのことができるはずです。

層の数が増えると

では層の数が増えるとどうなるでしょうか?そうなるとより複雑なことができそうなことは想像がつきます。しかし、どのようにでしょうか?それは線形回帰ではなく、非線形回帰の分析となるのです。それでも多くの問題は4層程度あれば十分だと考えられています。では最近はやりの層の数が膨大に多い、深層学習の場合はどうでしょうか?より複雑な構造をネットワークに持たせ、かつ層の数をふやすと、人の目や鼻、耳、ビルの角の特徴、窓の様子など、より特徴的な細かな部分を分析できるようなるのです。そして、このような能力に将来の期待が寄せられているのです。

参考:
playground.tensorflow.org https://playground.tensorflow.org

「シミュレーターでまなぶニューラルネットワーク」(アマゾンkindle出版)
((https://www.amazon.co.jp/gp/product/B07MJ9R2T8?pf_rd_p=7b903293-68b0-4a33-9b7c-65c76866a371&pf_rd_r=4JRRRHRRE1FHXSY1EP5G))

「統計学の7原則」(パンローリング)

「PythonとKewrasによるディープラーニング」(マイナビ)

誰でもわかるニューラルネットワーク:ノイズの影響をテンソルフロー・プレイグラウンドで試してみた。
https://qiita.com/innovation1005/items/584e66edb0e08f037a80
image.png

誰でもわかるニューラルネットワーク:ロジスティック回帰をテンソルフロー・プレイグラウンドで試してみた。
https://qiita.com/drafts/5750dce7aecbb350264d

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【python】TensorFlowで構築したモデルをexeで実行出来るようにする

pythonコードを単体で動くexeにしたいとき、pyinstallerが便利だったのでメモ。

やりたかったこと

TensorFlowで構築したモデルを、PCに詳しくない人にも使ってもらえるようにしたい。

TFモデル構築・保存
→hd5ファイルを呼び出して推論するpyファイルを作成
→そのpyファイルをexe化
→exeファイルをローカルに置くだけでwindows上で使えるように
というイメージ

環境

Windows 10 64bit
Anaconda (python 3.5)

インストール

pyinstallerはpyファイルをコマンド一発でexeファイルに変換してくれる便利なやつ

pip install pyinstaller

exeファイル作成コマンド

--onefileオプションを付けるとexe単体で実行出来るようになる

pyinsaller PATH/hogehoge.py --onefile

出てきたエラー

ライブラリが見つからないよエラー

conda環境で実行したファイルをexe化したためか、以下のようなエラーが出た。

OSError: Python library not found: libpython3.5m.so.1.0, libpython3.5mu.so.1.0, libpython3.5.so.1.0

その場合はconda環境のライブラリが置いてあるパスを共有ライブラリ検索パスに追加する。(私の場合は/home/USER_NAME/anaconda3/lib だった)

出来たファイルが実行出来ない?

いくつかの手順を踏んで無事ファイルが出来た...!と思いきや、何故かexeファイルが実行出来ない。
ここで初めて気付くが、コマンド実行していたのがlinuxだった。実はwindowsで使用するためのexeは、windowsOSでの作成が必須らしい。ということでwindowsPCに切り替えて実行。無事exeファイル化出来ました。

とにかくexeのファイルサイズが大きい

無事に出てきたexeファイルだったが、今度は「ファイルサイズ、大きくない...?」問題が出てきた。
ということで色々調べていると、同じことを考えている人がいた。先人の知恵ありがたい...

[Anaconda] Pyinstallerで生成される実行ファイルを数百MB -> 数十MBに削減する方法
(https://qiita.com/napinoco/items/068ce8ef6ef4309966b1)

しかし、結論、今回はファイルサイズをうまく小さくすることが出来なかった。というのも、今回はTFで比較的複雑な演算をしており、上記リンクにあるような解決策をそのまま応用することが厳しそうだったためである。これについては他にやり方がないか調査中。

pyファイルでのファイルの呼び出し方

exeファイルを配布することを考えると、絶対パスをベタ書きだとファイルの呼び出しエラーが出てしまう。今回はpyファイル内で自分のパスを取得して、そこを基点にファイルを呼び出す形式を取った。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む