dispose tf.Tensorやtf.Variableからdispose()を呼び出すと、そのオブジェクトがパージ(一掃)され、オブジェクトが占めていたGPUメモリが解放されます。 const x = tf.tens […]
続きを読むカテゴリー: TensorFlow.js 入門
14_7:訓練
TensorFlow.jsではまた、訓練を実行し勾配をしきりに計算するAPIも提供されています。 演算とAPIを組み合わせ、出力と入力で自動的に微分する関数の例を示します。 勾配 tf.grad tf.grads tf. […]
続きを読む14_6:モデルとレイヤー
モデル モデルは、プログラミング概念で言う関数のようなものです。モデルに入力を与えると、モデルは希望する出力を生み出します。 TensorFlow.jsには、モデルの作成方法が2通りあります。 直接演算を使用する // […]
続きを読む14_5:演算
TensorFlow.jsではテンソル上で実行できる演算が提供されています。これらの演算は、そのテンソルの値を変えるのではなく、新しいテンソルを返します。 算術演算 – tf.add (a, b), tf.sub (a, […]
続きを読む14_4:変数
TensorFlowを使ってモデルを構築したり訓練するときには、プログラムの実行中に更新したり変更したりできる値をメモリ位置に保持する必要があります。TensorFlowではこれは変数によって行われます。 既存の変数に新 […]
続きを読む14_3:テンソルの作成
よく使われる例 – tf.tensor (values, shape?, dtype?) const shape = [2, 3]; const a = tf.tensor([1, 2, 3, 4, 5, 6], sha […]
続きを読む14_2:テンソル(tensor)
テンソル(tensor)は、TensorFlowにおける基本単位で、根幹的なデータ構造です。 テンソルは、数値のn次元の集まりで、ランク(rank)とシェイプ(shape)、タイプ(type)によって識別されます。 – […]
続きを読む14_1:TensorFlow.jsとは?
ブラウザ内で行える機械学習 ブラウザで機械学習が行えるということは、ライブラリやドライバをインストールしなくても、プログラムがWebページ上で実行できる、ということです。、TensorFlow.jsは自動的にWebGLを […]
続きを読む14:Tensorflow.js チュートリアル – TensorFlow.jsのコア概念入門
以下は「Tensorflow.js Tutorial – Introduction to TensorFlow.js and Core Concepts」ページを永井が独自に日本語に訳したものです。 Tensorflow […]
続きを読む13_7:グラフを追加
最後に、メインのJavaScriptのforループの外側にさらにループを追加し、訓練回数だけ繰り返すようにします。また学習の進み具合の分かるグラフや、訓練のスピード値を追加します。 このリンクをクリックすると、最終のカー […]
続きを読む13_6:報酬を割引き、勾配を重みに適用する
いよいよカートポールサンプルの核心に入っていきます。ここでは、「報酬を割引き、それを反映した勾配を重みに適用する」ということを行います。具体的には、「割引率と、全ゲームで集めた全報酬から、報酬の割引を実行する。そして報酬 […]
続きを読む13_5:勾配と報酬の記録
得られた勾配は、ゲームの全ステップ(内側のforループ)で一度記録し、1ゲームの終了後、外側のforループで、ゲームごとに記録します。また報酬は、ゲームの全ステップでゲームがつづいている間は配列に1を追加しゲームが終わる […]
続きを読む13_4:行動を組み込む
つづいて、モデルを作成し、行動を組み込んでいきます。ただし通常と異なり、モデルにはオプティマイザーは指定せず、コンパイルもしません。 const buildModel = () => { const model = […]
続きを読む13_3 カートポールを動かす
以降では、「TensorFlow.js Example:Reinforcement Learning: Cart Pole」サンプルのコードを参考に、カートポールサンプルのシンプルバージョンを作成していきます。 これは、 […]
続きを読む13_2 強化学習とは?
強化学習とは、「ディープラーニングを使用した強化学習とその可能性」(PDFファイル)に、次のように説明されています。 試行錯誤を通じて、「最終的な報酬を最大化するような行動」を学習することを言う。 さらに同ファイルには、 […]
続きを読む13_1 カートポールサンプル シンプルバージョン
次の動画は、本稿で最終的に作成するカートポールサンプルの実行画面を録画したものです。 カートポールとは、車輪の付いた台座(カート)の上に細長い棒(ポール)を置いものを言います。カートポールサンプルは、強化学習と呼ばれる機 […]
続きを読む13 強化学習:カートポールサンプルを探る
本稿では、「TensorFlow.js Example:Reinforcement Learning: Cart Pole」で公開されている、「強化学習:カートポール」サンプルをもとに、TensorFlow.jsによる強 […]
続きを読む12_7 重みパラメータを探る
「6_1 モデルの中身 その1」で見た重みの数値は、tf.layers.LayerクラスのgetWeights()メソッドで調べることができます。 // 最初のレイヤー const firstLayer = model. […]
続きを読む12_6 3つのモデルの訓練と評価、推測
モデルを訓練して、評価、推測します。 HTMLファイルでは、関係するJavaScriptコードを次の順番で読み込みます。 <script src="https://cdn.jsdelivr.net/npm […]
続きを読む12_5 線形回帰モデルと多層パーセプトロン回帰モデル2種
データが揃ったので、モデルを作成して訓練します。モデルは「boston-housing」サンプルのindex.jsファイルに記述されている3つのものを使用します。 model.jsファイルを作成して、次のコードを記述しま […]
続きを読む12-4 エクセルを使ったデータの標準化と標準偏差
TensorFlow.jsとは直接関係ありませんが、エクセルには標準化や標準偏差を求める専門の関数があるので、TensorFlow.jsよりもはるかに容易に結果の数値を得ることができます。 data1とdata2があると […]
続きを読む12_3 データの標準化と標準偏差
データの標準化とは統計学の用語で、「データ科学便覧」サイトの「統計学における標準化」ページによると、 統計学における標準化 (standardization) とは,与えられたデータを平均が0で分散が1のデータに変換する […]
続きを読む12_2 ボストンデータセットのロードとtf.Tensorオブジェクトへの変換
機械学習はデータがないと始まらないので、まずはボストンデータセットの読み込みから始めます。 以降では、「boston-housing」で使用されているコードを参考にしています。ただし、TensorFlow.jsのサンプル […]
続きを読む12_1 ボストンデータセット
「boston-housing」では、ボストンデータセットと呼ばれる、ボストン市郊外における地域別の住宅価格のデータセットが使われています。このデータは、Googleのデータ保存サイトからそれぞれ、train-data. […]
続きを読む12 ボストンデータセットによる多変数回帰
「5 ビール売上本数の予測」では、最高気温とビールの売上本数が比例関係にあるととらえ、最高気温を説明変数、売上本数を目的変数として、直線の方程式を得ることで、データにない最高気温の日の売上本数を予測しました。この方法は単 […]
続きを読む11 TensFlow.js サンプルファイルの実行方法
TensFlow.jsのサンプルは、「tensorflow/tfjs-examples」ページで公開されています。以下はWindows上でTensFlow.jsサンプルを実行するまでの基本的な手順です。 [サンプルファイ […]
続きを読む10_4 Node.jsのJavaScriptコードの記述と実行
Node.jsで実行するJavaScriptコードを記述します。 // Node.js用flickrapiモジュール const Flickr = require("flickrapi"); // N […]
続きを読む10_3 Webアプリ用のFlickr API KeyとSecretの入手
Node.jsアプリからFlickサイトにアクセス、ネコと犬の写真をダウンロードするので、Flickrで提供されているWeb APIを利用します。 そのためには、Flickrにアカウントを作る必要があります。この「Fli […]
続きを読む10_2 Node.js環境の作成
flickrサイトからネコと犬の画像をダウンロードし、適切なサイズに縮小して、フォルダ別に保存するという作業は、Webブラウザの環境でも行えないことはないでしょうが、それよりもNode.jsといううってつけのJavaSc […]
続きを読む10_1 Kerasモデルを訓練し、TensorFlow.jsモデルに変換して、サーバーに配置する
ネコと犬を区別するKerasモデルをインターネット上で探すと、「ardamavi/Dog-Cat-Classifier」というページが見つかったので、これを使わせてもらうことにします。ページ右端にある[Clone or […]
続きを読む10 flickrからテスト用データを入手する
訓練用データは品質の高いものを使う必要があります。しかし、訓練したモデルをテストしたい場合には、テスト用データの入手先としてflickrサイトを利用する手っ取り早い方法があります。 以降では、ネコと犬を判別するKeras […]
続きを読む9_2_3 Keras由来のモデルの使用
Webサーバーに置いたKeras由来のモデル(「oarriaga/face_classification」のモデルをtensorflowjs converterで変換したモデル)は、次のようなコードで読み込み、「fer2 […]
続きを読む9_2_2 表情認識用データの準備
Keras由来のモデルが手に入ったので、次はそのモデルを試すデータを入手します。 そのためには、「fer2013」のデータページにアクセスします。データのダウンロードにはユーザー登録が必要になります。ページ下部、左側に[ […]
続きを読む9_2_1 HDF5モデルの入手と配置
HDF5形式のモデルの入手先として、「oarriaga/face_classification」ページを利用することにします。ページ上部の右端に[Clone or download]ボタンがあるので、これをクリックし、Z […]
続きを読む9_2 Kerasモデルの利用
tensorflowjs converterを使用すると、Pythonで書かれたKerasモデルがTensorFlow.jsのモデルとして利用できるようになります。訓練済みで優秀なKerasモデルが利用できると、Tens […]
続きを読む9_1 tensorflowjs converterを使えるようにする
tensorflowjs converterを使えるようにするには、Pythonコードが実行できる環境が必要になります。 Anacondaのダウンロードとインストール Anaconda 3というPythonディストリビュ […]
続きを読む9 tensorflowjs converter
tensorflowjs converterを使用すると、Pythonコードで書かれたKerasモデルを、TensorFlow.jsに読み込めるモデルに変換して、TensorFlow.jsで使用することができます。 ただ […]
続きを読む8_3_2 姿勢検出(複数)
複数の姿勢検出には、posenetのestimateMultiplePoses()を使用します。判定する数の最大数はデフォルトで5なので、5を超える数の姿勢検出を行いたいときには、maxPoseDetectionsパラメ […]
続きを読む8_3_1 姿勢検出(1人)
手順としては、前のcoco-ssdと同様、[ファイルを選択]ボタンのクリックで画像ファイルを選択し、それをJavaScriptのイメージデータに変換します。そしてそれをposenetに渡します。 // PoseNetを読 […]
続きを読む8_3 posenet
「posenet」には、人間の姿勢が検出できるPoseNet Modelがあります。このモデルには、イメージやビデオ内の1人の人間の姿勢を検出するバージョンと、複数の姿勢を検出するバージョンがあります。 posenetを […]
続きを読む8_2_1 coco-ssd 物体検出アプリ
ブラウザ画面のボタンをクリックして写真を指定し、物体検出を行うアプリの作例です。 HTML: <input type="file" id="input-file"> & […]
続きを読む8_2 coco-ssd
COCOという名前のデータセットがあり、これは、物体の検出と切り出し(オブジェクトセグメンテーション)、説明付き(キャプショニング)の機械学習に利用できます。 TensorFlow.jsのcoco-ssdでは、このデータ […]
続きを読む8_1_3 画像認識モバイルアプリ
TensorFlow.jsのmobilenetを使って、何の画像かを認識するモバイルアプリを作成します。これは、具体的に言うと、mobilenetが利用するMobileNetsのV1モデルに、モバイルデバイスがHTMLの […]
続きを読む8_1_2 mobilenetのテスト
「mobilenet」にあるサンプルの簡単なテストです。 HTML <div class="photos"> <img src="images/1.jpg" id […]
続きを読む8-1 mobilenet
MobileNetsは、Googleがモバイル向けに作成した、画像処理アプリ用の畳み込みニューラルネットワークで、サイズが小さく、電池をあまり消費せず、そこそこ性能が良いという特長があります。 MobileNetsを使用 […]
続きを読む8 訓練済みモデルの利用
「tensorflow/tfjs-models」ページには、TensorFlow.jsで使用できる訓練済みモデルが掲載されています。 本記事執筆時点では、その中の「mobilenet」と「coco-ssd」、「posen […]
続きを読む7-7 手書き数字認識アプリ(UI考慮なし版)
最後に、手書き数字認識アプリの全コードを紹介しておきます。ただしUIを考慮していないバージョンです。 まず画面左上の[ファイル選択ボタン]でtrain-images.idx3-ubyteとtrain-labels.idx […]
続きを読む7-6 モデルの推測結果の表示
前回までで、モデルはテスト用データに対し97%ほどの精度で正解することが分かりました。以下では、テスト用データの画像と、モデルの出した答えを視覚的に比較します。 下図は実行結果の例です。データは100個表示しており、不正 […]
続きを読む7-5 モデルの構築と訓練
MNISTの訓練用とテスト用の画像データとラベルデータを表すtf.Tensorオブジェクト4つが作成できたので、次はモデルの構築と訓練です。 手書き数字の認識にどんなモデルが適しているのか、考えてもしかたないので、Ten […]
続きを読む7-4 MNISTデータをtf.Tensorオブジェクトに変換する
MNISTの画像とラベルデータの読み取りと取得ができたので、次はMNISTの4つのファイルを開いて必要なデータを取得し、それらをtf.Tensorオブジェクトに変換するまでを見ていきます。 4つのファイルの読み取りは1つ […]
続きを読む7-3 MNISTラベルデータを開いて中身を得る
いささかテクニカルではありますが、ラベルデータのtrain-labels.idx1-ubyteも同様の方法で開き、中身を得ることができます。「THE MNIST DATABASE of handwritten digit […]
続きを読む7-2 MNIST画像データを開いて中身を得る
「THE MNIST DATABASE of handwritten digits」ページからダウンロードし、Windowsなら7-Zipアプリなどで展開して現れたt10k-images.idx3-ubyte、t10k- […]
続きを読む7-1 MNISTデータセットとは?
MNISTデータセットには、 訓練用画像データ それに対応した訓練用ラベルデータ テスト用画像データ それに対応したテスト用ラベルデータ の4つのファイルがあり、「THE MNIST DATABASE of handwr […]
続きを読む7 MNISTデータと手書き数字認識アプリ
自分で描いた数字をアプリが何の数字か予測する手書き数字認識アプリは、機械学習を学習する上で、意欲の湧きそうなテーマです。 手書き数字認識アプリを作成するには、手で数字を書いたような画像データが必要になりますが、MNIST […]
続きを読む6_5 optimizer : 最適化アルゴリズム
optimizerプロパティに指定する値は最適化アルゴリズムと呼ばれます。言い換えると、損失関数を理想的にはゼロにするための算出方法を指定します。 これまで見てきた損失値のグラフでは、値がうまく減少していきましたが、そこ […]
続きを読む6_4 loss : 誤差関数
loss(誤差関数)は、自分の方法でモデルが出した「推測」値と正解の教師データと比べて、適合しなさ具合を表す数値を返します。 前のあやめデータのlossには’binaryCrossentropy’ […]
続きを読む6_3 モデルの中身 その2
tf.Sequentialのモデルにレイヤーを追加したので、コンパイルに移ります。 const learningRate = 0.01; const optimizer = tf.train.adam(learningR […]
続きを読む6_2 活性化関数
モデルにレイヤーを追加するとき、tf.layers.dense()関数に渡すオブジェクトのactivationプロパティの値に指定するものを活性化関数と言います。活性化関数は次のレイヤーに渡す値を整える働きを持っています […]
続きを読む6_1 モデルの中身 その1
「5_1_2 モデルの構築」で示したbuildModel()関数のコードを上から順に見ていきます。 const model = tf.sequential(); tf.sequential()関数はtf.Sequenti […]
続きを読む6 モデルの本陣
機械学習は微小な数値の連続で、そこで扱われる用語や概念も、大学で数学を学ばなかった人には、非常に難解です。 TensorFlow.jsのそもそもの狙いには、こうした難解さをモデル内部に隠し、ハイレベルなAPIで優しく扱え […]
続きを読む5_1_6 推論 その3 答え合わせ
モデルには、[5.1, 3.5]や[4.9, 3.0]、[4.7, 3.2]といったsatosaData は[1,0]で、 [7.0, 3.2]や[6.4, 3.2]、[6.9, 3.1]といったversicolorDa […]
続きを読む5_1_5 推論 その2 Tensor.argMax( axis? )メソッド
tf.Sequentialのpredict()が返すtf.Tensorオブジェクトは、推論結果の数値と結びついており、分類の場合、数値は確率と見なすことができます。 // 結果は確率の配列 predictOut.prin […]
続きを読む5_1_4 推論 その1
モデルの訓練が終わったら、Promiseのthen()メソッドに渡される無名関数で、<ul>要素のクリックに関するイベントリスナーを設定します。 console.log(‘モデルの訓練完了’); // < […]
続きを読む5_1_3 モデルの訓練
start()関数では、buildModel()の後、train(model, xsTrain, ysTrain, xsValidation, ysValidation);を実行しているので、次のtrain()関数が呼び […]
続きを読む5_1_2 モデルの構築
次は、ゼロから構築しようとすると相当な知識と経験が必要になる、「適切な」モデルの作成です。機械学習やディープラーニングでは、モデルが自動的に学習し、推論を立ててくれますが、そこまで行くには、優秀なモデルを人間が試行錯誤し […]
続きを読む5_1_1 データの取得
何はなくともデータを準備する必要があります。今回使用するのは、次のようなデータです。前述したように、分かりやすくするために、サンプル数を少なくしています。 JavaScriptコードでは、訓練用のデータを8個ずつ配列に入 […]
続きを読む5_1 2特徴量2クラス
ここからは、いよいよ「機械学習」っぽくなっていきます。 2特徴量2クラスというのは、あやめデータの場合でいうと、たとえば、がく片の長さと幅の2つの特徴量から、satosaとversicolorに分けることです。出来の良い […]
続きを読む5_1 1特徴量2クラス
扱おうとするデータの特徴を数値化したものを特徴量と言います。あやめの例で言うと、がく片や花びらの長さと幅の数値です。1特徴量2クラスとは、1つの特徴量で2つに分類することです。 たとえば、2m以上はある大きな木と1mない […]
続きを読む5 あやめの分類
機械学習の入門の例として、あやめの花の分類があります。これは、あやめの品種であるsatosaとversicolor、virginicaそれぞれのがく片の長さと幅、花びらの長さと幅を持つデータを使ってモデルを訓練し、未知の […]
続きを読む5_2_4 epochsはいくつがよいのか?
今の簡単な例では、データ数は訓練用と教師用で25個ずつですが、通常はもっともっと多い方がモデルの推論の精度は高まります。またデータの品質も重要で、これはどう見ても異常だ、と思えるデータは除く必要があります。 機械学習で重 […]
続きを読む5_2_3 TensofFlow.jsのモデルの作成と訓練
今行おうとしているのは、[22,23,23,…,34,35,35]という最高気温と、[303,313,323,…,463,443,483]と並ぶビールの売上本数のデータから、では、統計が取られてい […]
続きを読む5_2_2 グラフの描画関連
グラフの描画には、Plotlyライブラリを使用しています。Plotlyには、適切な形式でプロットしたい横軸と縦軸のデータを配列で渡すだけです。 // Plotlyを使ってグラフを描く const plot = async […]
続きを読む5_2_1 CSVファイルの読み込み
TensorFlow.jsに限らず、機械学習ではまずデータが必要です。このWebアプリでは、前出のエクセルファイルからCSVファイルを書き出して、それを読み込みます。 ブラウザで外部ファイルを読み込むには、ユーザーが読み […]
続きを読む5_2 TensorFlow.jsでビール売上数を予測する
下図は、エクセルで行った推測をTensorFlow.jsで行った結果です。 右は損失値の変化を表すグラフで、2500回も訓練しています。エクセルの推測は一瞬で終わりますが、TensorFlow.jsでは相当回数、訓練が必 […]
続きを読む5_1 エクセルでビール売上数を予測する
最高気温が高いほどビールは多く売れるだろう、という相関関係は、エクセルの機能を使うと、実に簡単に右上がりの直線で表すことができます。 こういう統計があったとすると(実際には架空のデータです)、エクセルのグラフ機能で、実に […]
続きを読む5 ビール売上本数の予測
次は少し実践的な例です。その日の最高気温とビールの売上本数をデータとしてTensorFlow.jsのモデルに与えて訓練し、データにはない最高気温が30度の日に、ビールは何本売れるかを推測させる試みです。 最高気温と売上本 […]
続きを読む4_2 同じ問題に対して、異なるTensorFlow.jsモデルを試す
まず、前の「3_1_2 モデルの作成」で使ったモデルで試してみます。 const model = tf.sequential(); model.add(tf.layers.dense({units: 1, inputSh […]
続きを読む4_1 TensorFlow.jsで実装した論理ゲート
以下がTensorFlow.jsで実装した論理ゲートの実行画面です。結果は、概ね良好のように思えます。 全コードを以下に示します。 <!doctype html> <html lang="ja […]
続きを読む4 論理ゲートをTensorFlow.jsで実装する
機械学習の入門書などを見ていると、「論理ゲート」というものがよく取り上げられています。論理ゲートというのは、元は電子回路に用いられる論理で、オンかオフの2つの入力があった場合、それをオンかオフのどちらで出力するかを決める […]
続きを読む3-3 基本 その3 視覚化
機械学習で扱うのは、目に見える色の変化やオブジェクトの変形でなく、小さな数値の微細な変化なので、扱うデータや、訓練の進捗状況を視覚化することが重要です。 機械学習の環境が進んでいるPythonには、多くの機械学習向けライ […]
続きを読む3-2 基本 その2 訓練の進捗状況
tf.Sequentialオブジェクトのfit()メソッドを呼び出すと、モデルを訓練することができます。fit()メソッドには、訓練がうまく進んでいるかを見ることのできる方法が提供されています。 訓練の進捗状況を確認する […]
続きを読む3_1_4 モデルの推論
訓練を終えたモデルは、モデルが知らない値を与えられると、自分の推論にもとづいてその値に対応する値を提出できるようになります。 モデルから推測値を得るには、tf.Sequentialオブジェクトのpredict()メソッド […]
続きを読む3_1_3 モデルの訓練
作成したモデルは訓練できるようになります。モデルを訓練するには、tf.Sequentialオブジェクトのfit()メソッドを用います。 info(‘モデル訓練開始’); // モデルは与えられたxsとysから、その関係性 […]
続きを読む3_1_2 モデルの作成
TensorFlow.jsでは、大学で学ぶ数学を分かっていないとまったくもってチンプンカンプンの理論を隠蔽するモデル(tf.Model)が用意されています。モデルの作成は定型的なので、毎回同じような手順で作成できます。 […]
続きを読む3_1_1 データの取得
機械学習はデータの取得から始まります。データは今の場合、[-1, 0, 1, 2, 3, 4]という配列と、[-3, -1, 1, 3, 5, 7]という配列です。これを、 const [xs, ys] = await […]
続きを読む3-1 基本 その1 TensorFlow.jsの作業の流れ
次のコードは、ブラウザで開くと自動的にTensorFlow.jsのモデルが作成され学習を始めます。学習が終わり、ボタンをクリックすると、テキストフィールドに入力された数値(20)に対応する数値をデベロッパーツールのコンソ […]
続きを読む3 スタート
まずは、TensorFlow.jsを使った機械学習Webアプリ作成の流れが分かるように、ごく単純な例から始めましょう。 TensorFlow.jsには、[-1, 0, 1, 2, 3, 4]と[-3, -1, 1, 3, […]
続きを読む2 準備
TensorFlow.jsを始めるための準備は、ほぼ何も必要ありません。jQueryのライブラリをダウンロードするのと同じ要領で、HTMLファイルの<head>タグに、次の<script>タグを記 […]
続きを読む1-1-3 TensorFlow.jsに関する情報
TensorFlow.jsの情報は、「TensorFlow.js」サイトで得ることができます。 チュートリアル APIリファレンス(このリンクは本記事執筆時点での最新版である0.12.5のリファレンスに飛びます) このA […]
続きを読む1_1_2 誰に向いているのか?
TensorFlow.jsは現状、誰にでもすぐに使用を始められるほど、簡単ではありません。また機械学習を効率的に進めることのできるPython環境のようには整備されていず、たとえばデータを視覚化するにも、JavaScri […]
続きを読む1_1_1 TensorFlow.jsの特徴
TensorFlow.jsでは、一般的な特徴として次のものがあげられます。 JavaScriptライブラリなので、PCのWebブラウザに加え、スマホやタブレット端末のWebブラウザで動作するWebアプリが作成できる。 W […]
続きを読む1_1 TensorFlow.jsとは?
TensorFlow.jsとは、Webブラウザなどで機械学習を行うことのできるJavaScriptライブラリです。Googleが2018年3月、「TensorFlow Dev Summit 2018」で発表しました。 機 […]
続きを読むTensorFlow.jsことはじめ
練習
続きを読む