Python işlev tabanlı bileşen tanımı, sizi bir bileşen belirtimi sınıfı, yürütücü sınıfı ve bileşen arayüz sınıfı tanımlama zahmetinden kurtararak TFX özel bileşenleri oluşturmanızı kolaylaştırır. Bu bileşen tanımlama stilinde, tür ipuçlarıyla açıklamalı bir işlev yazarsınız. Tür ipuçları, bileşeninizin giriş yapıtlarını, çıktı yapıtlarını ve parametrelerini açıklar.
Özel bileşeninizi bu tarzda yazmak, aşağıdaki örnekte olduğu gibi çok basittir.
class MyOutput(TypedDict):
  accuracy: float
@component
def MyValidationComponent(
    model: InputArtifact[Model],
    blessing: OutputArtifact[Model],
    accuracy_threshold: Parameter[int] = 10,
) -> MyOutput:
  '''My simple custom model validation component.'''
  accuracy = evaluate_model(model)
  if accuracy >= accuracy_threshold:
    write_output_blessing(blessing)
  return {
    'accuracy': accuracy
  }
 Temel olarak bu, BaseComponent ve onun Spec ve Executor sınıflarının bir alt sınıfı olan özel bir bileşeni tanımlar.
 BaseBeamComponent bir alt sınıfını, TFX boru hattı bazında paylaşımlı konfigürasyona sahip bir ışın boru hattını (örneğin, boru hattını derlerken beam_pipeline_args ) kullanabileceğiniz şekilde tanımlamak istiyorsanız ( Chicago Taksi Boru Hattı Örneği ), dekoratörde use_beam=True ayarını yapabilir ve ekleyebilirsiniz. Aşağıdaki örnekte, fonksiyonunuzda varsayılan değer None olan başka bir BeamComponentParameter vardır:
@component(use_beam=True)
def MyDataProcessor(
    examples: InputArtifact[Example],
    processed_examples: OutputArtifact[Example],
    beam_pipeline: BeamComponentParameter[beam.Pipeline] = None,
    ) -> None:
  '''My simple custom model validation component.'''
  with beam_pipeline as p:
    # data pipeline definition with beam_pipeline begins
    ...
    # data pipeline definition with beam_pipeline ends
TFX işlem hatları konusunda yeniyseniz TFX işlem hatlarına ilişkin temel kavramlar hakkında daha fazla bilgi edinin .
Girişler, çıkışlar ve parametreler
TFX'te girdiler ve çıktılar, temeldeki verilerle ilişkili meta veri özelliklerini ve konumunu tanımlayan Artifact nesneleri olarak izlenir; bu bilgiler ML Meta Verilerinde saklanır. Yapılar karmaşık veri türlerini veya int, float, bytes veya unicode dizeleri gibi basit veri türlerini tanımlayabilir.
Bir parametre, işlem hattı inşaatı sırasında bilinen bir bileşene yönelik bir argümandır (int, float, bytes veya unicode dize). Parametreler, eğitim yineleme sayısı, bırakma oranı ve bileşeninize yönelik diğer yapılandırmalar gibi bağımsız değişkenleri ve hiper parametreleri belirtmek için kullanışlıdır. Parametreler, ML Meta Verilerinde izlendiklerinde bileşen yürütmelerinin özellikleri olarak depolanır.
Tanım
 Özel bir bileşen oluşturmak için, özel mantığınızı uygulayan bir işlev yazın ve bunu tfx.dsl.component.experimental.decorators modülündeki @component dekoratörüyle süsleyin. Bileşeninizin giriş ve çıkış şemasını tanımlamak için, tfx.dsl.component.experimental.annotations modülündeki ek açıklamaları kullanarak işlevinizin bağımsız değişkenlerine ve dönüş değerine açıklama ekleyin:
