تاریخ را ذخیره کنید! Google I / O 18-20 مه بازمی گردد اکنون ثبت نام کنید
این صفحه به‌وسیله ‏Cloud Translation API‏ ترجمه شده است.
Switch to English

برآوردکنندگان کنسرو مشبک TF

مشاهده در TensorFlow.org در Google Colab اجرا کنید مشاهده منبع در GitHub دانلود دفترچه یادداشت

بررسی اجمالی

برآوردگرهای کنسرو شده روشهای سریع و ساده ای برای آموزش مدلهای TFL برای موارد استفاده معمول هستند. این راهنما مراحل لازم برای ایجاد برآورد کنسرو شده TFL را مشخص می کند.

برپایی

نصب بسته TF Lattice:

pip install -q tensorflow-lattice

وارد کردن بسته های مورد نیاز:

import tensorflow as tf

import copy
import logging
import numpy as np
import pandas as pd
import sys
import tensorflow_lattice as tfl
from tensorflow import feature_column as fc
logging.disable(sys.maxsize)

بارگیری مجموعه داده های UCI Statlog (قلب):

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()
Downloading data from http://storage.googleapis.com/download.tensorflow.org/data/heart.csv
16384/13273 [=====================================] - 0s 0us/step

تنظیم مقادیر پیش فرض مورد استفاده برای آموزش در این راهنما:

LEARNING_RATE = 0.01
BATCH_SIZE = 128
NUM_EPOCHS = 500
PREFITTING_NUM_EPOCHS = 10

ستون های ویژه

همانطور که برای هر برآوردگر TF دیگر ، داده ها باید به برآوردگر منتقل شوند ، که معمولاً از طریق input_fn و با استفاده از FeatureColumns تجزیه می شوند .

# Feature columns.
# - age
# - sex
# - cp        chest pain type (4 values)
# - trestbps  resting blood pressure
# - chol      serum cholestoral in mg/dl
# - fbs       fasting blood sugar > 120 mg/dl
# - restecg   resting electrocardiographic results (values 0,1,2)
# - thalach   maximum heart rate achieved
# - exang     exercise induced angina
# - oldpeak   ST depression induced by exercise relative to rest
# - slope     the slope of the peak exercise ST segment
# - 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('cp'),
    fc.numeric_column('trestbps', default_value=-1),
    fc.numeric_column('chol'),
    fc.categorical_column_with_vocabulary_list('fbs', [0, 1]),
    fc.categorical_column_with_vocabulary_list('restecg', [0, 1, 2]),
    fc.numeric_column('thalach'),
    fc.categorical_column_with_vocabulary_list('exang', [0, 1]),
    fc.numeric_column('oldpeak'),
    fc.categorical_column_with_vocabulary_list('slope', [0, 1, 2]),
    fc.numeric_column('ca'),
    fc.categorical_column_with_vocabulary_list(
        'thal', ['normal', 'fixed', 'reversible']),
]

برآوردگرهای کنسرو شده TFL از نوع ستون ویژگی برای تصمیم گیری در مورد نوع لایه کالیبراسیون استفاده می کنند. ما برای ستون های ویژگی عددی از یک لایه tfl.layers.CategoricalCalibration و از یک ستون ویژگی طبقه بندی از یک لایه tfl.layers.PWLCalibration استفاده می کنیم.

توجه داشته باشید که ستونهای ویژگی طبقه بندی شده توسط ستون ویژگی تعبیه شده بسته نمی شوند. آنها مستقیماً وارد برآوردگر می شوند.

ایجاد input_fn

همانطور که برای هر برآوردگر دیگر ، می توانید از input_fn برای تغذیه داده ها به مدل برای آموزش و ارزیابی استفاده کنید. برآوردگرهای TFL می توانند به طور خودکار مقادیر کمی از ویژگی ها را محاسبه کرده و از آنها به عنوان نقاط کلیدی ورودی برای لایه کالیبراسیون PWL استفاده کنند. برای انجام این کار ، آنها نیاز به عبور از یک feature_analysis_input_fn ، که شبیه آموزش ورودی_فن است ، اما با یک دوره یا یک مثال فرعی از داده ها.

