knaka Tech-Blog

AI, IoT, DIYエレクトロニクス, データサイエンスについて投稿予定です。

TensorFlow.js で、モデルを保存する。ブラウザ版 #javascript #機械学習 #tensorflow

index:

概要:

前のTensorFlow.js 関係で、
学習済のモデルを、保存する例となります。

環境

TensorFlow.js
ブラウザ

保存の処理

Local Storage に、保存する場合ですが、他にもindexDBなど。あるようです

await model.save('localstorage://my-model');

例です

学習後、モデル保存し、
モデル読み込み、評価後、結果出力、

gist.github.com

node.js版

・環境: ubuntu16

npm install @tensorflow/tfjs-node

・保存
https://github.com/kuc-arc-f/tfjs_pred_2/blob/master/t6-save.js

   await model.save('file://test-model');

・ロード
https://github.com/kuc-arc-f/tfjs_pred_2/blob/master/t6-read.js

   const load_model = await tf.loadLayersModel('file://test-model/model.json');

TensorFlow.js で、回帰モデルの予測問題サンプル

index:

概要:

前のTensorFlow.js 関係で、
回帰モデル例を、参考にして。
予測問題の実装メモとなります。

評価グラフは、chart.js で。表示する構成です

環境

TensorFlow.js
ブラウザ

参考のコード

github.com

実装など

・自前の、学習データを外部から。読み込みます
https://github.com/kuc-arc-f/tfjs_start2/blob/master/js/train_10.js

async function getData() {
    const url  = 'https://raw.githubusercontent.com/kuc-arc-f/tfjs_start2/master/dat/outout.json';
    const carsDataReq = await fetch( url );  
    const carsData = await carsDataReq.json();  
//console.log(carsData)
    const cleaned = carsData.map(car => ({
        hnum: car.hnum,
        no: car.no,
    }))

    return cleaned;
}

・tf.tensor に変換後、学習処理、評価

/******************************** 
*
*********************************/
async function trainModel(model, inputs, labels, tensorData,
     input_size, chart_dats) {
    const {inputMax, inputMin, labelMin, labelMax} = tensorData
//console.log( input_size );
    // Prepare the model for training.  
    const column_len = input_size
    model.compile({
        optimizer: tf.train.adam(),
        loss: tf.losses.meanSquaredError,
        metrics: ['mse'],
    });
    const batchSize = column_len -5;
    const epochs = 50;
    //model.fit(inputs,labels,{epochs: epochs });
	return await model.fit(inputs, labels, {
		batchSize,
		epochs,
    });    

}

学習データと、評価のグラフ

f:id:knaka0209:20191006191947p:plain

参考のページ

knaka0209.hatenablog.com

まとめ

・評価結果が安定せず、見直しが必要となりました。
 継続して。調査したいと思います。

修正版で、エポック数=50, 学習は5秒程かかりました。

・JSで機械学習が可能で、web実装がカンタンにできる点は。良さそうです
 python のツール系(pandas, matplot等)
 が使えないのは、開発面では きびしい気がしました

TensorFlow.js の導入編、回帰モデルなど

概要:

TensorFlow.js の導入、セットアップ等になります
javascriptで、機械学習できそうですので。試してみました

環境

TensorFlow.js
node.js
npm

追加方法

cdn 読み込む場合

<script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@1.0.0/dist/tf.min.js"></script>

参考のコード

回帰モデル、 Linear Regression で、
学習後、評価した場合。

gist.github.com

node.js へ追加の場合

npm install @tensorflow/tfjs-node

TypeScript + node/express + mysql で、 CRUDの作成

index:

概要:

前の TypeScript + node/express 関連で
promise-mysql で、CRUDの作成となります。

環境

TypeScript
node.js
npm
mysql

参考のコード

github.com

実装など

api、データ取得
https://github.com/kuc-arc-f/ts_express6_mysql/blob/master/routes/api.ts

