將您的代碼從 TensorFlow 1 遷移到 TensorFlow 2(二)

2022-01-09 TensorFlow
TensorFlow 2.0 支持 Estimator。

當您使用 Estimator 時,可以使用 TensorFlow 1.x 中的input_fn()、tf.estimator.TrainSpec和tf.estimator.EvalSpec。

下面是結合訓練和評估規格使用input_fn的一個例子。

創建 input_fn 以及訓練 / 評估規格:

# Define the estimator's input_fn
def input_fn():
datasets, info = tfds.load(name='mnist', with_info=True, as_supervised=True)
mnist_train, mnist_test = datasets['train'], datasets['test']

BUFFER_SIZE = 10000
BATCH_SIZE = 64

def scale(image, label):
image = tf.cast(image, tf.float32)
image /= 255

return image, label[..., tf.newaxis]

train_data = mnist_train.map(scale).shuffle(BUFFER_SIZE).batch(BATCH_SIZE)
return train_data.repeat()

# Define train & eval specs
train_spec = tf.estimator.TrainSpec(input_fn=input_fn,
max_steps=STEPS_PER_EPOCH * NUM_EPOCHS)
eval_spec = tf.estimator.EvalSpec(input_fn=input_fn,
steps=STEPS_PER_EPOCH)

TensorFlow 2.0 中構建 Estimator 的方法會有一些不同。我們建議您使用 Keras 定義自己的模型,然後使用 tf.keras.estimator.model_to_estimator 實用程序將模型變為 Estimator。下面的代碼展示創建和訓練 Estimator 時如何使用這個實用工具。

def make_model():
return tf.keras.Sequential([
tf.keras.layers.Conv2D(32, 3, activation='relu',
kernel_regularizer=tf.keras.regularizers.l2(0.02),
input_shape=(28, 28, 1)),
tf.keras.layers.MaxPooling2D(),
tf.keras.layers.Flatten(),
tf.keras.layers.Dropout(0.1),
tf.keras.layers.Dense(64, activation='relu'),
tf.keras.layers.BatchNormalization(),
tf.keras.layers.Dense(10)
])

model = make_model()

model.compile(optimizer='adam',
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
metrics=['accuracy'])

estimator = tf.keras.estimator.model_to_estimator(
keras_model = model
)

tf.estimator.train_and_evaluate(estimator, train_spec, eval_spec)

INFO:tensorflow:Using default config.

INFO:tensorflow:Using default config.

WARNING:tensorflow:Using temporary folder as model directory: /tmp/tmp4q8g11bh

WARNING:tensorflow:Using temporary folder as model directory: /tmp/tmp4q8g11bh

INFO:tensorflow:Using the Keras model provided.

INFO:tensorflow:Using the Keras model provided.

WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.6/site-packages/tensorflow_core/python/ops/resource_variable_ops.py:1635: calling BaseResourceVariable.__init__ (from tensorflow.python.ops.resource_variable_ops) with constraint is deprecated and will be removed in a future version.
Instructions for updating:
If using Keras pass *_constraint arguments to layers.

WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.6/site-packages/tensorflow_core/python/ops/resource_variable_ops.py:1635: calling BaseResourceVariable.__init__ (from tensorflow.python.ops.resource_variable_ops) with constraint is deprecated and will be removed in a future version.
Instructions for updating:
If using Keras pass *_constraint arguments to layers.

INFO:tensorflow:Using config: {'_model_dir': '/tmp/tmp4q8g11bh', '_tf_random_seed': None, '_save_summary_steps': 100, '_save_checkpoints_steps': None, '_save_checkpoints_secs': 600, '_session_config': allow_soft_placement: true
graph_options {
  rewrite_options {
    meta_optimizer_iterations: ONE
  }
}
, '_keep_checkpoint_max': 5, '_keep_checkpoint_every_n_hours': 10000, '_log_step_count_steps': 100, '_train_distribute': None, '_device_fn': None, '_protocol': None, '_eval_distribute': None, '_experimental_distribute': None, '_experimental_max_worker_delay_secs': None, '_session_creation_timeout_secs': 7200, '_service': None, '_cluster_spec': ClusterSpec({}), '_task_type': 'worker', '_task_id': 0, '_global_id_in_cluster': 0, '_master': '', '_evaluation_master': '', '_is_chief': True, '_num_ps_replicas': 0, '_num_worker_replicas': 1}

INFO:tensorflow:Using config: {'_model_dir': '/tmp/tmp4q8g11bh', '_tf_random_seed': None, '_save_summary_steps': 100, '_save_checkpoints_steps': None, '_save_checkpoints_secs': 600, '_session_config': allow_soft_placement: true
graph_options {
  rewrite_options {
    meta_optimizer_iterations: ONE
  }
}
, '_keep_checkpoint_max': 5, '_keep_checkpoint_every_n_hours': 10000, '_log_step_count_steps': 100, '_train_distribute': None, '_device_fn': None, '_protocol': None, '_eval_distribute': None, '_experimental_distribute': None, '_experimental_max_worker_delay_secs': None, '_session_creation_timeout_secs': 7200, '_service': None, '_cluster_spec': ClusterSpec({}), '_task_type': 'worker', '_task_id': 0, '_global_id_in_cluster': 0, '_master': '', '_evaluation_master': '', '_is_chief': True, '_num_ps_replicas': 0, '_num_worker_replicas': 1}

