なんか、いつものように、TensorFlowのソースコード眺めていたら、見つけました。
MNIST と ResNet-50 のサンプルコードがある。。。
MNISTのサンプルコードを見てみると
とりあえず、kera でモデルを作って、、、
引用 model = tf.keras.models.Sequential() model.add( tf.keras.layers.Conv2D( 32, kernel_size=(3, 3), activation='relu', input_shape=input_shape)) model.add(tf.keras.layers.Conv2D(64, (3, 3), activation='relu')) model.add(tf.keras.layers.MaxPooling2D(pool_size=(2, 2))) model.add(tf.keras.layers.Dropout(0.25)) model.add(tf.keras.layers.Flatten()) model.add(tf.keras.layers.Dense(128, activation='relu')) model.add(tf.keras.layers.Dropout(0.5)) model.add(tf.keras.layers.Dense(num_classes, activation='softmax'))
そのあと、TPU を使う場合は、
引用 if use_tpu: strategy = keras_support.TPUDistributionStrategy(num_cores_per_host=8) model = keras_support.tpu_model(model, strategy=strategy, tpu_name_or_address=flags.FLAGS.tpu)
感じに、keras_support.TPUDistributionStrategyなるAPIでホスト1つに対して、TPUを何個使うかを指定。
このは、keras_support.TPUDistributionStrategyは、
で、TPUStrategyは、
このは、keras_support.TPUDistributionStrategyは、
def TPUDistributionStrategy(*args, **kw): # pylint: disable=invalid-name from tensorflow.contrib.distribute.python import tpu_strategy # pylint: disable=g-import-not-at-top return tpu_strategy.TPUStrategy(*args, **kw)感じになっていて、tpu_strategy.TPUStrategyを呼んでいるだけ。。。
で、TPUStrategyは、
引用 class TPUStrategy(one_device_strategy.OneDeviceStrategy): """Experimental TPU distribution strategy implementation."""でクラスになっている。
サンプルコードに戻って。。。
tpu_modelを見てみると。。。
引用 model = keras_support.tpu_model(model, strategy=strategy, tpu_name_or_address=flags.FLAGS.tpu)モデル(model)をTPUのモデルに変換?
tpu_modelを見てみると。。。
引用 def tpu_model(model, tpu_name_or_address=None, strategy=None): """Copy `model` along with weights to the TPU. Returns a TPU model.とあって、モデルをウェイトと共に、TPUにコピーして、TPUモデルが戻ってくると。。。
使い方は、
引用 Args: model: A `KerasTPUModel`. tpu_name_or_address: A string that is either the name of the Cloud TPU, the grpc address of the Cloud TPU, or (Googlers only) the BNS name of the Cloud TPU. If tpu_name_or_address is None, the TPUClusterResolver will examine the environment to determine a potential Cloud TPU to use. strategy: `TPUDistributionStrategy`. The strategy to use for replicating model across multiple TPU cores. Returns: A new `KerasTPUModel` instance.
とあります。
この後のコードは、compile => fit => evaluate と。。。
引用 model.compile( loss=tf.keras.losses.categorical_crossentropy, optimizer=tf.train.GradientDescentOptimizer(learning_rate=0.05), metrics=['accuracy']) 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)。