/******************************** 
* 
*********************************/
router.get('/tasks_index', function(req: Request, res: Response, next: NextFunction ) {
    let connection :mysql.Connection;
    myDb.get_connection()
    .then((conn) => {
        connection = conn;
       return connection.query('SELECT * FROM tasks order by id desc');
    }).then((results: any[]) => {
//        console.log(results );
        results.forEach(result => {
            console.log(result.id );
        });
        connection.end();
        var param = {"docs": results };
        res.json(param);
    });
});

TypeScript + promise-mysql の導入編

index:

概要:

前の TypeScript + node/express 関連で
promise-mysql でDB操作編となります

環境

TypeScript
node.js
npm
promise-mysql
mysql

参考のコード

github.com

promise-mysql の追加

npm install promise-mysql --save

npm install @types/mysql --save

mysql操作

・select ,insert など
https://github.com/kuc-arc-f/ts_mysql_1/blob/master/test.ts

/******************************** 
* 
*********************************/
function get_table(): void{
    let connection :mysql.Connection;
    mysql.createConnection({
        host: "localhost",
        user: "db_user",
        password: "password",
        database: "vue1"
    })
    .then((conn) => {
        connection = conn;
       return connection.query('SELECT * FROM books');
    }).then((results: any[]) => {
//        console.log(results );
        results.forEach(result => {
            console.log(result);
        });
        connection.end();
    });
        
}
/******************************** 
* 
*********************************/
function add_table(title: string): void{
    let sql = `
    INSERT INTO books (title ,createdAt ) VALUES
    ('${ title }', now() )
    `;
    let connection :mysql.Connection;
    mysql.createConnection({
        host: "localhost",
        user: "db_user",
        password: "password",
        database: "vue1"
    })
    .then((conn) => {
        connection = conn;
        connection.query( sql )
        connection.end();
    });
        
}

TypeScript + node/express + sequelize CRUDの作成

index:

概要:

前の TypeScript + node/express 関連で
sequelize + mysql +vue.js 構成 CRUDとなります

環境

TypeScript
node.js
npm
sequelize
mysql

参考のコード

github.com

手順

・表の作成
https://github.com/kuc-arc-f/ts_sequelize1/blob/master/database/tasks.sql

npm install

・tscコンパイル
npm run build
( 開発する場合 、npm run watch )

・express 起動
npm start

実装など

api、データ取得
https://github.com/kuc-arc-f/ts_sequelize1/blob/master/routes/api.ts

router.get('/tasks_index', function(req: Request, res: Response, next: NextFunction ) {
    models.Task.findAll({
        order: [
            ['id', 'DESC'],
        ],                    
    }).then((result:any) => {
        var items = result
        items.forEach( function (item: any[]) {
//                console.log( item);
        });
        var param = {"result": result};
        res.json(param);
    });
});

TypeScript + node/express 、chart.jsでグラフ表示

index:

概要:

前の TypeScript + node/express 関連で
前回の、csvインポートで sqliteに保存された測定値を
chart.js グラフ表示となります。

環境

TypeScript
node.js
npm
sqlite3
chart.js

参考のコード

github.com

画面

f:id:knaka0209:20190927193444p:plain

手順

・表の作成
https://github.com/kuc-arc-f/ts_express5_chart/blob/master/doc/mdats.sql

npm install

・tscコンパイル
npm run build
( 開発する場合 、npm run watch )

・express 起動
npm start

実装など

api、データ取得
https://github.com/kuc-arc-f/ts_express5_chart/blob/master/routes/api_mdats.ts

/******************************** 
* 
*********************************/
router.get('/index', function(req: Request, res: Response, next: NextFunction ) {
    let db = new sqlite3.Database( AppConst.dbfileName )
    let items:any[] = [];
    let sql = `
    SELECT id,hnum, lnum ,date(mdate, '+9 hours') as mdate
    FROM mdats order by mdate;
    `;
    db.serialize(function() {
        db.all(sql , function(err: any, rows:any[] ) {
            rows.forEach( function (item:any[] ) {
                items.push(item  );
//                console.log(item )
            });
            var param = {"docs": items };
            res.json(param);
        });
    });
    db.close();
});

・画面ejs
https://github.com/kuc-arc-f/ts_express5_chart/blob/master/dist/views/mdats/chart.ejs