اونیکس onnx
خواندن و اجرای مدلهای ONNX بی وابستگی بیرونی.
واردسازی اونیکس
ONNX قالب مشترکی برای مدلهای یادگیری ماشین است: مدلی را که در PyTorch یا TensorFlow آموزش دادهاید، به .onnx صادر کنید و با بارگذاری اونیکس در سلام بخوانید. اجرا گراف را روی تانسورهای ورودی اجرا میکند.
نمونهی زیر برای اینکه بی پروندهی بیرونی کار کند، یک مدل کوچک را با پروتوباف میسازد؛ در عمل فقط بارگذاری اونیکس و اجرا لازم است.
گونهها
ویژگی Attr
ساختار ویژگی| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| name | name | رشته = "" | نام. |
| kind | kind | صحیح = 0 | گونهی مقدار در قالب ONNX: ۱ اعشاری، ۲ صحیح، ۳ رشته، ۴ تانسور، ۶ و ۷ فهرست. |
| f | f | اعشار۶۴ = 0 | مقدار اعشاری. |
| i | i | صحیح۶۴ = 0 | مقدار صحیح. |
| s | s | رشته = "" | مقدار رشته. |
| t | t | tensor.Tensor | مقدار تانسور. |
| floats | floats | وکتور<اعشار۶۴> | فهرست اعشاری. |
| ints | ints | وکتور<صحیح۶۴> | فهرست صحیح. |
واردسازی اونیکس
واردسازی تانسور
واردسازی فشرده سازی
واردسازی کدگذاری.پروتوباف
واردسازی بایگانی
واردسازی سیستم عامل
روال زیرپیام(ب &: فشرده سازی.بافر بایت، شماره: صحیح، پیام: فشرده سازی.بافر بایت):
پروتوباف.نوشتن برچسب(ب، شماره، پروتوباف.نوع سیم طولدار)
پروتوباف.نوشتن بایتهای طولدار(ب، پیام.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.طول()
م۲.آزادسازی()
م.آزادسازی()
فشرده سازی.آزادسازی بافر(بافر)
پایانآزادسازی free
روال آزادسازی()نمونهی این مورد همراه با موارد بالاتر آمده است: onnx-Run.salam
گره Node
ساختار گره| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| op | op | رشته = "" | نام عملگر، مثل Gemm یا Relu. |
| name | name | رشته = "" | نام گره. |
| inputs | inputs | وکتور<رشته> | نام ورودیها. |
| outputs | outputs | وکتور<رشته> | نام خروجیها. |
| attrs | attrs | وکتور<ویژگی> | ویژگیها. |
نمونهی این مورد همراه با موارد بالاتر آمده است: 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
ساختار مدل| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| inputs | inputs | وکتور<رشته> | نام ورودیهای گراف. |
| outputs | outputs | وکتور<رشته> | نام خروجیها. |
| nodes | nodes | وکتور<گره> | گرهها به ترتیب اجرا. |
| init_names | init_names | وکتور<رشته> | نام وزنهای ثابت. |
| inits | inits | وکتور | وزنهای ثابت. |
| ir_version | ir_version | صحیح۶۴ = 0 | نسخهی IR در پرونده. |
| error | error | رشته = "" | پیام خطا. |
| ok | ok | منطقی = نادرست | درست خوانده شد. |
نمونهی این مورد همراه با موارد بالاتر آمده است: 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>نمونهی این مورد همراه با موارد بالاتر آمده است: onnx-Run.salam