Her yapay girdi için,
InputArtifact[ArtifactType]türü ipucu açıklamasını uygulayın.ArtifactType,tfx.types.Artifactöğesinin bir alt sınıfı olan yapıtın türüyle değiştirin. Bu girişler isteğe bağlı argümanlar olabilir.Her çıktı yapıtı için
OutputArtifact[ArtifactType]türü ipucu açıklamasını uygulayın.ArtifactType,tfx.types.Artifactöğesinin bir alt sınıfı olan yapıtın türüyle değiştirin. Bileşen çıktı yapıtlarının, işlevin giriş bağımsız değişkenleri olarak iletilmesi gerekir; böylece bileşeniniz, çıktıları sistem tarafından yönetilen bir konuma yazabilir ve uygun yapay yapı meta veri özelliklerini ayarlayabilir. Bu argüman isteğe bağlı olabilir veya bu argüman varsayılan bir değerle tanımlanabilir.Her parametre için, ipucu açıklaması
Parameter[T]türünü kullanın.Tparametrenin türüyle değiştirin. Şu anda yalnızca ilkel python türlerini destekliyoruz:bool,int,float,strveyabytes.Işın boru hattı için
BeamComponentParameter[beam.Pipeline]tür ipucu ek açıklamasını kullanın. Varsayılan değeriNoneolarak ayarlayın.Nonedeğeri,BaseBeamExecutor_make_beam_pipeline()tarafından oluşturulan örneklenmiş bir ışın hattıyla değiştirilecektir.İşlem hattı inşaatı sırasında bilinmeyen her basit veri türü girişi (
int,float,strveyabytes) için ipucuTtürünü kullanın. TFX 0.22 sürümünde, bu tür bir girdi için boru hattı inşaatı sırasında somut değerlerin aktarılamayacağını unutmayın (bunun yerine önceki bölümde açıklandığı gibiParameterek açıklamasını kullanın). Bu argüman isteğe bağlı olabilir veya bu argüman varsayılan bir değerle tanımlanabilir. Bileşeninizde basit veri türü çıktıları (int,float,strveyabytes) varsa, bu çıktıları, dönüş türü açıklaması olarakTypedDictkullanarak ve uygun bir dict nesnesi döndürerek döndürebilirsiniz.
 İşlevinizin gövdesinde, giriş ve çıkış yapıtları tfx.types.Artifact nesneleri olarak iletilir; sistem tarafından yönetilen konumunu almak ve herhangi bir özelliği okumak/ayarlamak için .uri dosyasını inceleyebilirsiniz. Giriş parametreleri ve basit veri türü girişleri, belirtilen türdeki nesneler olarak iletilir. Basit veri türü çıktıları, anahtarların uygun çıktı adları ve değerlerin istenen dönüş değerleri olduğu bir sözlük olarak döndürülmelidir.
Tamamlanan fonksiyon bileşeni şöyle görünebilir:
from typing import TypedDict
import tfx.v1 as tfx
from tfx.dsl.component.experimental.decorators import component
class MyOutput(TypedDict):
  loss: float
  accuracy: float
@component
def MyTrainerComponent(
    training_data: tfx.dsl.components.InputArtifact[tfx.types.standard_artifacts.Examples],
    model: tfx.dsl.components.OutputArtifact[tfx.types.standard_artifacts.Model],
    dropout_hyperparameter: float,
    num_iterations: tfx.dsl.components.Parameter[int] = 10
) -> MyOutput:
  '''My simple trainer component.'''
  records = read_examples(training_data.uri)
  model_obj = train_model(records, num_iterations, dropout_hyperparameter)
  model_obj.write_to(model.uri)
  return {
    'loss': model_obj.loss,
    'accuracy': model_obj.accuracy
  }
# Example usage in a pipeline graph definition:
# ...
trainer = MyTrainerComponent(
    examples=example_gen.outputs['examples'],
    dropout_hyperparameter=other_component.outputs['dropout'],
    num_iterations=1000)
pusher = Pusher(model=trainer.outputs['model'])
# ...
 Önceki örnek, MyTrainerComponent Python işlevi tabanlı özel bir bileşen olarak tanımlar. Bu bileşen, girdi olarak bir examples yapıt kullanır ve çıktı olarak bir model yapıt üretir. Bileşen, yapıtı sistem tarafından yönetilen konumunda okumak veya yazmak için artifact_instance.uri dosyasını kullanır. Bileşen bir num_iterations giriş parametresi ve bir dropout_hyperparameter basit veri türü değeri alır ve bileşen, loss ve accuracy ölçümlerini basit veri türü çıkış değerleri olarak çıkarır. Çıkış model yapıtı daha sonra Pusher bileşeni tarafından kullanılır.