کتابخانه‌ی استاندارد · یادگیری ماشین

اونیکس onnx

خواندن و اجرای مدل‌های ONNX بی وابستگی بیرونی.

واردسازی اونیکس
در این صفحه
  1. گونه‌ها
  2. روال‌ها

ONNX قالب مشترکی برای مدل‌های یادگیری ماشین است: مدلی را که در PyTorch یا TensorFlow آموزش داده‌اید، به .onnx صادر کنید و با بارگذاری اونیکس در سلام بخوانید. اجرا گراف را روی تانسورهای ورودی اجرا می‌کند.

نمونه‌ی زیر برای این‌که بی پرونده‌ی بیرونی کار کند، یک مدل کوچک را با پروتوباف می‌سازد؛ در عمل فقط بارگذاری اونیکس و اجرا لازم است.

گونه‌ها

ویژگی Attr

ساختار ویژگی
یک ویژگی گره، مثل alpha.
نامانگلیسیگونهتوضیح
namenameرشته = ""نام.
kindkindصحیح = 0گونه‌ی مقدار در قالب ONNX: ۱ اعشاری، ۲ صحیح، ۳ رشته، ۴ تانسور، ۶ و ۷ فهرست.
ffاعشار۶۴ = 0مقدار اعشاری.
iiصحیح۶۴ = 0مقدار صحیح.
ssرشته = ""مقدار رشته.
tttensor.Tensorمقدار تانسور.
floatsfloatsوکتور<اعشار۶۴>فهرست اعشاری.
intsintsوکتور<صحیح۶۴>فهرست صحیح.
onnx-Run.salam
واردسازی اونیکس
واردسازی تانسور
واردسازی فشرده سازی
واردسازی کدگذاری.پروتوباف
واردسازی بایگانی
واردسازی سیستم عامل

روال زیرپیام(ب &: فشرده سازی.بافر بایت، شماره: صحیح، پیام: فشرده سازی.بافر بایت):
    پروتوباف.نوشتن برچسب(ب، شماره، پروتوباف.نوع سیم طول‌دار)
    پروتوباف.نوشتن بایت‌های طول‌دار(ب، پیام.data، فشرده سازی.طول بافر(پیام))
پایان

روال متن(ب &: فشرده سازی.بافر بایت، شماره: صحیح، مقدار: رشته):
    پروتوباف.نوشتن برچسب(ب، شماره، پروتوباف.نوع سیم طول‌دار)
    پروتوباف.نوشتن رشته طول‌دار(ب، مقدار)
پایان

روال عدد(ب &: فشرده سازی.بافر بایت، شماره: صحیح، مقدار: صحیح۶۴):
    پروتوباف.نوشتن برچسب(ب، شماره، پروتوباف.نوع سیم متغیر)
    پروتوباف.نوشتن عدد متغیر(ب، مقدار برگردان طبیعی۶۴)
پایان

روال گره(ب &: فشرده سازی.بافر بایت، عملگر: رشته، ورودی۱: رشته، ورودی۲: رشته، خروجی: رشته):
    متن(ب، ۱، ورودی۱)
    اگر ورودی۲ != "":
        متن(ب، ۱، ورودی۲)
    پایان
    متن(ب، ۲، خروجی)
    متن(ب، ۴، عملگر)
پایان

روال مدل(م &: فشرده سازی.بافر بایت):
    ناپایا گراف := فشرده سازی.بافر بایت جدید()
    ناپایا ضرب := فشرده سازی.بافر بایت جدید()
    گره(ضرب، "Mul"، "x"، "w"، "h")
    زیرپیام(گراف، ۱، ضرب)
    ناپایا رلو := فشرده سازی.بافر بایت جدید()
    گره(رلو، "LeakyRelu"، "h"، ""، "y")
    ناپایا آلفا := فشرده سازی.بافر بایت جدید()
    متن(آلفا، ۱، "alpha")
    عدد(آلفا، ۲۰، ۱)
    پروتوباف.نوشتن برچسب(آلفا، ۲، پروتوباف.نوع سیم ثابت۳۲)
    پروتوباف.نوشتن اعشار۳۲(آلفا، ۰.۱)
    زیرپیام(رلو، ۵، آلفا)
    زیرپیام(گراف، ۱، رلو)
    ناپایا وزن := فشرده سازی.بافر بایت جدید()
    عدد(وزن، ۱، ۳)
    عدد(وزن، ۲، ۱)
    ناپایا داده := فشرده سازی.بافر بایت جدید()
    هر ضریب در [۲.۰، ۲.۰، ۲.۰]:
        پروتوباف.نوشتن اعشار۳۲(داده، ضریب)
    پایان
    زیرپیام(وزن، ۴، داده)
    متن(وزن، ۸، "w")
    زیرپیام(گراف، ۵، وزن)
    ناپایا ورودی ایکس := فشرده سازی.بافر بایت جدید()
    متن(ورودی ایکس، ۱، "x")
    زیرپیام(گراف، ۱۱، ورودی ایکس)
    ناپایا خروجی وای := فشرده سازی.بافر بایت جدید()
    متن(خروجی وای، ۱، "y")
    زیرپیام(گراف، ۱۲، خروجی وای)
    عدد(م، ۱، ۸)
    زیرپیام(م، ۷، گراف)
پایان