INFO:tensorflow:Not using Distribute Coordinator.

INFO:tensorflow:Not using Distribute Coordinator.

INFO:tensorflow:Running training and evaluation locally (non-distributed).

INFO:tensorflow:Running training and evaluation locally (non-distributed).

INFO:tensorflow:Start train and evaluate loop. The evaluate will happen after every checkpoint. Checkpoint frequency is determined based on RunConfig arguments: save_checkpoints_steps None or save_checkpoints_secs 600.

INFO:tensorflow:Start train and evaluate loop. The evaluate will happen after every checkpoint. Checkpoint frequency is determined based on RunConfig arguments: save_checkpoints_steps None or save_checkpoints_secs 600.

WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.6/site-packages/tensorflow_core/python/training/training_util.py:236: Variable.initialized_value (from tensorflow.python.ops.variables) is deprecated and will be removed in a future version.
Instructions for updating:
Use Variable.read_value. Variables in 2.X are initialized automatically both in eager and graph (inside tf.defun) contexts.

WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.6/site-packages/tensorflow_core/python/training/training_util.py:236: Variable.initialized_value (from tensorflow.python.ops.variables) is deprecated and will be removed in a future version.
Instructions for updating:
Use Variable.read_value. Variables in 2.X are initialized automatically both in eager and graph (inside tf.defun) contexts.

INFO:tensorflow:Calling model_fn.

INFO:tensorflow:Calling model_fn.

INFO:tensorflow:Done calling model_fn.

INFO:tensorflow:Done calling model_fn.

INFO:tensorflow:Warm-starting with WarmStartSettings: WarmStartSettings(ckpt_to_initialize_from='/tmp/tmp4q8g11bh/keras/keras_model.ckpt', vars_to_warm_start='.*', var_name_to_vocab_info={}, var_name_to_prev_var_name={})

INFO:tensorflow:Warm-starting with WarmStartSettings: WarmStartSettings(ckpt_to_initialize_from='/tmp/tmp4q8g11bh/keras/keras_model.ckpt', vars_to_warm_start='.*', var_name_to_vocab_info={}, var_name_to_prev_var_name={})

INFO:tensorflow:Warm-starting from: /tmp/tmp4q8g11bh/keras/keras_model.ckpt

INFO:tensorflow:Warm-starting from: /tmp/tmp4q8g11bh/keras/keras_model.ckpt

INFO:tensorflow:Warm-starting variables only in TRAINABLE_VARIABLES.

INFO:tensorflow:Warm-starting variables only in TRAINABLE_VARIABLES.

INFO:tensorflow:Warm-started 8 variables.

INFO:tensorflow:Warm-started 8 variables.

INFO:tensorflow:Create CheckpointSaverHook.

INFO:tensorflow:Create CheckpointSaverHook.

INFO:tensorflow:Graph was finalized.

INFO:tensorflow:Graph was finalized.

INFO:tensorflow:Running local_init_op.

INFO:tensorflow:Running local_init_op.

INFO:tensorflow:Done running local_init_op.

INFO:tensorflow:Done running local_init_op.

INFO:tensorflow:Saving checkpoints for 0 into /tmp/tmp4q8g11bh/model.ckpt.

INFO:tensorflow:Saving checkpoints for 0 into /tmp/tmp4q8g11bh/model.ckpt.

INFO:tensorflow:loss = 2.7495928, step = 0

INFO:tensorflow:loss = 2.7495928, step = 0

INFO:tensorflow:Saving checkpoints for 25 into /tmp/tmp4q8g11bh/model.ckpt.

INFO:tensorflow:Saving checkpoints for 25 into /tmp/tmp4q8g11bh/model.ckpt.

INFO:tensorflow:Calling model_fn.

INFO:tensorflow:Calling model_fn.

INFO:tensorflow:Done calling model_fn.

INFO:tensorflow:Done calling model_fn.

INFO:tensorflow:Starting evaluation at 2019-12-21T03:00:31Z

INFO:tensorflow:Starting evaluation at 2019-12-21T03:00:31Z

INFO:tensorflow:Graph was finalized.

INFO:tensorflow:Graph was finalized.

INFO:tensorflow:Restoring parameters from /tmp/tmp4q8g11bh/model.ckpt-25

INFO:tensorflow:Restoring parameters from /tmp/tmp4q8g11bh/model.ckpt-25

INFO:tensorflow:Running local_init_op.

INFO:tensorflow:Running local_init_op.

INFO:tensorflow:Done running local_init_op.

INFO:tensorflow:Done running local_init_op.

INFO:tensorflow:Evaluation [1/5]

INFO:tensorflow:Evaluation [1/5]

INFO:tensorflow:Evaluation [2/5]

INFO:tensorflow:Evaluation [2/5]

INFO:tensorflow:Evaluation [3/5]

INFO:tensorflow:Evaluation [3/5]

INFO:tensorflow:Evaluation [4/5]

INFO:tensorflow:Evaluation [4/5]

INFO:tensorflow:Evaluation [5/5]

INFO:tensorflow:Evaluation [5/5]

INFO:tensorflow:Inference Time : 1.15786s

INFO:tensorflow:Inference Time : 1.15786s

INFO:tensorflow:Finished evaluation at 2019-12-21-03:00:32

