[Tensorflow.js] Danfo.jsでテンソルの標準出力を整形する


2020/08/27

Tensorflow.jsそのままの標準出力はお世辞にも見やすいとは言えません。

一次元と二次元テンソルの使用限定ですが、テンソル値を確認したいときに
Danfo.jsというユーティリティを利用することで、自動でいい感じのテーブル仕立ての表示に整えてくれます。

今回はDanfo.jsを利用したコンソールでの表示例をちょっとだけ紹介します。


インストール方法

今回はCLI版をインストールして、nodeコマンドからの利用を前提に使います。

なので、お手元の環境にて
node.jsが使えるようにしておいてください。

なお現在の動作確認時のnodeインストール状況は、

            
            $ node -v
v12.18.3
$ npm -v
6.14.6
$ yarn -v
1.22.4
        
まずはdanfojs-nodetensorflowjs-nodeをnpmパッケージインストールします。

            
            $ yarn add @tensorflow/tfjs-node danfojs-node
        
これでdanfo.jsをCLIで使う準備が整いました。

1次元テンソル

まずはmain.jsという名前でソースを追加して、以下に編集します。

            
            const tf = require("@tensorflow/tfjs-node");

tf.tensor([12,34,56,78]).print();
        
ではこれをnodeでコンソールから実行します。

            
            $ node main.js
#...いつものテンソル表示
Tensor
    [12, 34, 56, 78]
        
この程度の単純なテンソルならまだテンソルの全体像が把握できるのですが、次元数・要素数が大きくなったり、小数点表示が細かすぎたりすると、表示が潰れて標準出力としては使い物にならなくなるのが難点でした。

さて、
main.jsを以下のように修正してみます。

            
            const tf = require("@tensorflow/tfjs-node");
const dfd = require("danfojs-node");

//tf.tensor([12,34,56,78]).print();
(new dfd.Series(tf.tensor([12,34,56,78]))).print();
        
これを実行すると、以下のようなテーブル仕立てのテンソル表示になります。

            
            $ node main.js
╔═══╤══════════════════════╗
║   │ 0                    ║
╟───┼──────────────────────╢
║ 0 │ 12                   ║
╟───┼──────────────────────╢
║ 1 │ 34                   ║
╟───┼──────────────────────╢
║ 2 │ 56                   ║
╟───┼──────────────────────╢
║ 3 │ 78                   ║
╚═══╧══════════════════════╝
        
tensorflowjsの一次元テンソル値をSeriesコンストラクタの引数に渡すと、danfo.jsのクラスメソッドが利用できるようになります。

Seriesクラスの詳しい利用法は公式のAPIリファレンスを参照してください。

二次元テンソル

二次元テンソルで利用したい場合には、Dataframeクラスを利用します。

main.jsを以下のように書き換えてみます。

            
            const tf = require("@tensorflow/tfjs-node");
const dfd = require("danfojs-node");

//👇tensorflowjs標準のテンソル表示
tf.tensor2d([[12, 34, 2.2, 2], [30, 30, 2.1, 7]]).print();

//👇danfo.jsの二次元テンソル表示
(new dfd.DataFrame(tf.tensor2d(
    [[12, 34, 2.2, 2], [30, 30, 2.1, 7]]
))).print();
        
これを実行すると、

            
            $ node main.js
#👇tensorflowjs標準のテンソル表示
Tensor
    [[12, 34, 2.2      , 2],
     [30, 30, 2.0999999, 7]]

#👇danfo.jsの二次元テンソル表示
 Shape: (2,4) 

╔═══╤═══════════════════╤═══════════════════╤═══════════════════╤═══════════════════╗
║   │ 0                 │ 1                 │ 2                 │ 3                 ║
╟───┼───────────────────┼───────────────────┼───────────────────┼───────────────────╢
║ 0 │ 12                │ 34                │ 2.20000004768...  │ 2                 ║
╟───┼───────────────────┼───────────────────┼───────────────────┼───────────────────╢
║ 1 │ 30                │ 30                │ 2.09999990463...  │ 7                 ║
╚═══╧═══════════════════╧═══════════════════╧═══════════════════╧═══════════════════╝
        
といったように利用できるようです。


まとめ

Danfo.jsは、Tensorflow(Python)のPandasのjavascript版に使えるようなライブラリとして設計されているようです。

本家Tensorflowからtensorflowjsに移行する開発者にとっては使いやすいユーティリティかもしれません。


参照

Getting Started | Danfo.js

Introducing Danfo.js, a Pandas-like Library in JavaScript

記事を書いた人

記事の担当:taconocat

ナンデモ系エンジニア

主にAngularでフロントエンド開発することが多いです。 開発環境はLinuxメインで進めているので、シェルコマンドも多用しております。 コツコツとプログラミングするのが好きな人間です。