مشاهده در TensorFlow.org | در Google Colab اجرا شود | مشاهده منبع در GitHub | دانلود دفترچه یادداشت |
بررسی اجمالی
میتوانید از تخمینگرهای سفارشی برای ایجاد مدلهای یکنواخت دلخواه با استفاده از لایههای TFL استفاده کنید. این راهنما مراحل مورد نیاز برای ایجاد چنین برآوردگرها را تشریح می کند.
برپایی
نصب پکیج TF Lattice:
pip install tensorflow-lattice
واردات بسته های مورد نیاز:
import tensorflow as tf
import logging
import numpy as np
import pandas as pd
import sys
import tensorflow_lattice as tfl
from tensorflow import feature_column as fc
from tensorflow_estimator.python.estimator.canned import optimizers
from tensorflow_estimator.python.estimator.head import binary_class_head
logging.disable(sys.maxsize)
دانلود مجموعه داده UCI Statlog (Heart):
csv_file = tf.keras.utils.get_file(
'heart.csv', 'http://storage.googleapis.com/download.tensorflow.org/data/heart.csv')
df = pd.read_csv(csv_file)
target = df.pop('target')
train_size = int(len(df) * 0.8)
train_x = df[:train_size]
train_y = target[:train_size]
test_x = df[train_size:]
test_y = target[train_size:]
df.head()
تنظیم مقادیر پیش فرض مورد استفاده برای آموزش در این راهنما:
LEARNING_RATE = 0.1
BATCH_SIZE = 128
NUM_EPOCHS = 1000
ستون های ویژگی
همانطور که برای هر برآوردگر TF دیگر، نیازهای داده به برآوردگر، که معمولا از طریق یک input_fn منتقل می شود و تجزیه با استفاده از FeatureColumns .
# Feature columns.
# - age
# - sex
# - ca number of major vessels (0-3) colored by flourosopy
# - thal 3 = normal; 6 = fixed defect; 7 = reversable defect
feature_columns = [
fc.numeric_column('age', default_value=-1),
fc.categorical_column_with_vocabulary_list('sex', [0, 1]),
fc.numeric_column('ca'),
fc.categorical_column_with_vocabulary_list(
'thal', ['normal', 'fixed', 'reversible']),
]
توجه داشته باشید که ویژگی های طبقه نیازی به توسط یک ستون از ویژگی های متراکم پیچیده می شود، از tfl.laysers.CategoricalCalibration
لایه طور مستقیم می توانید مصرف شاخص دسته.
ایجاد input_fn
مانند هر تخمینگر دیگری، میتوانید از input_fn برای تغذیه دادهها به مدل برای آموزش و ارزیابی استفاده کنید.
train_input_fn = tf.compat.v1.estimator.inputs.pandas_input_fn(
x=train_x,
y=train_y,
shuffle=True,
batch_size=BATCH_SIZE,
num_epochs=NUM_EPOCHS,
num_threads=1)
test_input_fn = tf.compat.v1.estimator.inputs.pandas_input_fn(
x=test_x,
y=test_y,
shuffle=False,
batch_size=BATCH_SIZE,
num_epochs=1,
num_threads=1)
ایجاد model_fn
راه های مختلفی برای ایجاد یک برآوردگر سفارشی وجود دارد. در اینجا ما یک ساخت model_fn
که یک مدل Keras در تانسورها ورودی تجزیه می نامد. به تجزیه ویژگی های ورودی، شما می توانید استفاده tf.feature_column.input_layer
، tf.keras.layers.DenseFeatures
یا tfl.estimators.transform_features
. اگر از دومی استفاده می کنید، نیازی به پیچیدن ویژگی های طبقه بندی با ستون های ویژگی متراکم نخواهید داشت و تانسورهای حاصل به هم متصل نمی شوند، که استفاده از ویژگی ها را در لایه های کالیبراسیون آسان تر می کند.
برای ساخت یک مدل، میتوانید لایههای TFL یا هر لایه دیگر Keras را با هم ترکیب کنید. در اینجا ما یک مدل Keras شبکه کالیبره شده از لایه های TFL ایجاد می کنیم و چندین محدودیت یکنواختی را اعمال می کنیم. سپس از مدل Keras برای ایجاد برآوردگر سفارشی استفاده می کنیم.
def model_fn(features, labels, mode, config):
"""model_fn for the custom estimator."""
del config
input_tensors = tfl.estimators.transform_features(features, feature_columns)
inputs = {
key: tf.keras.layers.Input(shape=(1,), name=key) for key in input_tensors
}
lattice_sizes = [3, 2, 2, 2]
lattice_monotonicities = ['increasing', 'none', 'increasing', 'increasing']
lattice_input = tf.keras.layers.Concatenate(axis=1)([
tfl.layers.PWLCalibration(
input_keypoints=np.linspace(10, 100, num=8, dtype=np.float32),
# The output range of the calibrator should be the input range of
# the following lattice dimension.
output_min=0.0,
output_max=lattice_sizes[0] - 1.0,
monotonicity='increasing',
)(inputs['age']),
tfl.layers.CategoricalCalibration(
# Number of categories including any missing/default category.
num_buckets=2,
output_min=0.0,
output_max=lattice_sizes[1] - 1.0,
)(inputs['sex']),
tfl.layers.PWLCalibration(
input_keypoints=[0.0, 1.0, 2.0, 3.0],
output_min=0.0,
output_max=lattice_sizes[0] - 1.0,
# You can specify TFL regularizers as tuple
# ('regularizer name', l1, l2).
kernel_regularizer=('hessian', 0.0, 1e-4),
monotonicity='increasing',
)(inputs['ca']),
tfl.layers.CategoricalCalibration(
num_buckets=3,
output_min=0.0,
output_max=lattice_sizes[1] - 1.0,
# Categorical monotonicity can be partial order.
# (i, j) indicates that we must have output(i) <= output(j).
# Make sure to set the lattice monotonicity to 'increasing' for this
# dimension.
monotonicities=[(0, 1), (0, 2)],
)(inputs['thal']),
])
output = tfl.layers.Lattice(
lattice_sizes=lattice_sizes, monotonicities=lattice_monotonicities)(
lattice_input)
training = (mode == tf.estimator.ModeKeys.TRAIN)
model = tf.keras.Model(inputs=inputs, outputs=output)
logits = model(input_tensors, training=training)
if training:
optimizer = optimizers.get_optimizer_instance_v2('Adagrad', LEARNING_RATE)
else:
optimizer = None
head = binary_class_head.BinaryClassHead()
return head.create_estimator_spec(
features=features,
mode=mode,
labels=labels,
optimizer=optimizer,
logits=logits,
trainable_variables=model.trainable_variables,
update_ops=model.updates)
آموزش و برآورد
با استفاده از model_fn
ما می توانیم ایجاد و آموزش برآوردگر.
estimator = tf.estimator.Estimator(model_fn=model_fn)
estimator.train(input_fn=train_input_fn)
results = estimator.evaluate(input_fn=test_input_fn)
print('AUC: {}'.format(results['auc']))
2021-09-30 20:51:11.094402: E tensorflow/stream_executor/cuda/cuda_driver.cc:271] failed call to cuInit: CUDA_ERROR_NO_DEVICE: no CUDA-capable device is detected AUC: 0.5946115255355835