INFO:tensorflow:Finished evaluation at 2019-12-21-03:00:32

INFO:tensorflow:Saving dict for global step 25: accuracy = 0.615625, global_step = 25, loss = 1.4754493

INFO:tensorflow:Saving dict for global step 25: accuracy = 0.615625, global_step = 25, loss = 1.4754493

INFO:tensorflow:Saving 'checkpoint_path' summary for global step 25: /tmp/tmp4q8g11bh/model.ckpt-25

INFO:tensorflow:Saving 'checkpoint_path' summary for global step 25: /tmp/tmp4q8g11bh/model.ckpt-25

INFO:tensorflow:Loss for final step: 0.3878889.

INFO:tensorflow:Loss for final step: 0.3878889.

({'accuracy': 0.615625, 'loss': 1.4754493, 'global_step': 25}, [])

如果您已經有一個需要維護的自定義 Estimator model_fn,可以轉換您的 model_fn 以使用 Keras 模型。

然而,由於兼容性問題,自定義 model_fn 仍舊會在 1.x 版本圖模式中運行。這意味著既沒有即刻運行,也沒有自動控制依賴項。

如果您傾向於對現有代碼進行最少程度的改動,可以使用 optimizers 和 metrics 之類的 tf.compat.v1 符號,使您的自定義 model_fn 能夠在 TF 2.0 中正常工作。

在自定義 model_fn 中使用 Keras 模型的方式與在自定義訓練循環中的使用方式類似:

但相對於自定義循環 (https://tensorflow.google.cn/guide/migrate#custom_loop),有一些重要的區別:

請注意:
「更新」是每一個批次後,需要應用於模型的變更。例如,layers.BatchNormalization 層中均值和方差的移動平均值。

下方的代碼將創建一個來自 model_fn 的 Estimator,可說明所有這些問題。

def my_model_fn(features, labels, mode):
model = make_model()

optimizer = tf.compat.v1.train.AdamOptimizer()
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True)

training = (mode == tf.estimator.ModeKeys.TRAIN)
predictions = model(features, training=training)

if mode == tf.estimator.ModeKeys.PREDICT:
return tf.estimator.EstimatorSpec(mode=mode, predictions=predictions)

reg_losses = model.get_losses_for(None) + model.get_losses_for(features)
total_loss=loss_fn(labels, predictions) + tf.math.add_n(reg_losses)

accuracy = tf.compat.v1.metrics.accuracy(labels=labels,
predictions=tf.math.argmax(predictions, axis=1),
name='acc_op')

update_ops = model.get_updates_for(None) + model.get_updates_for(features)
minimize_op = optimizer.minimize(
total_loss,
var_list=model.trainable_variables,
global_step=tf.compat.v1.train.get_or_create_global_step())
train_op = tf.group(minimize_op, update_ops)

return tf.estimator.EstimatorSpec(
mode=mode,
predictions=predictions,
loss=total_loss,
train_op=train_op, eval_metric_ops={'accuracy': accuracy})

# Create the Estimator & Train
estimator = tf.estimator.Estimator(model_fn=my_model_fn)
tf.estimator.train_and_evaluate(estimator, train_spec, eval_spec)


INFO:tensorflow:Using default config.

INFO:tensorflow:Using default config.

WARNING:tensorflow:Using temporary folder as model directory: /tmp/tmp20ozvzqk

WARNING:tensorflow:Using temporary folder as model directory: /tmp/tmp20ozvzqk

INFO:tensorflow:Using config: {'_model_dir': '/tmp/tmp20ozvzqk', '_tf_random_seed': None, '_save_summary_steps': 100, '_save_checkpoints_steps': None, '_save_checkpoints_secs': 600, '_session_config': allow_soft_placement: true
graph_options {
  rewrite_options {
    meta_optimizer_iterations: ONE
  }
}
, '_keep_checkpoint_max': 5, '_keep_checkpoint_every_n_hours': 10000, '_log_step_count_steps': 100, '_train_distribute': None, '_device_fn': None, '_protocol': None, '_eval_distribute': None, '_experimental_distribute': None, '_experimental_max_worker_delay_secs': None, '_session_creation_timeout_secs': 7200, '_service': None, '_cluster_spec': ClusterSpec({}), '_task_type': 'worker', '_task_id': 0, '_global_id_in_cluster': 0, '_master': '', '_evaluation_master': '', '_is_chief': True, '_num_ps_replicas': 0, '_num_worker_replicas': 1}

INFO:tensorflow:Using config: {'_model_dir': '/tmp/tmp20ozvzqk', '_tf_random_seed': None, '_save_summary_steps': 100, '_save_checkpoints_steps': None, '_save_checkpoints_secs': 600, '_session_config': allow_soft_placement: true
graph_options {
  rewrite_options {
    meta_optimizer_iterations: ONE
  }
}
, '_keep_checkpoint_max': 5, '_keep_checkpoint_every_n_hours': 10000, '_log_step_count_steps': 100, '_train_distribute': None, '_device_fn': None, '_protocol': None, '_eval_distribute': None, '_experimental_distribute': None, '_experimental_max_worker_delay_secs': None, '_session_creation_timeout_secs': 7200, '_service': None, '_cluster_spec': ClusterSpec({}), '_task_type': 'worker', '_task_id': 0, '_global_id_in_cluster': 0, '_master': '', '_evaluation_master': '', '_is_chief': True, '_num_ps_replicas': 0, '_num_worker_replicas': 1}

