Tensorflow Keras〜初めのトレーニング_2:前処理〜

イントロダクション

前回はトレーニングの準備として、MNISTのデータを調べました。今回は前処理を行います。参考サイトは前回と同じです

関連ページ一覧

  1. Tensorflow Keras 〜初めてのKeras〜
  2. Tensorflow Keras Errors〜"python is not installed as a framework."〜
  3. Python Tensorflow 〜初めての人工知能(TensorFlowインストール)〜
  4. Tensorflow Keras〜初めのトレーニング_1〜

処理概要

  1. 前処理を行う
  2. 機械学習のモデル構築
  3. 同様にコンパイル
  4. 結果の表示(学習処理、学習の評価、予測)

とりあえずは、データをグラフ表示してみます。

<コード>

# TensorFlow and tf.keras
import tensorflow as tf
from tensorflow import keras

# Helper libraries
import numpy as np
import matplotlib.pyplot as plt

print(tf.__version__)

# Get MINST data
fashion_minst = keras.datasets.fashion_mnist
(train_images, train_labels), (test_images, test_labels) = fashion_minst.load_data()

# Chcke MINST data
print("トレーニングイメージ数(train_images.shape):%s " % (train_images.shape,))
print("トレーニングラベル数(len(train_labels)): %d" % len(train_labels))
print("トレーニングラベルの中身: %d" % train_labels[0])

# First Check IMG
plt.figure()
plt.imshow(train_images[0])
plt.colorbar()
plt.grid(False)
plt.show()

前処理

参考サイトによると以下のように記載があります。

ニューラルネットワークモデルにフィードする前に、
これらの値を0から1の範囲にスケーリングします。
  これには、画像コンポーネントのデータ型を整数からfloatにキャストし、
  255で割ります。これは、画像を前処理する関数です。

どうやら0〜1の範囲に値を置き換える必要があるようです。

そして変更してから実行します。表示はできたけどスクロールするとMacではクラッシュしてしまうようです。(自分はしました。)今回は機械学習をやるのでグラフ表示は後回しにします。

【追伸】グラフはTensorBordで表示したいと思っています。

結局

データが0-255の範囲で設定されているのでそれを0-1の範囲に変更するということをしました。

機械学習モデルの構築

# Create Model set layers
model = keras.Sequential([
 keras.layers.Flatten(input_shape=(28, 28)),
 keras.layers.Dense(128, activation=tf.nn.relu),
 keras.layers.Dense(10, activation=tf.nn.softmax)
])

機械学習モデルのコンパイル

レイヤーを設定する
ニューラルネットワークの基本的な構成要素はレイヤーです。レイヤーは、そこに送られたデータから表現を抽出します。そして、うまくいけば、これらの表現は当面の問題にとってより意味があります。

ディープラーニングの大部分は、単純なレイヤーを連鎖させることから成ります。同様にtf.keras.layers.Dense、ほとんどのレイヤーにはトレーニング中に学習されるパラメータがあります。

学習結果の1つを表示します。上が実行結果です。

モデルの訓練

コードとしては1行で終わります。 

model.fit(train_images, train_labels, epochs=5)

ここで渡しているのはイメージラベルを渡しています、最後の「epocks」はこのサイトで調べました。

単にepochsという指標に試行が達するまで訓練します

ということのようです。※意味はわかっていません。

とりあえずは上の画像が予測の結果です。

そして、テストデータの中の1つを取得してその予測結果を表示しました。

注意点としては

model.predictデータのバッチ内の各画像に対して1つずつ、リストのリストを返します。バッチ内の(唯一の)画像の予測を取得します

ということです。コードで書くと下のようにやってくださいということでした。

# Add the image to a batch where it's the only member.
img = (np.expand_dims(img,0))

print(img.shape)

predictions_single = model.predict(img)

print(predictions_single)

なんだかわかったような、わからないような。。。釈然としませんが今回はここまでにしておきます。


Tensorflow Keras〜初めのトレーニング_1〜

イントロダクション

前回は、TensorflowのKerasを使用して大まかな機械学習の「流れ」を追いかけてみました。

Tensorflow Keras 〜初めてのKeras〜
今回は、処理の内容について学んでいきます。

