Keras 2.2.0 リリースノート (翻訳)
翻訳 : (株)クラスキャット セールスインフォメーション
日時 : 06/08/2018
- Keras のマイナーアップデート 2.2.0 がリリースされましたので、リリースノートを翻訳しておきました。
* 本ページは、github Keras の releases の Keras 2.2.0 を翻訳したものです:
改良領域
- 新しいモデル定義 API: Model サブクラス化 (= subclassing)。
- 新しい入力モード: TensorFlow tensor 上のモデルを呼び出す能力 (TensorFlow バックエンドのみ)。
- Theano と CNTK バックエンドにおける Keras の機能範囲の改良。
- バグ修正とパフォーマンス改良。
- コード構造、コードの健全性 (= health)、そしてテスト時間の縮小のための巨大なリファクタリング。特に :
- 今では Keras エンジンはいっそう多くのモジュール構造を進めています。
- Sequential モデルは今では Model の平易なサブクラスです。
- モジュール applications と preprocessing は今ではそれら自身のレポジトリへと外部に置かれます (keras-applications と keras-preprocessing)。
API 変更
- Model サブクラス化 API の追加 (詳細は後述)。
- TensorFlow バックエンドにおいて、シンボリック tensor がモデルに供給されることを可能にします (詳細は後述)。
- CNTK と Theano に層 SeparableConv1D, SeparableConv2D そしてバックエンド・メソッド separable_conv1d と separable_conv2d のためのサポートを可能にします (以前は TenosrFlow のためにのみ利用可能)。
- CNTK と Theano に applications Xception と MobileNet のためのサポートを可能にします (以前は TensorFlow のためにのみ利用可能)。
- MobileNetV2 アプリケーションを追加します (総てのバックエンドで利用可能)。
- ~/.keras.json configuration ファイル (e.g. PlaidML バックエンド) の変更により外部 (組み込みでない) バックエンドのロードを可能にします。
- ImageDataGenerator で sample_weight を追加します。
- 画像をディスクに書くための preprocessing.image.save_img ユティリティを追加します。
- Flatten 層の data_format 引数のデフォルトを None にします (これはデフォルトを global Keras config にします)。
- Sequential は今では Model の平易なサブクラスです。属性 sequential.model は deprecated です。
- EarlyStopping に baseline 引数を追加します (与えられた baseline に達しない場合訓練を停止します)。
- Conv1D に data_format 引数を追加します。
- multi_gpu_model serializable により返されるモデルを作成します。
- TimeDistributed 層の入力マスキングをサポートします。
- advanced_activation 層 ReLU を追加します、容易なシリアリゼーション機能を保持しながら ReLU 活性に configure することを容易にします。
- backend crossentropy 関数で axis=-1 引数を追加します、これは入力 tensor のクラス予測軸を指定します。
新しいモデル定義 API : Model サブクラス化
Sequential API と functional Model API に加えて、Model クラスのサブクラス化と貴方自身の call forward パスを書くことにより今ではモデルを定義可能です :
import keras class SimpleMLP(keras.Model): def __init__(self, use_bn=False, use_dp=False, num_classes=10): super(SimpleMLP, self).__init__(name='mlp') self.use_bn = use_bn self.use_dp = use_dp self.num_classes = num_classes self.dense1 = keras.layers.Dense(32, activation='relu') self.dense2 = keras.layers.Dense(num_classes, activation='softmax') if self.use_dp: self.dp = keras.layers.Dropout(0.5) if self.use_bn: self.bn = keras.layers.BatchNormalization(axis=-1) def call(self, inputs): x = self.dense1(inputs) if self.use_dp: x = self.dp(x) if self.use_bn: x = self.bn(x) return self.dense2(x) model = SimpleMLP() model.compile(...) model.fit(...)
層は __init__(self, …) で定義されて、forward パスは call(self, inputs) で指定されます。call では、self.add_loss(loss_tensor) を呼び出すことによりカスタム損失の指定も可能です (カスタム層でそうするようにです)。
新しい入力モード : シンボリック TensorFlow tensor
Keras 2.2.0 と TensorFlow 1.8 またはそれ以上において、シンボリック TensorFlow tensor を使用して (それらはデータを無期限に yeild することが想定されます)、fit, evaluate そして predict が可能です。API は fit_generator と他の generator メソッドで使用中のものに類似しています :
iterator = training_dataset.make_one_shot_iterator() x, y = iterator.get_next() model.fit(x, y, steps_per_epoch=100, epochs=10) iterator = validation_dataset.make_one_shot_iterator() x, y = iterator.get_next() model.evaluate(x, y, steps=50)
互換性を壊す変更 (Breaking Changes)
- legacy Merge 層と関連する機能 (Keras 0 の遺物) を削除します、これは May 2016 には deprecated で、完全削除は初期には August 2017 にスケジュールされていました。これらの層を使用する Keras 0 API からのモデルは Keras 2.2.0 及びそれ以上ではロードできません。
- truncated_normal base 初期化子は今では ~0.9 でスケールされた値を返します(truncation 後に正しい分散値の結果になります)。幾つかのモデルでは初期収束挙動に影響する小さな可能性を持ちます。
以上