INFO:tensorflow:Not using Distribute Coordinator.

INFO:tensorflow:Not using Distribute Coordinator.

INFO:tensorflow:Running training and evaluation locally (non-distributed).

INFO:tensorflow:Running training and evaluation locally (non-distributed).

INFO:tensorflow:Start train and evaluate loop. The evaluate will happen after every checkpoint. Checkpoint frequency is determined based on RunConfig arguments: save_checkpoints_steps None or save_checkpoints_secs 600.

INFO:tensorflow:Start train and evaluate loop. The evaluate will happen after every checkpoint. Checkpoint frequency is determined based on RunConfig arguments: save_checkpoints_steps None or save_checkpoints_secs 600.

INFO:tensorflow:Calling model_fn.

INFO:tensorflow:Calling model_fn.

INFO:tensorflow:Done calling model_fn.

INFO:tensorflow:Done calling model_fn.

INFO:tensorflow:Create CheckpointSaverHook.

INFO:tensorflow:Create CheckpointSaverHook.

INFO:tensorflow:Graph was finalized.

INFO:tensorflow:Graph was finalized.

INFO:tensorflow:Running local_init_op.

INFO:tensorflow:Running local_init_op.

INFO:tensorflow:Done running local_init_op.

INFO:tensorflow:Done running local_init_op.

INFO:tensorflow:Saving checkpoints for 0 into /tmp/tmp20ozvzqk/model.ckpt.

INFO:tensorflow:Saving checkpoints for 0 into /tmp/tmp20ozvzqk/model.ckpt.

INFO:tensorflow:loss = 3.206945, step = 0

INFO:tensorflow:loss = 3.206945, step = 0

INFO:tensorflow:Saving checkpoints for 25 into /tmp/tmp20ozvzqk/model.ckpt.

INFO:tensorflow:Saving checkpoints for 25 into /tmp/tmp20ozvzqk/model.ckpt.

INFO:tensorflow:Calling model_fn.

INFO:tensorflow:Calling model_fn.

INFO:tensorflow:Done calling model_fn.

INFO:tensorflow:Done calling model_fn.

INFO:tensorflow:Starting evaluation at 2019-12-21T03:00:35Z

INFO:tensorflow:Starting evaluation at 2019-12-21T03:00:35Z

INFO:tensorflow:Graph was finalized.

INFO:tensorflow:Graph was finalized.

INFO:tensorflow:Restoring parameters from /tmp/tmp20ozvzqk/model.ckpt-25

INFO:tensorflow:Restoring parameters from /tmp/tmp20ozvzqk/model.ckpt-25

INFO:tensorflow:Running local_init_op.

INFO:tensorflow:Running local_init_op.

INFO:tensorflow:Done running local_init_op.

INFO:tensorflow:Done running local_init_op.

INFO:tensorflow:Evaluation [1/5]

INFO:tensorflow:Evaluation [1/5]

INFO:tensorflow:Evaluation [2/5]

INFO:tensorflow:Evaluation [2/5]

INFO:tensorflow:Evaluation [3/5]

INFO:tensorflow:Evaluation [3/5]

INFO:tensorflow:Evaluation [4/5]

INFO:tensorflow:Evaluation [4/5]

INFO:tensorflow:Evaluation [5/5]

INFO:tensorflow:Evaluation [5/5]

INFO:tensorflow:Inference Time : 1.22467s

INFO:tensorflow:Inference Time : 1.22467s

INFO:tensorflow:Finished evaluation at 2019-12-21-03:00:37

INFO:tensorflow:Finished evaluation at 2019-12-21-03:00:37

INFO:tensorflow:Saving dict for global step 25: accuracy = 0.509375, global_step = 25, loss = 1.4795268

INFO:tensorflow:Saving dict for global step 25: accuracy = 0.509375, global_step = 25, loss = 1.4795268

INFO:tensorflow:Saving 'checkpoint_path' summary for global step 25: /tmp/tmp20ozvzqk/model.ckpt-25

INFO:tensorflow:Saving 'checkpoint_path' summary for global step 25: /tmp/tmp20ozvzqk/model.ckpt-25

INFO:tensorflow:Loss for final step: 0.6385002.

INFO:tensorflow:Loss for final step: 0.6385002.

({'accuracy': 0.509375, 'loss': 1.4795268, 'global_step': 25}, [])

使用 TF 2.0 符號的自定義 model_fn

如果您想擺脫所有 TF 1.x 符號,然後將自定義的 model_fn 升級到原生 TF 2.0,您需要將 optimizers 和 metric 更新為tf.keras.optimizers和tf.keras.metrics。

在自定義的model_fn中,除了以上 變更,還需要進行更多升級:

對於上述的my_model_fn示例,使用 2.0 符號的遷移後代碼顯示為:

def my_model_fn(features, labels, mode):
model = make_model()

training = (mode == tf.estimator.ModeKeys.TRAIN)
loss_obj = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True)
predictions = model(features, training=training)

# Get both the unconditional losses (the None part)
# and the input-conditional losses (the features part).
reg_losses = model.get_losses_for(None) + model.get_losses_for(features)
total_loss=loss_obj(labels, predictions) + tf.math.add_n(reg_losses)

