まずアップcontrib
がan experimental moduleであり、コアAPIに卒業したクラス(例えばES Estimator
)が自動的に非推奨を取得するので、あなたは、tf.estimator.Estimator
の賛成でtf.contrib.learn.Estimator
を使用して停止する必要があります。
あなたの主な質問に戻り、model_fn
パラメーターtf.estimator.Estimator.__init__
で分散モデルを作成して渡すことができます。
def my_model(features, labels, mode):
net = features[X_FEATURE]
with tf.device('/device:GPU:1'):
for units in [10, 20, 10]:
net = tf.layers.dense(net, units=units, activation=tf.nn.relu)
net = tf.layers.dropout(net, rate=0.1)
with tf.device('/device:GPU:2'):
logits = tf.layers.dense(net, 3, activation=None)
onehot_labels = tf.one_hot(labels, 3, 1, 0)
loss = tf.losses.softmax_cross_entropy(onehot_labels=onehot_labels,
logits=logits)
optimizer = tf.train.AdagradOptimizer(learning_rate=0.1)
train_op = optimizer.minimize(loss, global_step=tf.train.get_global_step())
return tf.estimator.EstimatorSpec(mode, loss=loss, train_op=train_op)
[...]
classifier = tf.estimator.Estimator(model_fn=my_model)
上記モデルは、/device:GPU:2
配置と/device:GPU:1
配置を6層と3つの他の層を定義します。 my_model
関数の戻り値はEstimatorSpec
インスタンスにする必要があります。完全な実例はtensorflow examplesにあります。
ありがとうございます!私はすでに 'tf.estimator.Estimator'を使っています。 'Experiment'クラスは' tf.contrib.learn'からのものですが、私の知る限り、このクラスの他のバージョンはありません。 また、ありがとうございました!私は今それを得たと思う。私はちょうど入力fnなどを扱う方法がわかりませんでしたが、明らかに私はそのデバイスを特定する必要はありません。 – user3429596
右の 'Experiment'クラスはまだ実験的です(面白いと思います)。それが' contrib'の理由です。これはAPIが変更できることを意味します。しかし、一度それまたは他のクラスがコアに卒業したら、コードをコアAPIに移行する必要があります。 – Maxim