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インストール)〜

 

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. コールバック:下記参照

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

でわでわ。。。

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

イントロダクション

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

Pythonで学習開始します。使用できる言語は以下

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

いろんな言語で使用できるようです。しかしここはPythonで行きます。

インストールTensorFlow

ここのサイトを見て行います。※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〜回帰、準備から予測まで〜

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++でやろうと思います。。。