# Upgrade to tf.keras.metrics.
accuracy_obj = tf.keras.metrics.Accuracy(name='acc_obj')
accuracy = accuracy_obj.update_state(
y_true=labels, y_pred=tf.math.argmax(predictions, axis=1))

train_op = None
if training:
# Upgrade to tf.keras.optimizers.
optimizer = tf.keras.optimizers.Adam()
# Manually assign tf.compat.v1.global_step variable to optimizer.iterations
# to make tf.compat.v1.train.global_step increased correctly.
# This assignment is a must for any `tf.train.SessionRunHook` specified in
# estimator, as SessionRunHooks rely on global step.
optimizer.iterations = tf.compat.v1.train.get_or_create_global_step()
# Get both the unconditional updates (the None part)
# and the input-conditional updates (the features part).
update_ops = model.get_updates_for(None) + model.get_updates_for(features)
# Compute the minimize_op.
minimize_op = optimizer.get_updates(
total_loss,
model.trainable_variables)[0]
train_op = tf.group(minimize_op, *update_ops)

return tf.estimator.EstimatorSpec(
mode=mode,
predictions=predictions,
loss=total_loss,
train_op=train_op,
eval_metric_ops={'Accuracy': accuracy_obj})

# Create the Estimator & Train.
estimator = tf.estimator.Estimator(model_fn=my_model_fn)
tf.estimator.train_and_evaluate(estimator, train_spec, eval_spec)

INFO:tensorflow:Using default config.

INFO:tensorflow:Using default config.

WARNING:tensorflow:Using temporary folder as model directory: /tmp/tmpeltbj_0v

WARNING:tensorflow:Using temporary folder as model directory: /tmp/tmpeltbj_0v

INFO:tensorflow:Using config: {'_model_dir': '/tmp/tmpeltbj_0v', '_tf_random_seed': None, '_save_summary_steps': 100, '_save_checkpoints_steps': None, '_save_checkpoints_secs': 600, '_session_config': allow_soft_placement: true
graph_options {
  rewrite_options {
    meta_optimizer_iterations: ONE
  }
}
, '_keep_checkpoint_max': 5, '_keep_checkpoint_every_n_hours': 10000, '_log_step_count_steps': 100, '_train_distribute': None, '_device_fn': None, '_protocol': None, '_eval_distribute': None, '_experimental_distribute': None, '_experimental_max_worker_delay_secs': None, '_session_creation_timeout_secs': 7200, '_service': None, '_cluster_spec': ClusterSpec({}), '_task_type': 'worker', '_task_id': 0, '_global_id_in_cluster': 0, '_master': '', '_evaluation_master': '', '_is_chief': True, '_num_ps_replicas': 0, '_num_worker_replicas': 1}

INFO:tensorflow:Using config: {'_model_dir': '/tmp/tmpeltbj_0v', '_tf_random_seed': None, '_save_summary_steps': 100, '_save_checkpoints_steps': None, '_save_checkpoints_secs': 600, '_session_config': allow_soft_placement: true
graph_options {
  rewrite_options {
    meta_optimizer_iterations: ONE
  }
}
, '_keep_checkpoint_max': 5, '_keep_checkpoint_every_n_hours': 10000, '_log_step_count_steps': 100, '_train_distribute': None, '_device_fn': None, '_protocol': None, '_eval_distribute': None, '_experimental_distribute': None, '_experimental_max_worker_delay_secs': None, '_session_creation_timeout_secs': 7200, '_service': None, '_cluster_spec': ClusterSpec({}), '_task_type': 'worker', '_task_id': 0, '_global_id_in_cluster': 0, '_master': '', '_evaluation_master': '', '_is_chief': True, '_num_ps_replicas': 0, '_num_worker_replicas': 1}

INFO:tensorflow:Not using Distribute Coordinator.

INFO:tensorflow:Not using Distribute Coordinator.

INFO:tensorflow:Running training and evaluation locally (non-distributed).

INFO:tensorflow:Running training and evaluation locally (non-distributed).

INFO:tensorflow:Start train and evaluate loop. The evaluate will happen after every checkpoint. Checkpoint frequency is determined based on RunConfig arguments: save_checkpoints_steps None or save_checkpoints_secs 600.

INFO:tensorflow:Start train and evaluate loop. The evaluate will happen after every checkpoint. Checkpoint frequency is determined based on RunConfig arguments: save_checkpoints_steps None or save_checkpoints_secs 600.

INFO:tensorflow:Calling model_fn.

INFO:tensorflow:Calling model_fn.

INFO:tensorflow:Done calling model_fn.

INFO:tensorflow:Done calling model_fn.

INFO:tensorflow:Create CheckpointSaverHook.

INFO:tensorflow:Create CheckpointSaverHook.

INFO:tensorflow:Graph was finalized.

INFO:tensorflow:Graph was finalized.

INFO:tensorflow:Running local_init_op.

INFO:tensorflow:Running local_init_op.

INFO:tensorflow:Done running local_init_op.

INFO:tensorflow:Done running local_init_op.

INFO:tensorflow:Saving checkpoints for 0 into /tmp/tmpeltbj_0v/model.ckpt.

INFO:tensorflow:Saving checkpoints for 0 into /tmp/tmpeltbj_0v/model.ckpt.

