คำจำกัดความส่วนประกอบตามฟังก์ชัน Python ช่วยให้คุณสร้างส่วนประกอบแบบกำหนดเอง TFX ได้ง่ายขึ้น โดยช่วยคุณประหยัดเวลาในการกำหนดคลาสข้อกำหนดส่วนประกอบ คลาสตัวดำเนินการ และคลาสอินเทอร์เฟซส่วนประกอบ ในรูปแบบคำจำกัดความของส่วนประกอบนี้ คุณจะเขียนฟังก์ชันที่มีคำอธิบายประกอบพร้อมคำแนะนำประเภท คำแนะนำประเภทจะอธิบายส่วนอินพุต ส่วนเอาต์พุต และพารามิเตอร์ของส่วนประกอบของคุณ
การเขียนองค์ประกอบที่คุณกำหนดเองในรูปแบบนี้ตรงไปตรงมามาก ดังตัวอย่างต่อไปนี้
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
  }
 ภายใต้ประทุน สิ่งนี้จะกำหนดองค์ประกอบแบบกำหนดเองที่เป็นคลาสย่อยของ BaseComponent รวมถึงคลาส Spec และ Executor
 หากคุณต้องการกำหนดคลาสย่อยของ BaseBeamComponent เพื่อให้คุณสามารถใช้บีมไปป์ไลน์ที่มีการกำหนดค่าที่ใช้ร่วมกันของ TFX-pipeline-wise เช่น beam_pipeline_args เมื่อรวบรวมไปป์ไลน์ ( ตัวอย่าง Chicago Taxi Pipeline ) คุณสามารถตั้ง use_beam=True ในมัณฑนากรและเพิ่ม BeamComponentParameter อื่นที่มีค่าเริ่มต้น None ในฟังก์ชันของคุณ ดังตัวอย่างต่อไปนี้:
@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 เรียนรู้เพิ่มเติมเกี่ยวกับแนวคิดหลักของไปป์ไลน์ TFX
อินพุต เอาต์พุต และพารามิเตอร์
ใน TFX อินพุตและเอาต์พุตจะถูกติดตามเป็นออบเจ็กต์ Artifact ซึ่งอธิบายตำแหน่งของและคุณสมบัติเมทาดาทาที่เกี่ยวข้องกับข้อมูลพื้นฐาน ข้อมูลนี้ถูกเก็บไว้ใน ML Metadata อาร์ติแฟกต์สามารถอธิบายประเภทข้อมูลที่ซับซ้อนหรือประเภทข้อมูลแบบง่าย เช่น int, float, bytes หรือสตริง Unicode
พารามิเตอร์คืออาร์กิวเมนต์ (int, float, bytes หรือ Unicode string) ไปยังส่วนประกอบที่รู้จัก ณ เวลาที่สร้างไปป์ไลน์ พารามิเตอร์มีประโยชน์สำหรับการระบุอาร์กิวเมนต์และไฮเปอร์พารามิเตอร์ เช่น จำนวนการวนซ้ำของการฝึก อัตราการออกกลางคัน และการกำหนดค่าอื่นๆ ให้กับส่วนประกอบของคุณ พารามิเตอร์จะถูกจัดเก็บเป็นคุณสมบัติของการดำเนินการส่วนประกอบเมื่อมีการติดตามใน ML Metadata
คำนิยาม
 หากต้องการสร้างส่วนประกอบที่กำหนดเอง ให้เขียนฟังก์ชันที่ใช้ตรรกะที่คุณกำหนดเองและตกแต่งด้วย @component มัณฑนากร จากโมดูล tfx.dsl.component.experimental.decorators หากต้องการกำหนดสคีมาอินพุตและเอาต์พุตของส่วนประกอบ ให้ใส่คำอธิบายประกอบอาร์กิวเมนต์ของฟังก์ชันและส่งคืนค่าโดยใช้คำอธิบายประกอบจากโมดูล tfx.dsl.component.experimental.annotations :