[補足]
1.Fashion MNISTを使用する
2.tensorflowでMNISTをロードできる
fashion_mnist = keras.datasets.fashion_mnist

(train_images, train_labels), (test_images, test_labels) = fashion_mnist.load_data()

ここで処理を一度実行してみます。自分の環境ではエラーが出ました。「pyplot」のインポートができませんでした。解決策はこちら

初めのニューラルネットワーク

基本的な分類処理を行うようです。「Basic classification」

上に記載したように、MNISTからトレーニングデータを取得(ロード)して機械学習を行います。そして参考サイトには以下のように記載されています。

データセットをロードすると、4つのNumPy配列が返されます。

  • train_imagesそしてtrain_labels配列は、トレーニングセットモデルを学ぶために使用する-theデータを。
  • モデルはテストセット、the test_images、およびtest_labels配列に対してテストされます。

この点に注意して学習を進めます。

分類(Classification)について

MNISTの画像データ(fashion_mnist)は以下のように分類されています。

ラベル クラス
0 Tシャツ/トップ
1 ズボン
2 路肩に寄せて下さい
3 ドレス
4 コート
5 サンダル
6 シャツ
7 スニーカー
8 バッグ
9 アンクルブーツ

そして下のような注意点があるので指示の通りにします。

各画像は単一のラベルにマッピングされます。
クラス名はデータセットに含まれていないので、
後で画像をプロットするときに使用するために、それらをここに保存します。

<コード>

class_names = ['T-shirt/top', 'Trouser', 'Pullover', 'Dress', 'Coat', 
               'Sandal', 'Shirt', 'Sneaker', 'Bag', 'Ankle boot']


データを調べる(コード実行)

下のようなコードになりました。

# TensorFlow and tf.keras
import tensorflow as tf
from tensorflow import keras

# Helper libraries
import numpy as np
import matplotlib.pyplot as plt

print(tf.__version__)

# Get MINST data
fashion_minst = keras.datasets.fashion_mnist
(train_images, train_labels), (test_images, test_labels) = fashion_minst.load_data()

# Chcke MINST data
print("トレーニングイメージ数(train_images.shape):%s " % (train_images.shape,))
print("トレーニングラベル数(len(train_labels)): %d" % len(train_labels))
print("トレーニングラベルの中身: %d" % train_labels[0])

今回はここまでにしておきます。

関連ページ一覧

  1. Tensorflow Keras 〜初めてのKeras〜
  2. Tensorflow Keras Errors〜"python is not installed as a framework."〜
  3. Python Tensorflow 〜初めての人工知能(TensorFlowインストール)〜

 

[rakuten ids="bagray:10006253"]

Tensorflow Keras 〜初めてのKeras〜

イントロダクション

Tensorflowでの計算処理をするのに色々試したけど結局はチュートリアルを見るのが一番ということになりました。

そしてここから学習を始めるように書いてあったので、そのようにします。

tensorflow.keras ※参考サイト

ここのチュートリアルから始めます。とりあえずは以下のコマンドを叩いてください。

!pip install -q pyyaml

しかし。自分の環境ではうまく行かなかったので以下のコマンドを叩きました。

pip3 install matplotlib

そして改めて「!pip〜」のコマンドを叩きました。しかしエラーが出ました。。。

とりあえずは無視してそのまま実行することにして。。。以下の起動確認をします。

kerasTest.pyを作成しました。下のコードです。 

import tensorflow as tffrom tensorflow.keras import layers

print(tf.VERSION)print(tf.keras.__version__)

そして実行します

python kerasTest.py

問題なく処理結果が出力されたのでとりあえずは問題なさそうです。

順次モデル※翻訳した時の文言

そして、単純なモデルを作成します。※コピペ

model = tf.keras.Sequential()
# Adds a densely-connected layer with 64 units to the model:
model.add(layers.Dense(64, activation='relu'))
# Add another:
model.add(layers.Dense(64, activation='relu'))
# Add a softmax layer with 10 output units:
model.add(layers.Dense(10, activation='softmax'))


「model = tf.keras.Sequential()」で空のモデルを作ります。ちなみにこの行以降は「何か」をモデルに追加しているのですが、意味はわかりませんでした。