INFO:tensorflow:loss = 2.9231493, step = 0

INFO:tensorflow:loss = 2.9231493, step = 0

INFO:tensorflow:Saving checkpoints for 25 into /tmp/tmpeltbj_0v/model.ckpt.

INFO:tensorflow:Saving checkpoints for 25 into /tmp/tmpeltbj_0v/model.ckpt.

INFO:tensorflow:Calling model_fn.

INFO:tensorflow:Calling model_fn.

INFO:tensorflow:Done calling model_fn.

INFO:tensorflow:Done calling model_fn.

INFO:tensorflow:Starting evaluation at 2019-12-21T03:00:40Z

INFO:tensorflow:Starting evaluation at 2019-12-21T03:00:40Z

INFO:tensorflow:Graph was finalized.

INFO:tensorflow:Graph was finalized.

INFO:tensorflow:Restoring parameters from /tmp/tmpeltbj_0v/model.ckpt-25

INFO:tensorflow:Restoring parameters from /tmp/tmpeltbj_0v/model.ckpt-25

INFO:tensorflow:Running local_init_op.

INFO:tensorflow:Running local_init_op.

INFO:tensorflow:Done running local_init_op.

INFO:tensorflow:Done running local_init_op.

INFO:tensorflow:Evaluation [1/5]

INFO:tensorflow:Evaluation [1/5]

INFO:tensorflow:Evaluation [2/5]

INFO:tensorflow:Evaluation [2/5]

INFO:tensorflow:Evaluation [3/5]

INFO:tensorflow:Evaluation [3/5]

INFO:tensorflow:Evaluation [4/5]

INFO:tensorflow:Evaluation [4/5]

INFO:tensorflow:Evaluation [5/5]

INFO:tensorflow:Evaluation [5/5]

INFO:tensorflow:Inference Time : 1.13835s

INFO:tensorflow:Inference Time : 1.13835s

INFO:tensorflow:Finished evaluation at 2019-12-21-03:00:41

INFO:tensorflow:Finished evaluation at 2019-12-21-03:00:41

INFO:tensorflow:Saving dict for global step 25: Accuracy = 0.728125, global_step = 25, loss = 1.6920828

INFO:tensorflow:Saving dict for global step 25: Accuracy = 0.728125, global_step = 25, loss = 1.6920828

INFO:tensorflow:Saving 'checkpoint_path' summary for global step 25: /tmp/tmpeltbj_0v/model.ckpt-25

INFO:tensorflow:Saving 'checkpoint_path' summary for global step 25: /tmp/tmpeltbj_0v/model.ckpt-25

INFO:tensorflow:Loss for final step: 0.43470243.

INFO:tensorflow:Loss for final step: 0.43470243.

({'Accuracy': 0.728125, 'loss': 1.6920828, 'global_step': 25}, [])

TensorFlow 2.0 API 依然支持tf.estimator.DNN*、tf.estimator.Linear*和tf.estimator.DNNLinearCombined*系列中的預製 Estimator,但某些參數已變更:input_layer_partitioner:已在 2.0 中刪除。loss_reduction:已升級為tf.keras.losses.Reduction,而不是tf.compat.v1.losses.Reduction。其默認值也從tf.compat.v1.losses.Reduction.SUM變更為tf.keras.losses.Reduction.SUM_OVER_BATCH_SIZE。

optimizer、dnn_optimizer和linear_optimizer:此類參數已更新為tf.keras.optimizers,而不是tf.compat.v1.train.Optimizer。

預製 Estimator
https://tensorflow.google.cn/guide/premade_estimators

如要遷移上述變更:

input_layer_partitioner無需遷移,因為在 TF 2.0 中分布策略會自動對其處理。

對於loss_reduction,請查看tf.keras.losses.Reduction獲取支持的選項。

對於optimizer參數,如果您沒有傳入optimizer、dnn_optimizer或linear_optimizer參數,又或您已經在代碼中將optimizer的參數指定為string,那麼您無需做任何變更。系統會默認使用tf.keras.optimizers。否則,您需要將其從tf.compat.v1.train.Optimizer更新為相應的tf.keras.optimizers。

因為tf.keras.optimizers會生成不同的參數組並保存到檢查點,所以遷移至keras.optimizers會破壞使用 TF 1.x 保存的檢查點。為了讓舊的檢查點在您遷移至 TF 2.0 後仍然可用,請嘗試 檢查點轉換器工具。

! curl -O https://raw.githubusercontent.com/tensorflow/estimator/master/tensorflow_estimator/python/estimator/tools/checkpoint_converter.py

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 15371  100 15371    0     0  37674      0 --:--:-- --:--:-- --:--:-- 37581

! python checkpoint_converter.py -h

2019-12-21 03:00:42.978036: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libnvinfer.so.6
2019-12-21 03:00:42.978321: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'libnvinfer_plugin.so.6'; dlerror: libnvinfer_plugin.so.6: cannot open shared object file: No such file or directory
2019-12-21 03:00:42.978341: W tensorflow/compiler/tf2tensorrt/utils/py_utils.cc:30] Cannot dlopen some TensorRT libraries. If you would like to use Nvidia GPU with TensorRT, please make sure the missing libraries mentioned above are installed properly.
usage: checkpoint_converter.py [-h]
                               {dnn,linear,combined} source_checkpoint
                               source_graph target_checkpoint