train_input_fn = tf.compat.v1.estimator.inputs.pandas_input_fn(
    x=train_x,
    y=train_y,
    shuffle=False,
    batch_size=BATCH_SIZE,
    num_epochs=NUM_EPOCHS,
    num_threads=1)

# feature_analysis_input_fn is used to collect statistics about the input.
feature_analysis_input_fn = tf.compat.v1.estimator.inputs.pandas_input_fn(
    x=train_x,
    y=train_y,
    shuffle=False,
    batch_size=BATCH_SIZE,
    # Note that we only need one pass over the data.
    num_epochs=1,
    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)

# Serving input fn is used to create saved models.
serving_input_fn = (
    tf.estimator.export.build_parsing_serving_input_receiver_fn(
        feature_spec=fc.make_parse_example_spec(feature_columns)))

پیکربندی های ویژگی

تنظیمات ویژگی و تنظیمات هر ویژگی با استفاده از tfl.configs.FeatureConfig تنظیم می tfl.configs.FeatureConfig . پیکربندی های ویژگی شامل محدودیت های یکنواختی ، نظم در هر ویژگی (به tfl.configs.RegularizerConfig مراجعه کنید) و اندازه های شبکه برای مدل های شبکه.

اگر برای ویژگی ورودی هیچ پیکربندی تعریف نشده باشد ، از پیکربندی پیش فرض در tfl.config.FeatureConfig استفاده می شود.

# Feature configs are used to specify how each feature is calibrated and used.
feature_configs = [
    tfl.configs.FeatureConfig(
        name='age',
        lattice_size=3,
        # By default, input keypoints of pwl are quantiles of the feature.
        pwl_calibration_num_keypoints=5,
        monotonicity='increasing',
        pwl_calibration_clip_max=100,
        # Per feature regularization.
        regularizer_configs=[
            tfl.configs.RegularizerConfig(name='calib_wrinkle', l2=0.1),
        ],
    ),
    tfl.configs.FeatureConfig(
        name='cp',
        pwl_calibration_num_keypoints=4,
        # Keypoints can be uniformly spaced.
        pwl_calibration_input_keypoints='uniform',
        monotonicity='increasing',
    ),
    tfl.configs.FeatureConfig(
        name='chol',
        # Explicit input keypoint initialization.
        pwl_calibration_input_keypoints=[126.0, 210.0, 247.0, 286.0, 564.0],
        monotonicity='increasing',
        # Calibration can be forced to span the full output range by clamping.
        pwl_calibration_clamp_min=True,
        pwl_calibration_clamp_max=True,
        # Per feature regularization.
        regularizer_configs=[
            tfl.configs.RegularizerConfig(name='calib_hessian', l2=1e-4),
        ],
    ),
    tfl.configs.FeatureConfig(
        name='fbs',
        # Partial monotonicity: output(0) <= output(1)
        monotonicity=[(0, 1)],
    ),
    tfl.configs.FeatureConfig(
        name='trestbps',
        pwl_calibration_num_keypoints=5,
        monotonicity='decreasing',
    ),
    tfl.configs.FeatureConfig(
        name='thalach',
        pwl_calibration_num_keypoints=5,
        monotonicity='decreasing',
    ),
    tfl.configs.FeatureConfig(
        name='restecg',
        # Partial monotonicity: output(0) <= output(1), output(0) <= output(2)
        monotonicity=[(0, 1), (0, 2)],
    ),
    tfl.configs.FeatureConfig(
        name='exang',
        # Partial monotonicity: output(0) <= output(1)
        monotonicity=[(0, 1)],
    ),
    tfl.configs.FeatureConfig(
        name='oldpeak',
        pwl_calibration_num_keypoints=5,
        monotonicity='increasing',
    ),
    tfl.configs.FeatureConfig(
        name='slope',
        # Partial monotonicity: output(0) <= output(1), output(1) <= output(2)
        monotonicity=[(0, 1), (1, 2)],
    ),
    tfl.configs.FeatureConfig(
        name='ca',
        pwl_calibration_num_keypoints=4,
        monotonicity='increasing',
    ),
    tfl.configs.FeatureConfig(
        name='thal',
        # Partial monotonicity:
        # output(normal) <= output(fixed)
        # output(normal) <= output(reversible)        
        monotonicity=[('normal', 'fixed'), ('normal', 'reversible')],
    ),
]