- สำหรับ อินพุตอาร์ติแฟกต์ แต่ละรายการ ให้ใช้คำอธิบายประกอบคำแนะนำประเภท - InputArtifact[ArtifactType]แทนที่- ArtifactTypeด้วยประเภทของสิ่งประดิษฐ์ ซึ่งเป็นคลาสย่อยของ- tfx.types.Artifactอินพุตเหล่านี้อาจเป็นอาร์กิวเมนต์เพิ่มเติมได้
- สำหรับ อาร์ติแฟกต์เอาต์พุต แต่ละรายการ ให้ใช้คำอธิบายประกอบคำแนะนำประเภท - OutputArtifact[ArtifactType]แทนที่- ArtifactTypeด้วยประเภทของสิ่งประดิษฐ์ ซึ่งเป็นคลาสย่อยของ- tfx.types.Artifactอาร์ติแฟกต์เอาต์พุตของคอมโพเนนต์ควรถูกส่งผ่านเป็นอาร์กิวเมนต์อินพุตของฟังก์ชัน เพื่อให้คอมโพเนนต์ของคุณสามารถเขียนเอาต์พุตไปยังตำแหน่งที่จัดการโดยระบบ และตั้งค่าคุณสมบัติเมตาดาต้าของส่วนที่เหมาะสม อาร์กิวเมนต์นี้เป็นทางเลือกหรืออาร์กิวเมนต์นี้สามารถกำหนดด้วยค่าเริ่มต้นได้
- สำหรับแต่ละ พารามิเตอร์ ให้ใช้ประเภทคำอธิบายประกอบคำอธิบาย - Parameter[T]แทนที่- Tด้วยประเภทของพารามิเตอร์ ขณะนี้เรารองรับเฉพาะประเภทหลามดั้งเดิม:- bool,- int,- float,- strหรือ- bytes
- สำหรับ บีมไปป์ไลน์ ให้ใช้คำอธิบายประกอบประเภท - BeamComponentParameter[beam.Pipeline]ตั้งค่าเริ่มต้นให้เป็น- Noneค่า- Noneจะถูกแทนที่ด้วยไปป์ไลน์ลำแสงที่สร้างโดย- _make_beam_pipeline()ของ- BaseBeamExecutor
- สำหรับ อินพุตประเภทข้อมูลอย่างง่าย แต่ละประเภท ( - int,- float,- strหรือ- bytes) ซึ่งไม่ทราบเวลาการก่อสร้างไปป์ไลน์ ให้ใช้ประเภทคำแนะนำ- Tโปรดทราบว่าในรุ่น TFX 0.22 ไม่สามารถส่งค่าที่เป็นรูปธรรม ณ เวลาก่อสร้างไปป์ไลน์สำหรับอินพุตประเภทนี้ได้ (ใช้คำอธิบายประกอบ- Parameterแทน ตามที่อธิบายไว้ในส่วนก่อนหน้า) อาร์กิวเมนต์นี้เป็นทางเลือกหรืออาร์กิวเมนต์นี้สามารถกำหนดด้วยค่าเริ่มต้นได้ หากส่วนประกอบของคุณมีเอาต์พุตประเภทข้อมูลแบบธรรมดา (- int,- float,- strหรือ- bytes) คุณสามารถส่งคืนเอาต์พุตเหล่านี้ได้โดยใช้- TypedDictเป็นคำอธิบายประกอบประเภทส่งคืน และส่งคืนอ็อบเจ็กต์ dict ที่เหมาะสม
 ในเนื้อความของฟังก์ชัน อาร์ติแฟกต์อินพุตและเอาท์พุตจะถูกส่งผ่านเป็นอ็อบเจ็กต์ tfx.types.Artifact คุณสามารถตรวจสอบ .uri เพื่อรับตำแหน่งที่ระบบจัดการและอ่าน/ตั้งค่าคุณสมบัติใดๆ พารามิเตอร์อินพุตและอินพุตประเภทข้อมูลอย่างง่ายจะถูกส่งผ่านเป็นออบเจ็กต์ประเภทที่ระบุ เอาต์พุตประเภทข้อมูลอย่างง่ายควรส่งคืนเป็นพจนานุกรม โดยที่คีย์คือชื่อเอาต์พุตที่เหมาะสม และค่าคือค่าส่งคืนที่ต้องการ
ส่วนประกอบฟังก์ชันที่สมบูรณ์สามารถมีลักษณะดังนี้:
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'])
# ...
 ตัวอย่างก่อนหน้านี้กำหนด MyTrainerComponent เป็นส่วนประกอบที่กำหนดเองตามฟังก์ชัน Python ส่วนประกอบนี้ใช้สิ่งประดิษฐ์ examples เป็นอินพุต และสร้างสิ่งประดิษฐ์ model เป็นเอาต์พุต คอมโพเนนต์ใช้ artifact_instance.uri เพื่ออ่านหรือเขียนอาร์ติแฟกต์ในตำแหน่งที่ระบบจัดการ ส่วนประกอบใช้พารามิเตอร์อินพุต num_iterations และค่าประเภทข้อมูลแบบง่าย dropout_hyperparameter และส่วนประกอบจะส่งออกค่าเมตริก loss และ accuracy เป็นค่าเอาต์พุตประเภทข้อมูลแบบง่าย จากนั้นส่วนประกอบของ Pusher จะใช้สิ่งประดิษฐ์ model เอาต์พุต