positional arguments:
  {dnn,linear,combined}
                        The type of estimator to be converted. So far, the
                        checkpoint converter only supports Canned Estimator.
                        So the allowed types include linear, dnn and combined.
  source_checkpoint     Path to source checkpoint file to be read in.
  source_graph          Path to source graph file to be read in.
  target_checkpoint     Path to checkpoint file to be written out.

optional arguments:
  -h, --help            show this help message and exit

這個類已簡化為保留 int, 而不是 tf.compat.v1.Dimension 對象。因此不需要調用 .value() 來獲得 int。

仍然可以從 tf.TensorShape.dims 中訪問單獨的 tf.compat.v1.Dimension 對象。

以下所示為 TensorFlow 1.x 和 TensorFlow 2.0 之間的區別。

# Create a shape and choose an index
i = 0
shape = tf.TensorShape([16, None, 256])
shape

TensorShape([16, None, 256])

16

for dim in shape:
value = dim.value
print(value)

for value in shape:
print(value)

16None

256

如果 TF 1.x 中您的代碼是這樣(或使用任何其他維度方法):

dim = shape[i]
dim.assert_is_compatible_with(other_dim)

other_dim = 16
Dimension = tf.compat.v1.Dimension

if shape.rank is None:
dim = Dimension(None)
else:
dim = shape.dims[i]
dim.is_compatible_with(other_dim) # or any other dimension method

True

shape = tf.TensorShape(None)

if shape:
dim = shape.dims[i]
dim.is_compatible_with(other_dim) # or any other dimension method

如果等級已知,則 tf.TensorShape 的布爾值是 True,否則是 False。

print(bool(tf.TensorShape([]))) # Scalar
print(bool(tf.TensorShape([0]))) # 0-length vector
print(bool(tf.TensorShape([1]))) # 1-length vector
print(bool(tf.TensorShape([None]))) # Unknown-length vector
print(bool(tf.TensorShape([1, 10, 100]))) # 3D tensor
print(bool(tf.TensorShape([None, None, None]))) # 3D tensor with no known dimensions
print()
print(bool(tf.TensorShape(None))) # A tensor with unknown rank.

True
True
True
True
True
True

False