مدل خطی کالیبره شده

برای ساخت یک برآورد کنسرو شده TFL ، از tfl.configs یک پیکربندی مدل tfl.configs . یک مدل خطی کالیبره شده با استفاده از tfl.configs.CalibratedLinearConfig . این کالیبراسیون را به صورت قطعه ای و خطی بر روی ویژگی های ورودی اعمال می کند و به دنبال آن یک ترکیب خطی و یک کالیبراسیون قطعه ای و خطی خروجی اختیاری اعمال می شود. هنگام استفاده از کالیبراسیون خروجی یا تعیین مرزهای خروجی ، لایه خطی میانگین ورودی را روی ورودی های کالیبره شده اعمال می کند.

این مثال در 5 ویژگی اول یک مدل خطی کالیبره شده ایجاد می کند. ما برای رسم نمودار مدل با نمودارهای کالیبراتور از tfl.visualization استفاده می کنیم.

# Model config defines the model structure for the estimator.
model_config = tfl.configs.CalibratedLinearConfig(
    feature_configs=feature_configs,
    use_bias=True,
    output_calibration=True,
    regularizer_configs=[
        # Regularizer for the output calibrator.
        tfl.configs.RegularizerConfig(name='output_calib_hessian', l2=1e-4),
    ])
# A CannedClassifier is constructed from the given model config.
estimator = tfl.estimators.CannedClassifier(
    feature_columns=feature_columns[:5],
    model_config=model_config,
    feature_analysis_input_fn=feature_analysis_input_fn,
    optimizer=tf.keras.optimizers.Adam(LEARNING_RATE),
    config=tf.estimator.RunConfig(tf_random_seed=42))
estimator.train(input_fn=train_input_fn)
results = estimator.evaluate(input_fn=test_input_fn)
print('Calibrated linear test AUC: {}'.format(results['auc']))
saved_model_path = estimator.export_saved_model(estimator.model_dir,
                                                serving_input_fn)
model_graph = tfl.estimators.get_model_graph(saved_model_path)
tfl.visualization.draw_model_graph(model_graph)
Calibrated linear test AUC: 0.834586501121521

png

مدل شبکه کالیبره شده

یک مدل شبکه کالیبره شده با استفاده از tfl.configs.CalibratedLatticeConfig . یک مدل شبکه کالیبره شده کالیبراسیون قطعه ای و خطی را بر روی ویژگی های ورودی اعمال می کند ، به دنبال آن یک مدل شبکه ای و یک کالیبراسیون قطعه ای خطی خروجی اختیاری ارائه می شود.

این مثال یک مدل شبکه کالیبره شده را روی 5 ویژگی اول ایجاد می کند.

# This is calibrated lattice model: Inputs are calibrated, then combined
# non-linearly using a lattice layer.
model_config = tfl.configs.CalibratedLatticeConfig(
    feature_configs=feature_configs,
    regularizer_configs=[
        # Torsion regularizer applied to the lattice to make it more linear.
        tfl.configs.RegularizerConfig(name='torsion', l2=1e-4),
        # Globally defined calibration regularizer is applied to all features.
        tfl.configs.RegularizerConfig(name='calib_hessian', l2=1e-4),
    ])
# A CannedClassifier is constructed from the given model config.
estimator = tfl.estimators.CannedClassifier(
    feature_columns=feature_columns[:5],
    model_config=model_config,
    feature_analysis_input_fn=feature_analysis_input_fn,
    optimizer=tf.keras.optimizers.Adam(LEARNING_RATE),
    config=tf.estimator.RunConfig(tf_random_seed=42))
