19/2/8更新 ColaboratoryのCUDAが10.0に上がったため、GPU版も動くようになりました
TL;DR
- 待ちに待ったTensorFlow 2.0 PreviewがPyPIに公開された。インストール方法は -
- GPUなし:
pip install tf-nightly-2.0-preview
- GPUあり:
pip install tf-nightly-gpu-2.0-preview
-
ただし現状CUDA 10.0前提なのでGPUなし版のみ動く(ColabはCUDA 9.2)ColabはCUDA 10.0
-
- 付属
tf_upgrade_v2
ツールで1.x系コードを2.0系に変換できる - TFHub他、まだ2.0対応していないプロジェクトあり。alphaで対応する
- GPUなし:
- Colabでどこまでできるかやってみよう
- 2.0系対応の公式チュートルアルも揃いつつある(tensorflow/docs/site/en/r2)
- Transfer LearningでGPUあり/なし両方の動作が試せた
- 非公式チュートリアル(ageron/tf2_course)のipynbを試せた
- SEEDBANKのFashionMNISTで、1.x系->2.0系のコード変換と動作が試せた
- 2.0系対応の公式チュートルアルも揃いつつある(tensorflow/docs/site/en/r2)
はじめに - TensorFlow 2.0とは
経緯や利点は、下記の記事に詳しく紹介されています。
2018年内とアナウンスされていましたが、少し遅れ、このほどPreview版が公開されました。Colaboratory上で動作を確認してみます。(Colaboratoryの詳しい使い方はこちら)
- TensorFlow2.0 Preview版が出ました! - HELLO CYBERNETICS
- tensorflow 2.0 の紹介(日本語訳) - Qiita
- Design Documentから見たTensorFlow 2.0の変更点 - Qiita
本記事の構成
- ColabでTensorFlow 2.0を使うには
- 2.0系 公式チュートリアルを試す
- 2.0系 非公式チュートリアル(Deep Learning with TensorFlow 2 and Keras course)を試す
- TensorFlow 2.0で、1.x系のコードを使うには
1. ColabでTensorFlow 2.0を使うには
新しいColaboratoryノートブックを開く
https://colab.research.google.com/ を開き、 Python 3の新しいノートブック
を選択。
TensorFlow 2.0 Previewをインストール
新しいコードセルで、下記を実行すると、最新のTensorFlow 2.0 Preview版がインストールされます。
!pip install tf-nightly-2.0-preview
GPUなしでは動作する。
注: GPUインスタンスに
!pip install tf-nightly-gpu-2.0-preview
を試したがエラーで動かない(Colabは現状CUDA 9.2。tf2.0 previewはCUDA 10.0前提?)
コード変換(1.x系->2.0系)のユーティリティについて
1.x系のコードを2.0環境で使うには tf_upgrade_v2
を使い、ソースコードを変換します。
!tf_upgrade_v2
で、Usageが表示されます。
- 1ファイルだけ変換する場合
--infile
で入力.py、--outfile
で出力.pyを指定 - ディレクトリ全体を変換する場合
--intree
で入力ディレクトリ、--outtree
で出力ディレクトリを指定 - 入力ディレクトリの.py以外を、出力ディレクトリにコピーしたくなければ
--copyotherfiles False
を付加 - 変換すると、結果が
report.txt
として保存
あたりを押さえておくとよいでしょう。実際の変換方法は後述します。また詳細は、 https://github.com/tensorflow/tensorflow/tree/master/tensorflow/tools/compatibility に実コードや README.md
があります。
2. TensorFlow 2.0公式チュートリアル
tensorflow/docs/site/en/r2 に公式の2.0系チュートリアルipynbがあります。下記のリンクから、すぐにColab notebookが開きます。
ノートブックに含まれていない場合は !pip install tf-nightly-2.0-preview
を実行し、TensorFlow Preview 2.0をインストールしてから始めます。
- ガイド
- チュートリアル
- ビギナー
- Eager
- Keras
- Distribute
- Generative
- Images
- Load data
- Sequences
2.1 Transfer LearningのチュートリアルでGPUあり/なしを試す
上記から、Transfer Learning Using Pretrained ConvNetsで、CUDA 10.0化後のGPU動作を確認してみました。20倍程度速く学習が進んでいるのがわかります。
GPUあり
GPUなし
3. TensorFlow 2.0の非公式チュートリアルを試す
早速公開されたDeep Learning with TensorFlow 2 and Keras courseのipynbを試してみましょう。下記のリンクから、すぐにColab notebookが開きます。
最初のセルで忘れず !pip install tf-nightly-2.0-preview
を実行し、TensorFlow Preview 2.0をインストールしてから始めます。
20190111現在、TensorFlow 2.0ベースで、すでに3つの講座が準備されています。
- [1. Neural nets with Keras - Kerasでニューラルネットを使う] (https://colab.research.google.com/github/ageron/tf2_course/blob/master/01_neural_nets_with_keras.ipynb)
- 2. Low level TensorFlow API - TensorFlowの低レベルAPI
- 3. Loading and preprocessing data - データのロードと前処理
それぞれ対話型で進められます。途中演習問題があり、詰まったら、後の解答を参照することができます。
4. TensorFlow 2.0で、1.x系のコードを使うには
SEEDBANK tf.keras Fashion MNISTで、1.x系から2.0系へのコード変換と実行を試してみます。
.pyの取得
Seedbank: "Fashion MNIST with tf.keras" このColaboratoryノートブックを.py
形式で取得し、それを2.0用コードに変換し、動作するか試す。
- 上記で開いたノートブック(以下、元ノートブック)とは別に、Seedbank: "Fashion MNIST with tf.keras"から、
Run seed in Colab
を押し、ノートブックをColab上で開く -
ファイル> .pyをダウンロード
で、ローカル上にbasic_classification.py
を保存 - 元ノートブックのファイルブラウザ(左ペイン)から、
basic_classification.py
をアップロード
2.0系対応コードへの変換
- 元ノートブックで下記を実行
!tf_upgrade_v2 --infile basic_classification.py --outfile basic_classification_upgraded.py
すると、変換が成功した。
Line 240:24: Renamed 'tf.train.AdamOptimizer' to 'tf.compat.v1.train.AdamOptimizer'
TensorFlow 2.0 Upgrade Script
-----------------------------
Converted 1 files
Detected 0 errors that require attention
--------------------------------------------------------------------------------
Make sure to read the detailed log 'report.txt'
report.txt
に結果が出ているので見てみる。Adam optimizerが、1.x系互換性のための tf.compat.v1.*
配下に変換されたようだ。
--------------------------------------------------------------------------------
Processing file 'basic_classification.py'
outputting to 'basic_classification_upgraded.py'
--------------------------------------------------------------------------------
Line 240:24: Renamed 'tf.train.AdamOptimizer' to 'tf.compat.v1.train.AdamOptimizer'
--------------------------------------------------------------------------------
逐次実行してみる
変更されたのはoptimizerだけですが、動きました。
# 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__)
2.0
ではなく、 1.13.0-dev20190110
と表示されているが、それでよい。
fashion_mnist = keras.datasets.fashion_mnist
(train_images, train_labels), (test_images, test_labels) = fashion_mnist.load_data()
class_names = ['T-shirt/top', 'Trouser', 'Pullover', 'Dress', 'Coat', 'Sandal', 'Shirt', 'Sneaker', 'Bag', 'Ankle boot']
train_images = train_images / 255.0
test_images = test_images / 255.0
model = keras.Sequential([
keras.layers.Flatten(input_shape=(28, 28)),
keras.layers.Dense(128, activation=tf.nn.relu),
keras.layers.Dense(10, activation=tf.nn.softmax)
])
# ここのOptimizerが変換されている
model.compile(optimizer=tf.compat.v1.train.AdamOptimizer(),
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
model.fit(train_images, train_labels, epochs=5)
test_loss, test_acc = model.evaluate(test_images, test_labels)
print('Test accuracy:', test_acc)
predictions = model.predict(test_images)
とりあえず動きました。
まとめ (20190111初稿、20190208更新)
- 待ちに待ったTensorFlow 2.0 PreviewがPyPIに公開された。インストール方法は -
- GPUなし:
pip install tf-nightly-2.0-preview
- GPUあり:
pip tf-nightly-gpu-2.0-preview
-
ただし現状CUDA 10.0前提なのでGPUなし版のみ動く(ColabはCUDA 9.2)ColabはCUDA 10.0
-
- 付属
tf_upgrade_v2
ツールで1.x系コードを2.0系に変換できる - TFHub他、まだ2.0対応していないプロジェクトあり。alphaで対応する
- GPUなし:
- Colabでどこまでできるかやってみよう
- 2.0系対応の公式チュートルアルも揃いつつある(tensorflow/docs/site/en/r2)
- Transfer LearningでGPUあり/なし両方の動作が試せた
- 非公式チュートリアル(ageron/tf2_course)のipynbを試せた
- SEEDBANKのFashionMNISTで、1.x系->2.0系のコード変換と動作が試せた
- 2.0系対応の公式チュートルアルも揃いつつある(tensorflow/docs/site/en/r2)