相關焦點

  • Tensorflow Object Detection API 終於支持tensorflow1.x與tensorflow2.x了
    基於tensorflow框架構建的快速對象檢測模型構建、訓練、部署框架,是針對計算機視覺領域對象檢測任務的深度學習框架。之前tensorflow2.x一直不支持該框架,最近Tensorflow Object Detection API框架最近更新了,同時支持tensorflow1.x與tensorflow2.x。
  • 如何使用TensorFlow Hub和代碼示例
    請注意,對於「默認」籤名,通常只有一個輸出,但是當您使用非默認籤名時,圖表的多個圖層將向您公開。(模塊將在TensorFlow Hub中不斷添加/更新)在每個示例中,我已將其與Dataset和Iterator管道集成,並與Saved_Model一起保存。(您可以通過代碼示例查看我關於Dataset和Iterator使用情況的詳細中文帖子) 1)圖像分類模塊https://tfhub.dev/s?
  • TensorFlow 決策森林來啦!
    TF-DF 為 TensorFlow 用戶提供了這類模型以及整套量身定製的工具:如果您之前通過其他庫使用決策森林,那麼可以在此了解一下 TF-DF 的部分功能:工具https://tensorflow.google.cn/resources/tools庫https://tensorflow.google.cn
  • 使用 tfdbg 調試 TensorFlow 代碼
    調試器運行到第 30 輪時發現 L2Loss_1:0 tensor 中出現了 NaN/Inf,程序中斷,我們可以輸入「pt L2Loss_1:0」 列印這個 tensor:我們繼續跟蹤它前一級 tensor(通過命令 「ni L2Loss_1:0」 得知前一個 tensor 為 sub_1,再使用 「pt sub_1」 命令列印 sub_1 的值)
  • Tensorflow 入門:Tensor
    通過最後一句代碼可以看到:tensorflow 2.0 中的計算圖默認是立即執行的(Eagerly Execution)。 Tensor 持有標量值Tensor 可以持有標量:它的數據類型是 float32, 也是由tensorflow 推斷出來的。 可以對其進行包含廣播的算數運算:
  • TensorFlow 安裝手冊 — 使用 pip 安裝 TensorFlow
    (https://tensorflow.google.cn/tutorials/?hl=zh-CN)一些安裝機制需要 TensorFlow Python 包的 URL。 您指定的值取決於您的 Python 版本。
  • tensorflow(6)利用tensorflow/serving實現模型部署及預測
    在文章tensorflow(5)將ckpt轉化為pb文件並利用tensorflow/serving實現模型部署及預測中,筆者以一個簡單的例子,來介紹如何在tensorflow中將ckpt轉化為pb文件,並利用tensorflow/serving來實現模型部署及預測。本文將會介紹如何使用tensorflow/serving來實現單模型部署、多模型部署、模型版本控制以及模型預測。
  • TensorFlow Serving入門
    docker pull tensorflow/serving2.下載官方示例代碼示例代碼中包含已訓練好的模型和與服務端進行通信的客戶端(RESTfull API形式不需要專門的客戶端)mkdir -p /tmp/tfservingcd /tmp/tfservinggit clone https://github.com/tensorflow/serving3.
  • TensorFlow 篇 | TensorFlow 數據輸入格式之 TFRecord
    「導語」 TFRecord 是 TensorFlow 生態中的一個重要組件,它是一種二進位序列的存儲格式,使用該格式可以使輸入數據的讀取和處理更為高效,從而提升整體訓練流程的速度,另外,它還具有極高的靈活性,可以為複雜特徵數據的構建與解析提供便利。本文將對 TFRecord 數據文件的生成與讀取流程進行詳細地介紹,並提供相應的示例代碼作為參考。
  • TensorFlow Hub, 給您帶來全新的 Web 體驗
    ,我們發布了 TensorFlow Hub,這是一個在 TensorFlow 中發布,發現和重用部分機器學習模塊的平臺。Universal Sentence Encoder 已成為 TF Hub 上最受歡迎的模塊之一。圖2:查找使用西班牙語數據訓練的文本嵌入毋庸置疑,您可以在 TF Hub 上搜索和過濾模塊。 針對您問題的文本模塊,其適用性取決於它們接受訓練的數據。
  • Object Detection API 現已支持 TensorFlow 2
    可能有很多團隊正在努力執行類似的遷移項目,因此我們認為,有必要將我們的思維過程和方法分享出來。即使那些不使用 TensorFlow 對象檢測模型的用戶,也能從中獲得幫助。目前,使用我們的代碼庫的用戶有三類:(1) 希望利用新功能(Eager 模式訓練、分布策略)和新模型的新用戶;(2) 想要遷移到 TF2 的現有 TF1 用戶;以及 (3) 暫時不希望遷移的現有 TF1 用戶。
  • TensorFlow 2.0 部署:TensorFlow Serving
    例如,要將 [@前文使用 SavedModel 導出的 MNIST 手寫體識別模型] (使用 Keras Sequential 模式建立)以 MLP 的模型名在 8501 埠進行部署,可以直接使用以下命令:tensorflow_model_server \--rest_api_port=8501 \--model_name=MLP \--model_base_path
  • tensorflow(7)利用tensorflow/serving實現BERT模型部署
    本文將在此基礎上,將模型訓練後生成的ckpt文件轉化為pb文件(tensorflow/serving支持的部署文件格式),並使用tensorflow/serving來實現BERT模型的部署及預測。如何將ckpt文件轉化為pb文件?   該項目使用BERT+Bi-LSTM+CRF結構實現中文序列標註,對BERT進行微調,因此模型無疑是複雜的。
  • 【翻譯】Sklearn 與 TensorFlow 機器學習實用指南 —— 第9章 (上)啟動並運行TensorFlow
    它的基本原理很簡單:首先在 Python 中定義要執行的計算圖(例如圖 9-1),然後 TensorFlow 使用該圖並使用優化的 C++ 代碼高效運行該圖。最重要的是,Tensorflow 可以將圖分解為多個塊並在多個 CPU 或 GPU 上並行運行(如圖 9-2 所示)。
  • 一文上手最新TensorFlow2.0系列(二)
    我們可以直接使用「pip installtensorflow==2.0.0-alpha0」命令來進行安裝。由於作者使用的pip源還沒有加入「TensorFlow2.0.0-alpha0」版本,所以這裡我們直接到「PyPi」網站下載TensorFlow2.0 Alpha版的安裝包。
  • Tensorflow如何導出與使用預測圖
    tensorflow中一個工具類copy過來的,發現很好用!x_dict, n_classes, dropout):    conv1 = tf.layers.conv2d(x_dict, 32, 5, activation=tf.nn.relu)    pool1 = tf.layers.max_pooling2d(conv1, pool_size=2, strides=2)    conv2 = tf.layers.conv2d
  • TensorFlow 2.0 常用模塊2:TensorBoard
    而 TensorBoard 就是一個能夠幫助我們將訓練過程可視化的工具。首先在代碼目錄下建立一個文件夾(如 ./tensorboard )存放 TensorBoard 的記錄文件,並在代碼中實例化一個記錄器:1summary_writer = tf.summary.create_file_writer('.
  • 社區分享 | Spark 玩轉 TensorFlow 2.0
    [1].bias)## 將模型保存成pb格式文件export_path = ". <version>1.15.0</version></dependency>也可以從下面網址中直接下載 org.tensorflow.tensorflow 的 jar 包,以及其依賴的 org.tensorflow.libtensorflow 和 org.tensorflowlibtensorflow_jni 的 jar 包放到項目中
  • Windows系統如何安裝Tensorflow Object Detection API
    什麼是Tensorflow Object Detection API基於tensorflow的一套高級訓練、檢測、可配置的API框架,支持多種預訓練模型檢測,自定義對象檢測、遷移學習等訓練。十分方便的模型構建、訓練、導出、部署框架,是針對計算機視覺的獨特而快速的解決方案框架大致可以分為如下三步1.
  • Tensorflow in R 系列(1) :數字圖片分類
    reshape:將每個2維的28 × 28 的圖片變成1維數據 1× 784 的數據rescale:將每個由0到255的像素(pixel)轉為0到1:原來是0的,現在 0/255=0 原來是255的,現在255/255=1。原來為200,現在200/255=0.78