estimator.train(input_fn=train_input_fn)
results = estimator.evaluate(input_fn=test_input_fn)
print('Calibrated lattice test AUC: {}'.format(results['auc']))
saved_model_path = estimator.export_saved_model(estimator.model_dir,
                                                serving_input_fn)
model_graph = tfl.estimators.get_model_graph(saved_model_path)
tfl.visualization.draw_model_graph(model_graph)
Calibrated lattice test AUC: 0.8433583974838257

png

گروه مشبک کالیبره شده

هنگامی که تعداد ویژگی ها زیاد است ، می توانید از یک مدل گروهی استفاده کنید ، که به جای ایجاد فقط یک شبکه بزرگ عظیم ، چندین شبکه کوچکتر برای زیر مجموعه ویژگی ها ایجاد می کند و خروجی آنها را متوسط ​​می کند. مدل های شبکه شبکه با استفاده از tfl.configs.CalibratedLatticeEnsembleConfig . یک مدل گروه شبکه ای کالیبره شده کالیبراسیون به صورت جزئی و خطی را روی ویژگی ورودی اعمال می کند و به دنبال آن مجموعه ای از مدل های شبکه ای و یک کالیبراسیون قطعه ای-خطی خروجی اختیاری ارائه می شود.

گروه مشبک تصادفی

پیکربندی مدل زیر از زیر مجموعه تصادفی ویژگی ها برای هر شبکه استفاده می کند.

# This is random lattice ensemble model with separate calibration:
# model output is the average output of separately calibrated lattices.
model_config = tfl.configs.CalibratedLatticeEnsembleConfig(
    feature_configs=feature_configs,
    num_lattices=5,
    lattice_rank=3)
# A CannedClassifier is constructed from the given model config.
estimator = tfl.estimators.CannedClassifier(
    feature_columns=feature_columns,
    model_config=model_config,
    feature_analysis_input_fn=feature_analysis_input_fn,
    optimizer=tf.keras.optimizers.Adam(LEARNING_RATE),
    config=tf.estimator.RunConfig(tf_random_seed=42))
estimator.train(input_fn=train_input_fn)
results = estimator.evaluate(input_fn=test_input_fn)
print('Random ensemble test AUC: {}'.format(results['auc']))
saved_model_path = estimator.export_saved_model(estimator.model_dir,
                                                serving_input_fn)
model_graph = tfl.estimators.get_model_graph(saved_model_path)
tfl.visualization.draw_model_graph(model_graph, calibrator_dpi=15)
Random ensemble test AUC: 0.902255654335022

png

گروه مشبک تصادفی RTL Layer

پیکربندی مدل زیر از یک لایه tfl.layers.RTL استفاده می کند که از زیر مجموعه تصادفی ویژگی ها برای هر شبکه استفاده می کند. ما توجه داریم که tfl.layers.RTL فقط از محدودیت های یکنواختی پشتیبانی می کند و باید از اندازه شبکه یکسانی برای همه ویژگی ها برخوردار باشد و هیچ tfl.layers.RTL برای هر ویژگی نداشته باشد. توجه داشته باشید که با استفاده از یک لایه tfl.layers.RTL شما امکان می دهد تا نسبت به استفاده از نمونه های جداگانه tfl.layers.Lattice گروه های بزرگتر مقیاس tfl.layers.Lattice .

# Make sure our feature configs have the same lattice size, no per-feature
# regularization, and only monotonicity constraints.
rtl_layer_feature_configs = copy.deepcopy(feature_configs)
for feature_config in rtl_layer_feature_configs:
  feature_config.lattice_size = 2
  feature_config.unimodality = 'none'
  feature_config.reflects_trust_in = None
  feature_config.dominates = None
  feature_config.regularizer_configs = None
