バージョン1.2.1がリリースされてから、一ヶ月しか経っていないが、数多くの変更を含むソフトウェアバージョン1.3が登場する。開発者は、広範囲にわたるリリースレポートを GithubのTensorflowページにて見ることができる。この記事は、Tensorflow1.3のアップグレード前後において、開発者が知るべき最も重要な変更リストとなる。
cuDNN 5.1 から cuDNN 6へ
1.2.1から1.3バージョンにアップグレードする場合、開発者はPCのcuDNNのバージョンも更新する必要がある。 1.2.1でのバイナリ提供はcuDNN 5.1バージョンであったが、1.3ではNVIDIAでコンパイルされたcuDNN 6にて配布されている。これを アップグレードしたくない開発者は ソースコードから独自にビルドすることもできる。新しいcuDNNのバージョンでは、ソフトマックス層において大きなパフォーマンス改善が行われている。cuDNN6にて追加された興味深い機能は、Tensorflowが既にサポートしている拡張畳み込み(Dilated Convolutions)機能である。 なお、Tensorflowバージョン1.1.0のリリース以降、MacのGPUをサポートしていないことは注意してください。開発者はパッチの提供を歓迎しているが、動く保証はありません。
tf.contrib.data.Dataset クラス
tf.contrib.data.Datasetクラスには、いくつかの重要な変更がある。このクラスを使うことで、メモリ上、ディスク上のファイル、多くのデータ形式のテンソルからデータの均一な入力パイプラインを作成できる。 また、Dataset.map()関数を用いて個別の要素へ、またDataset.batch()関数を用いて全ての要素へ関数を適用する時にも使われる。 ネストしたストラクチャが想定されるこのクラスの関数群はリストをtf.Tensorオブジェクトに暗黙的に変換する。 これを望まないユーザーはタプルを代わりに使える。 またDatasetクラスには、いくつかの新しい関数が存在する:
- Dataset.list_files(file_pattern): file_pattern引数にマッチするファイル名に対応する文字列のデータセットを戻す
- Dataset.interleave(map_func, cycle_length): プログラマは、各要素に関数がどのようにマップされるかを詳細に制御できる。データセット全体にmap_funcを適用するが、結果をインターリーブして多数の入力ファイルを同時処理する時に利用できる。
- ConcatenateDataset: Datasetクラスを拡張するクラス。このinit関数は2つのデータセットを受け取り、既存のDataset.concatenate()関数を使用して新しいクラスに連結する
詳細情報について、開発者はGithubのプログラマガイドの Datasetクラスの使用方法に関する説明を参照できる。
高度なAPI関数と統計的分布
KerasとTFLearnのユーザー向けにすでに多くの高度なAPI関数が用意されているが、Tensorflowはライブラリに以下の機能を追加した: DNNClassifier, DNNRegressor, LinearClassifer, LinearRegressor, DNNLinearCombinedClassifier, DNNLinearCombinedRegressor
これらのエスティメータはtf.contrib.learnパッケージに含まれており、Tensorflowのドキュメントに使用方法が説明されている。
新しく追加された機能の多くは統計的分布に関する内容である。統計的分布を表すクラスは、分布を定義するパラメータにて初期化される。多数の単変量分布と多変量分布はすでに存在している。開発者は既存クラスを拡張することもできるが、Distribution基本クラスにあるすべての関数をサポートし続ける必要がある。不正なプロパティ場合、開発者は例外をスローするようにプログラムで処理することも、NaN値として扱うこともできる。一様分布からランダム値を持つテンソルを得る簡単な例を以下に示す。 :
既存関数への変更
既存機能に若干の変更もある。テンソルの中の変数を取得するために使用されるtf.gather関数は、より柔軟な収集を可能にするaxisパラメータを持つようになった。
既存のテンソルに値を揃えるために使用されるtf.pad関数は、"CONSTANT"の引数モードをサポートするようになった。以前は既存のテンソルに0の値がパディングとして追加されていたが、パディングする値を指定できるようになった。なお、以前から利用可能だったモードは "REFLECT"と "SYMMETRIC"でした。
フィードバックをよろしくお願いします
このニュースには最も重要な変更が含まれていますが、開発者が重要と感じる多くの追加の変更があります。私は開発者にTensorflowバージョン1.3の情報、追加の変更、既存コードで見つけた落とし穴についてコメントを追加することを勧めます。まだInfoQに登録されていない方は、会員登録することで、多くの開発者を助けることができます。
Rate this Article
- Editor Review
- Chief Editor Action