Estimators封装了如下actions:training、evaluation、prediction、exprot for serving。
Tensorflow提供预置的Estimator,也支持自定义Estimator。
注意,tensorflow的废弃使用tf.contrib.learn.Estimator
Estimators在tf.layers上构建,简化了配置。
Estimators会自动创建graph,因此无需自己创建graph。
预置的Estimators
通过预置的Estimators构建tensorflow程序,首先需要构建data importing函数。
def input_fn(dataset):
...
return feature_dict, label
定义特征列时,每个tf.feature_column定义一个特征名,类型,输入预处理过程。
population = tf.feature_column.numeric_column('population')
crime_rate = tf.feature_column.numeric_column('crime_rate')
median_education = tf.feature_column.numeric_column('median_education',
normalizer_fn='lambda x: x - global_education_mean')
实例化预置Estimators
estimator = tf.estimator.Estimator.LinearClassifier(
feature_columns=[population, crime_rate, median_education],
)
调用training,evaluation,inference方法
estimator.train(input_fn=my_training_set, steps=2000)
自定义Estimators
Estimator的核心是model函数,它用于构建graph。
下面将keras model,转化为Estimators。
实例化Keras inception v3 model
keras_inception_v3 = tf.keras.applications.inception_v3.InceptionV3(weights=None)
编译模型
keras_inception_v3.compile(optimizer=tf.keras.optimizers.SGD(lr=0.0001, momentum=0.9),
loss='categorical_crossentropy',
metric='accuracy')
将keras model转化为estimator
est_inception_v3 = tf.keras.estimator.model_to_estimator(keras_model=keras_inception_v3)
定义estimator的input函数
keras_inception_v3.input_names
train_input_fn = tf.estimator.inputs.numpy_input_fn(
x={"input_1": train_data},
y=train_labels,
num_epochs=1,
shuffle=False)
调用estimator的train方法
est_inception_v3.train(input_fn=train_input_fn, steps=2000)