# This is RTL layer ensemble model with separate calibration:
# model output is the average output of separately calibrated lattices.
model_config = tfl.configs.CalibratedLatticeEnsembleConfig(
    lattices='rtl_layer',
    feature_configs=rtl_layer_feature_configs,
    num_lattices=5,
    lattice_rank=3)
# A CannedClassifier is constructed from the given model config.
estimator = tfl.estimators.CannedClassifier(
    feature_columns=feature_columns,
    model_config=model_config,
    feature_analysis_input_fn=feature_analysis_input_fn,
    optimizer=tf.keras.optimizers.Adam(LEARNING_RATE),
    config=tf.estimator.RunConfig(tf_random_seed=42))
estimator.train(input_fn=train_input_fn)
results = estimator.evaluate(input_fn=test_input_fn)
print('Random ensemble test AUC: {}'.format(results['auc']))
saved_model_path = estimator.export_saved_model(estimator.model_dir,
                                                serving_input_fn)
model_graph = tfl.estimators.get_model_graph(saved_model_path)
tfl.visualization.draw_model_graph(model_graph, calibrator_dpi=15)
Random ensemble test AUC: 0.9241854548454285

png

گروه مشبک بلورها

TFL همچنین یک الگوریتم ترتیب ویژگی اکتشافی ، به نام Crystals را فراهم می کند. الگوریتم Crystals ابتدا مدلی پیش فرض را تربیت می کند که برهم کنش ویژگی های دوتایی را تخمین می زند. سپس گروه نهایی را به گونه ای تنظیم می کند که ویژگی هایی با فعل و انفعالات غیر خطی بیشتر در همان شبکه ها قرار دارند.

برای مدلهای Crystals ، شما همچنین باید یک prefitting_input_fn که برای آموزش مدل Prefit استفاده می شود ، همانطور که در بالا توضیح داده شده است. مدل دلفریب نیازی به آموزش کامل ندارد ، بنابراین چند دوره باید کافی باشد.

prefitting_input_fn = tf.compat.v1.estimator.inputs.pandas_input_fn(
    x=train_x,
    y=train_y,
    shuffle=False,
    batch_size=BATCH_SIZE,
    num_epochs=PREFITTING_NUM_EPOCHS,
    num_threads=1)

سپس می توانید با تنظیم lattice='crystals' در پیکربندی مدل ، مدل Crystal ایجاد کنید.

# This is Crystals ensemble model with separate calibration: model output is
# the average output of separately calibrated lattices.
model_config = tfl.configs.CalibratedLatticeEnsembleConfig(
    feature_configs=feature_configs,
    lattices='crystals',
    num_lattices=5,
    lattice_rank=3)
# A CannedClassifier is constructed from the given model config.
estimator = tfl.estimators.CannedClassifier(
    feature_columns=feature_columns,
    model_config=model_config,
    feature_analysis_input_fn=feature_analysis_input_fn,
    # prefitting_input_fn is required to train the prefitting model.
    prefitting_input_fn=prefitting_input_fn,
    optimizer=tf.keras.optimizers.Adam(LEARNING_RATE),
    prefitting_optimizer=tf.keras.optimizers.Adam(LEARNING_RATE),
    config=tf.estimator.RunConfig(tf_random_seed=42))
estimator.train(input_fn=train_input_fn)
results = estimator.evaluate(input_fn=test_input_fn)
print('Crystals ensemble test AUC: {}'.format(results['auc']))
saved_model_path = estimator.export_saved_model(estimator.model_dir,
                                                serving_input_fn)
model_graph = tfl.estimators.get_model_graph(saved_model_path)
tfl.visualization.draw_model_graph(model_graph, calibrator_dpi=15)
Crystals ensemble test AUC: 0.8859649300575256

png

با استفاده از ماژول tfl.visualization می توانید کالیبراتورهای ویژگی را با جزئیات بیشتر tfl.visualization کنید.

_ = tfl.visualization.plot_feature_calibrator(model_graph, "age")
_ = tfl.visualization.plot_feature_calibrator(model_graph, "restecg")

png

png