レイヤー

model.add(layers.Dense(XX, activation='関数名')
  • activation:レイヤーの起動機能を設定します。このパラメーターは、組み込み関数の名前または呼び出し可能オブジェクトとして指定されています。デフォルトでは、アクティブ化は適用されません。
  • kernel_initializerそしてbias_initializer:レイヤーの重みを作り出す初期化スキーム(カーネルとバイアス)。このパラメーターは名前または呼び出し可能オブジェクトです。これはデフォルトで"Glorot uniform"イニシャライザになります。
  • kernel_regularizerそしてbias_regularizer:例えばL1またはL2正則としてレイヤの重み(カーネルとバイアス)、適用正則化スキーム。デフォルトでは、正則化は適用されません。

下はレイヤー作成のサンプルコードです。

# Create a sigmoid layer:layers.Dense(64, activation='sigmoid')# Or:layers.Dense(64, activation=tf.sigmoid)

# A linear layer with L1 regularization of factor 0.01 applied to the kernel matrix:layers.Dense(64, kernel_regularizer=tf.keras.regularizers.l1(0.01))

# A linear layer with L2 regularization of factor 0.01 applied to the bias vector:layers.Dense(64, bias_regularizer=tf.keras.regularizers.l2(0.01))

# A linear layer with a kernel initialized to a random orthogonal matrix:layers.Dense(64, kernel_initializer='orthogonal')

# A linear layer with a bias vector initialized to 2.0s:layers.Dense(64, bias_initializer=tf.keras.initializers.constant(2.0))

トレーニングと評価

今までの部分を整理します。

# 空のモデル作成
model = tf.keras.Sequential([
# レイヤーを追加
layers.Dense(64, activation='relu'),
# もう1つ(なぜ追加しているかは不明)
layers.Dense(64, activation='relu'),
# ソフトマックスを追加
layers.Dense(10, activation='softmax')])

# 学習プロセスの構成
model.compile(optimizer=tf.train.AdamOptimizer(0.001),
              loss='categorical_crossentropy',
              metrics=['accuracy'])

ここまできたら、あとは学習と評価をします。

model.fit(data, labels, epochs=10, batch_size=32)
 実行結果は下のようになりました。ソースはGITにアップしています
エポック1/10 
1000/1000 [============================ 218us /ステップ - 損失:11.6670  -  categoryorical_accuracy :0.0950 
Epoch 2/10 
1000/1000 [=========================  -   -  0秒43us / step  - 損失:11.5966 -  Categorical_accuracy:0.1040 
Epoch 3/10 
1000/1000 [============================================================= 1 0 41us / step  -  loss :11.5854 - categorical_accuracy:0.1160 
エポック4/10 
1000分の1000 [==============================] - 0の50US /ステップ- 喪失:11.5768  -  categorical_accuracy:0.0970 
Epoch 5/10 
1000/1000 [=====================================================================================================================================との関係はありません。 / step  -  loss:11.5758  -  categorical_accuracy:0.1000 
Epoch 6/10 
1000/1000 [=============================]  - 0秒62us /ステップ - 損失:11.5733  -  Categorical_accuracy:0.1020
エポック7/10 
1000/1000 [=======================  -  61秒/ステップ - 損失:11.5774  -  categoryorical_accuracy :0.1050 
Epoch 8/10 
1000/1000 [=========================  -   -  61秒/ステップ - 損失:11.5712 -  Categorical_accuracy:0.1110 
Epoch 9/10 
1000/1000 [========================================================================================== 1 :11.5688  -  categorical_accuracy:0.1220 
Epoch 10/10 
1000/1000 [=======================================================================================  -   -  1秒60秒/ステップ - 損失:11.5668  - カテゴリ精度:0.1240


現段階でわかったこと

Tensorflowでの機械学習は以下の手順を踏む

  1. モデルを作る
  2. モデルにレイヤーというものを追加する
  3. オプティマイザを使って学習プロセスを構成する
  4. 評価、予測などを行う

モデル、レイヤー、オプティマイザの3つを使用して学習プロセスの構成及び評価、予測などを行う。そしてこれらを以下の手法で拡張することができる

  1. モデルのサブクラス化:学習モデルの拡張
  2. カスタムレイヤー:レイヤー(シグモイド、ソフトマックスなど)
  3. コールバック:下記参照

今日はこの辺でいっぱいいっぱいです。

でわでわ。。。

[rakuten ids="aburajin:10011766"]

Python Tensorflow 〜初めての人工知能〜

イントロダクション

【in 2019】
今流行りのAIについて調べてみたものの、全くわからなかったのですが。このまま引き下がるのも男がすたる。。。※本当は必要になってきたので。。。

【in 2023】
以前学習したものの、使うレベルまでいかなかったので再度学習することにしました。しかし、イマイチ理解に及びませんでしたが、そのとっかかりとなるようなことをまとめました。

TensowFlow

Pythonで学習開始します。使用できる言語は以下ですが、「すべてを網羅できていない」ではなく、たぶん「網羅していない」というところでした。
理由としては、「必要ない」からです。まぁJava言語自体がいろいろとできる言語ですので。。。※Java言語の親はC言語です。

  1. Java: 全てを網羅(バンドル)できていないようです。が使用可能
  2. Go: 同上
  3. C: 注意書きなし→問題なく使える
  4. Python: 注意書きなし
  5. JavaScript
  6. Swift

いろんな言語で使用できるようです。しかしここはPythonで行きます。使いやすいのと、日本語ドキュメントがたくさんあるためです。
そして、個人的に「JavaとPythonの処理スピードの違い」をここではっきりとさせたいので、同じアプリをJava版とPython版で作成してみたいと思っている次第です。※道のりは遠そうです。。。

インストールTensorFlow

TeonsorFlowのインストールと起動、テストできる環境の構築をしたいと思います。

Jupyterを使う

JupyterをインストールするときにAnacondaも一緒にインストールされます。JupyterはAnacondaで動くためです。

インストール

Jupyterをインストールします。インストーラーがあるので、簡単にイけます。
インストール後に、Anaconda Navigaterを起動、TensorFlowをインストールします。

AnacondaNavigater

次に、AnacondaNavigaterでTensorFlowを追加します。まずは、設定を開きます。

そして、Createボタンを押下します。

TensorFlowのインストールする領域を作成します。Nameのところに「tensorflow」と入力

作成したところに再生ボタンのようなものがありますのでそれをクリックします。

そして下のコマンドをたたきます。

pip install tensorflow

これでインストールが完了です。

TensorFlowの実行

jupterで下のように、入力してPythonを実行してみると起動確認になります。

Windows版

まずは、参照するドキュメントを確認します。
ブラウザでことが足りるような形でのチュートリアルになっていました。チュートリアルに全部書いてあります。
Google Colaboratoryというアプリでブラウザ上でのプログラム起動ができるようです。使い方などがわかっていないのでイマイチですが、概要などわかりやすく書いていました。

プログラムの実行も行ったようですが、プログラムの全体が見えないのでよくわかりませんでした。。。

ちょっと頭をひねってみます。

Mac版 ※昔やったやつ

ここのサイトを見て行います。※Macへのインストールです。

1. virtualenvをインストールする

$pip3 install -U virtualenv

pythonがインストールしていない場合は以下のコマンドでインストール

brew update brew install python3  # Python 3

同様にHOME_BREWがインストールされていない場合

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" < /dev/null 2> /dev/null

2.virtualenvを作成する

virtualenvを作成するディレクトリに移動

mkdir ./venv

virtualenvを作成する

virtualenv --system-site-packages -p python3 ./venv

./venv/bin/activeを起動する

source ./venv/bin/active

virtualenvを終了する

deactivate

virtualenv上でtensorflowをインストールする

pip3 install --upgrade --ignore-installed https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow-1.8.0-py3-none-any.whl

引数にURLを入力しています、URLの赤い字の部分にバージョン番号をセットしてインストールします。

https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow-1.8.0-py3-none-any.whl

そして、インストール完了確認

python -c "import tensorflow as tf; tf.enable_eager_execution(); print(tf.reduce_sum(tf.random_normal([1000, 1000])))"

このままコピペでコンソールに入力してやります。実行結果は以下です。

(venv) takuminoMacBook-Pro:venv takk$ python3
Python 3.7.1 (default, Nov  6 2018, 18:49:54) 
[Clang 9.0.0 (clang-900.0.39.2)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow
/Users/takk/WebPage/minim_server/python/venv/lib/python3.7/importlib/_bootstrap.py:219: RuntimeWarning: compiletime version 3.6 of module 'tensorflow.python.framework.fast_tensor_util' does not match runtime version 3.7
  return f(*args, **kwds)
>>> exit()

関連ページ一覧

  1. Tensorflow Keras〜初めのトレーニング_1〜
  2. Tensorflow Keras〜初めのトレーニング_2:前処理〜
  3. TensorFlow Keras〜テキストの分類〜
  4. TensorFlow Keras〜回帰、準備から予測まで〜

[rakuten ids="mtgec-beauty:10000599"]

Java TensorFlow 〜機械学習を始める(Mavenインストール)〜

イントロダクション

テキストRPGを作成するのにTRPG的なものを作成しようと思っております。そうすると、言語に対応する為の機械学習機能が必要になるので世間に浸透しつつある「Tensor Flow」を使用して見ようとなりました。

準備

とりあえず、TensorFlowの「Jarファイル」をダウンロードしてくればいけるだろうと思いますので、ダウンロードします。

ソースコードは下のサイトからコピってきました。
https://www.tensorflow.org/install/install_java

動かしてみる

import org.tensorflow.Graph;
import org.tensorflow.Session;
import org.tensorflow.Tensor;
import org.tensorflow.TensorFlow;

public class FirstTensor {

    public static void main(String[] args) throws Exception {
        try (Graph g = new Graph()) {
            final String value = "Hello from " + TensorFlow.version();

            // Construct the computation graph with a single operation, a constant
            // named "MyConst" with a value "value".
            try (Tensor t = Tensor.create(value.getBytes("UTF-8"))) {
                // The Java API doesn't yet include convenience functions for adding operations.
                g.opBuilder("Const", "MyConst").setAttr("dtype", t.dataType()).setAttr("value", t).build();
            }

            // Execute the "MyConst" operation in a Session.
            try (Session s = new Session(g);
                 Tensor output = s.runner().fetch("MyConst").run().get(0)) {
                System.out.println(new String(output.bytesValue(), "UTF-8"));
            }
        }
    }
}

結果

動きませんでした。。。。

原因は「ネイティブライブラリがありません」とエラーメッセージに書いてあります。

というわけで本題

本題というのは環境構築のことです。チュートリアルに従いセットアップを行います。

チュートリアルはこちらです。(Googleのサイトです)

結論からいうと「Mavenでインストールを行う。」らしいです。

じゃあやって見よう

まず、プロジェクトを作成するときに「Maven」で作成します。詳細はこちらを参照してください。

まずは、プロジェクトを作成したばかりの状態を下の図に示します。

そして「pom.xml」ファイルがあるのでそれを開きます。

上記のような感じで作成されています。「感じ」というのは内容が作成したプロジェクトの名前により値が変わる為そのように記載しました。

そして、<dependencies>タグを追加します。下のように多少入力すると補完してくれます。

下のように入力します。

ここからがTensorFlowのセットアップになります。

サイトに以下のような記載があります。

このような記載は、いろんなサイトであります。
これは「Maven」で「インストールできるよ」という意味です。

そんなわけで上記の記述をコピーしてペってやります。

すると上記のような吹き出しが見れますので下にある「Import Changes」をクリックします。※右下の吹き出しにあるリンクの左側。

すると下のようなインジケータが起動します。

TensorFlowのインストールが始まります。
結構長いです。。。

参考サイトにはこれだけと書いてあります。

インストール完了

早速、コードをコピって実行して見ました。

よし!

以上です。

駄菓子菓子。。。

TensorFlow Javaのチュートリアルは、PythonとかC++でTensorFlowについて理解のある人向け担っているようです。※先にPython, C++のドキュメントを呼んでくださいみたいな記述がありました。

pythonでの実行は、自分の好みの問題により見送ることにしてC++でやろうと思います。。。