روال ریشه:
    ناپایا بافر := فشرده سازی.بافر بایت جدید()
    مدل(بافر)
    ناپایا سالم := نادرست
    ناپایا م := اونیکس.تجزیه اونیکس(بافر.data، فشرده سازی.طول بافر(بافر)، سالم)
    سرچاپ سالم، م.ok، م.ir_version، م.nodes.طول()، م.inits.طول()، م.init_names.دریافت(۰)
    ناپایا رلو := م.nodes.دریافت(۱)
    سرچاپ رلو.op، رلو.inputs.دریافت(۰)، رلو.outputs.دریافت(۰)، رلو.نمایه ویژگی("alpha")
    سرچاپ (رلو.ویژگی اعشاری("alpha"، ۰.۰) * ۱۰۰.۰ + ۰.۵) برگردان صحیح، رلو.ویژگی صحیح("axis"، -۱)
    ویژگی := رلو.attrs.دریافت(۰)
    سرچاپ ویژگی.name، ویژگی.kind
    سرچاپ م.نام ورودی‌ها().طول()، م.inputs.دریافت(۰)، م.outputs.دریافت(۰)

    ناپایا شکل := تانسور.شکل دو(۱، ۳)
    ناپایا ایکس := تانسور.پرشده(شکل، -۱.۵)
    ایکس.تنظیم در(۲، ۴.۰)
    ناپایا ورودی‌ها := وکتور {} برگردان وکتور<تانسور.تانسور>
    ورودی‌ها.بیفزا(ایکس)
    ناپایا خروجی‌ها := اونیکس.اجرا(م، ورودی‌ها، سالم)
    ناپایا وای := خروجی‌ها.دریافت(۰)
    سرچاپ سالم، (وای.عنصر(۰) * ۱۰۰.۰ - ۰.۵) برگردان صحیح، وای.عنصر(۲)

    مسیر := سیستم عامل.پوشه موقت() + "/salam_tiny.onnx"
    _ := بایگانی.نوشتن پرونده دودویی از بافر(مسیر، بافر)
    ناپایا م۲ := اونیکس.بارگذاری اونیکس(مسیر، سالم)
    سرچاپ سالم، م۲.nodes.طول()
    م۲.آزادسازی()
    م.آزادسازی()
    فشرده سازی.آزادسازی بافر(بافر)
پایان
خروجیtrue true 8 2 1 w LeakyRelu h y 0 10 -1 alpha 1 1 x y true -30 8 true 2

آزادسازی free

روال آزادسازی()
ویژگی را آزاد می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: onnx-Run.salam

گره Node

ساختار گره
یک گره گراف: یک عملگر با ورودی‌ها و خروجی‌های نام‌دار.
نامانگلیسیگونهتوضیح
opopرشته = ""نام عملگر، مثل Gemm یا Relu.
namenameرشته = ""نام گره.
inputsinputsوکتور<رشته>نام ورودی‌ها.
outputsoutputsوکتور<رشته>نام خروجی‌ها.
attrsattrsوکتور<ویژگی>ویژگی‌ها.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: onnx-Run.salam

نمایه ویژگی attr_index

روال نمایه ویژگی(name: رشته): صحیح
شماره‌ی ویژگی با نام؛ اگر نباشد، ۱-.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: onnx-Run.salam

ویژگی صحیح attr_int

روال ویژگی صحیح(name: رشته، dflt: صحیح۶۴): صحیح۶۴
ویژگی صحیح، یا مقدار پیش‌فرض.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: onnx-Run.salam

ویژگی اعشاری attr_float

روال ویژگی اعشاری(name: رشته، dflt: اعشار۶۴): اعشار۶۴
ویژگی اعشاری، یا مقدار پیش‌فرض.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: onnx-Run.salam

آزادسازی free

روال آزادسازی()
گره را آزاد می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: onnx-Run.salam

مدل Model

ساختار مدل
مدل ONNX خوانده‌شده.
نامانگلیسیگونهتوضیح
inputsinputsوکتور<رشته>نام ورودی‌های گراف.
outputsoutputsوکتور<رشته>نام خروجی‌ها.
nodesnodesوکتور<گره>گره‌ها به ترتیب اجرا.
init_namesinit_namesوکتور<رشته>نام وزن‌های ثابت.
initsinitsوکتوروزن‌های ثابت.
ir_versionir_versionصحیح۶۴ = 0نسخه‌ی IR در پرونده.
errorerrorرشته = ""پیام خطا.
okokمنطقی = نادرستدرست خوانده شد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: onnx-Run.salam

نام ورودی‌ها feed_names

روال نام ورودی‌ها(): وکتور<رشته>
ورودی‌هایی که باید داده شوند، یعنی ورودی‌هایی که وزن ثابت نیستند؛ به همین ترتیب به اجرا بدهید.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: onnx-Run.salam

آزادسازی free

روال آزادسازی()
مدل را آزاد می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: onnx-Run.salam

روال‌ها

تجزیه اونیکس ParseOnnx

روال تجزیه اونیکس(p: تهی*، n: صحیح، ok &: منطقی): مدل
مدل را از بایت‌های حافظه می‌خواند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: onnx-Run.salam

بارگذاری اونیکس LoadOnnx

روال بارگذاری اونیکس(path: رشته، ok &: منطقی): مدل
مدل را از پرونده‌ی .onnx می‌خواند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: onnx-Run.salam

اجرا Run

روال اجرا(model &: مدل، inputs &: وکتور<tensor.Tensor>، ok &: منطقی): وکتور<tensor.Tensor>
مدل را روی ورودی‌ها اجرا می‌کند و خروجی‌ها را به ترتیب خروجی‌های گراف برمی‌گرداند؛ عملگرهای رایج مثل Gemm، MatMul، Add، Mul، Relu، LeakyRelu، Softmax و Transpose پشتیبانی می‌شوند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: onnx-Run.salam