TensorFlow 2.0デフォルト・モードは即座に実行されます。必見は、最初のモデル構造図を構築する前よりも、実行後の結果を参照してください。このモードでは、同時に、それは図1の出力結果に応じ構築することができるデバッグプロセスを簡略化します。また、最初の構成変数を使用せずに、直接入力したデータを入力することができます。しかし、予備試験の後に、このモードは、実装の効率を低下させるだろう、デバッグ時にのみ使用することを推奨します。
tf.function識別モード@追加することにより、メソッドはJITコンパイラに切り替える前に、デフォルトのモードは、本番環境で、高効率で、モード1.0です。
ここでは、テストコードは次のとおりです。
import tensorflow as tf
import numpy as np
import time
import shutil
import os
class MyModel(tf.keras.Model):
def __init__(self,units):
super(MyModel, self).__init__(self)
self.dense=tf.keras.layers.Dense(units,activation=None)
def call(self, input_data):
# print('input_data',input_data)
output = self.dense(input_data)
return output
print(tf.__version__)
# 定义模型
my_model1=MyModel(3)
my_model2=MyModel(1)
losses = tf.keras.losses.MeanAbsoluteError()
optimizer = tf.keras.optimizers.Adadelta(learning_rate=1)
# 使用 @tf.function 标识,进行JIT编译,执行效率高
# 去掉 @tf.function 标识为即刻模式,可用于调试,执行效率较低
@tf.function
def train(input_data,target_data):
with tf.GradientTape() as tape:
# print('input_data',input_data.shape)
prediction = my_model1(input_data)
prediction = my_model2(prediction)
# tf.print('prediction1', prediction)
loss = losses(prediction, target_data)
# 记录日志,会影响效率
tf.summary.scalar('loss', loss, step=optimizer.iterations)
variables = my_model1.trainable_variables + my_model2.trainable_variables
gradients = tape.gradient(loss, variables)
optimizer.apply_gradients(zip(gradients, variables))
# 记录日志,会影响效率
if os.path.exists('./tmp/summaries'):
shutil.rmtree('./tmp/summaries')
summary_writer = tf.summary.create_file_writer('./tmp/summaries')
# 打印执行时间
start = time.process_time()
with summary_writer.as_default():
for i in range(500):
input_data = np.array([[1.,1.]])
target_data = np.array([[2.]])
train(input_data,target_data)
elapsed = (time.process_time() - start)
print("运行时间:",elapsed)
# 保存模型权重
my_model1.save_weights('./tmp/save_models1.h5')
my_model2.save_weights('./tmp/save_models2.h5')
# 加载模型权重
my_model1.load_weights('./tmp/save_models1.h5')
my_model2.load_weights('./tmp/save_models2.h5')
# 下面不在 @tf.function 标识的方法内,执行为即刻模式
print('识别')
input_data = np.array([[1.,1.]])
prediction = my_model1(input_data)
prediction = my_model2(prediction)
print('prediction2', prediction.numpy())