LoginSignup
12
10

More than 5 years have passed since last update.

Keras バックエンド速度比較 CNTK vs TensorFlow

Posted at

Keras のバックエンドでCNTKを使うことができるようになっているようです(2017/8/25時点 Beta)
サンプルの多いKerasが、高速なCNTKで動く。いいですね!!

極めて簡単ではありますが、速度比較をしてみたので共有します。

結果

mnist 20 epochs (Keras exsample) のモデル作成にかかった時間

TensorFlow CNTK
72.77秒 54.36秒

詳細

実行環境

Dell xps15 with GTX1050 / windows 10 で、共に python 3.5 です。

Tensorflow GPU support
 https://storage.googleapis.com/tensorflow/windows/gpu/tensorflow_gpu-1.3.0-cp35-cp35m-win_amd64.whl

CNTK GPU
 https://cntk.ai/PythonWheel/GPU/cntk-2.1-cp35-cp35m-win_amd64.whl

実施方法

 CNTKのsetup結果確認用に紹介されていた、Keras exsample の mnist_mlp.py に 時間計測部分を追記して実施。

 参考「Using CNTK with Keras (Beta)」
  https://docs.microsoft.com/en-us/cognitive-toolkit/using-cntk-with-keras

 コード、一応貼っておきます。

mnist_mlp.py
from __future__ import print_function
import time
start_time = time.time()

import keras
from keras.datasets import mnist
from keras.models import Sequential
from keras.layers import Dense, Dropout
from keras.optimizers import RMSprop

batch_size = 128
num_classes = 10
epochs = 20

# the data, shuffled and split between train and test sets
(x_train, y_train), (x_test, y_test) = mnist.load_data()

x_train = x_train.reshape(60000, 784)
x_test = x_test.reshape(10000, 784)
x_train = x_train.astype('float32')
x_test = x_test.astype('float32')
x_train /= 255
x_test /= 255
print(x_train.shape[0], 'train samples')
print(x_test.shape[0], 'test samples')

# convert class vectors to binary class matrices
y_train = keras.utils.to_categorical(y_train, num_classes)
y_test = keras.utils.to_categorical(y_test, num_classes)

model = Sequential()
model.add(Dense(512, activation='relu', input_shape=(784,)))
model.add(Dropout(0.2))
model.add(Dense(512, activation='relu'))
model.add(Dropout(0.2))
model.add(Dense(10, activation='softmax'))

model.summary()

model.compile(loss='categorical_crossentropy',
              optimizer=RMSprop(),
              metrics=['accuracy'])

history = model.fit(x_train, y_train,
                    batch_size=batch_size,
                    epochs=epochs,
                    verbose=1,
                    validation_data=(x_test, y_test))
score = model.evaluate(x_test, y_test, verbose=0)
print('Test loss:', score[0])
print('Test accuracy:', score[1])

#時間表示
end_time = time.time()
print('start: ' + str(start_time) + '(sec)')
print('end: ' + str(end_time) + '(sec)')
print('processing time: ' + str(end_time - start_time) + '(sec)')

実行結果

TensorFlow backend 実行
image.png
結果
image.png

ユーザー.keras\skeras.json を書き換えて、、

keras.json
{
    "epsilon": 1e-07, 
    "floatx": "float32", 
    "image_data_format": "channels_last", 
    "backend": "cntk"
}

CNTK backend 実行
image.png
結果
image.png

お疲れ様でした。
最後まで読んでいただきありがとうございます。よい CNTK ライフを!!

12
10
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
10