استفاده از چند مدل تنسورفلویی در یک session [poll] - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

استفاده از چند مدل تنسورفلویی در یک session [poll]

0 امتیاز

سلام

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

میخواستم ببینم راه حل بهینه برای اینکار چی هست یعنی مدل ها یکبار در رم  لود بشند و هرموقع لازم شد از اونا استفاده بشه یعنی هرسری به ازای هر فریم یک بار مدل ها ساخته نشوند و زمان بر بشه.

ببینید این راه حل شدنیه و بهینه هست ؟ عکسشو لود کردم.

چون به ازای هر فریم دوتا session اجرا میشود فکر میکنم شاید اینکار بهینه نباشد یعنی مدام رم سیستم را پر و خالی کند و شاید اینکار زمان بر باشد درسته ؟

مثلا در صورت داشتن فقط یک مدل براحتی میشه ابتدا یک Session باز کرد و سپس داخل این Session میتوان فریم ها را capture کرد و sess.run زد .

برای اینکار بنظرتون پیشنهاد بهینه چیه؟ 

 

### no choices found for poll!
سوال شده خرداد 22, 1398  بوسیله ی minimax (امتیاز 78)   5 20 27
ویرایش شده خرداد 22, 1398 بوسیله ی minimax

2 پاسخ

+1 امتیاز
 
بهترین پاسخ
به نظر بنده شما دو تا session بسازید و هر کدام از گراف ها را به آن session معرفی کنید و سپس بقیه مراحل و گرنه باید یک گراف دیگر بسازید و این دو گراف را در آن merge کنید که بتونید با یک session عملیات مدنظر را انجام بدید
پاسخ داده شده خرداد 23, 1398 بوسیله ی مصطفی ساتکی (امتیاز 21,998)   24 34 75
انتخاب شد خرداد 25, 1398 بوسیله ی minimax
نظر شما هم همان کدی که در عکس بالا نوشتم هست ؟
1- اینکه چجوری میشه دو تا گراف را در یک گرافی جدید merge کرد و سپس در یک session استفاده کرد اگر نمونه مثال بیارید ممنون میشم.
۲- اینکه ابتدا مدل ها را لود کنیم و سپس در یک session از دوتا مدل استفاده کنیم چرا زیاد موافق نیستید؟ بخاطر conflict لایه های هم نام از مدل ها ؟

نظرم این بود به صورت مجزا باشه مثل این پاسخ

و یا اینکه به صورت سریال اجرا کنید یعنی خروجی مدل اول را بدید به مدل دوم مثل این پاسخ.

+1 امتیاز
شما یک session هم کارتون رو راه میندازه هر کدام از مدل هاتون رو لود کنید و بعدش چون مدل دومی به اولی وابسته به صورت متوالی با متد run مربوط به session دو بار راخوانی کنید .

پر و خالی کردن نداره شما مدل در حافظه ایجاد می کنید و بعدش وزن ها را لود می کنید تا پایان کار این میزان از رم بلوکه هستش و با هر بار inference یک مقدار هم بالاتر میره به خاطر محسابات مربوط به هر یک از نودها.

 

تذکر:در ضمن شما که اینقدر پیام تو تلگرام میدید سوالتون رو جواب بدن خودتون هم کسی سوالی داشته باشه براش وقت میذارید کلی سوال تو این سایت بی پاسخ وجود داره .
پاسخ داده شده خرداد 23, 1398 بوسیله ی Alias (امتیاز 302)   3 23 31
ویرایش شده خرداد 23, 1398 بوسیله ی Alias
یعنی به این صورت ؟
create model 1
create model 2
video capture
with tf.Session() as sess:
capture frame
out1 = sess.run(feed frame to input node of model 1
out 2 = sess.run(feed image to input node of model 2 accordingly output model 1

سوال ۱- اگر جواب اکی هست آیا قبل از ایجاد سشین نباید مدلی به عنوان دیفالت تعریف شده باشد؟ در این حالت کدام مدل به عنوان دیفالت برای سشین تعریف میشود؟
سوال ۲ - اگر دو تا مدل طوری باشند که اسم بعضی از لایه ها در دو مدل یکسان باشد آیا با این روش به conflict نمیخوریم ؟ اگر بله - جواب بهینه برای اینکار چی هست؟
1- دفالت زمانی هستش که شما مدل را پاس ندید session هم از مدل پیش فرض استفاده می کنه در مسئله فعلی شما مدل رو پاس می دید در ضمن هم می تونید مدل پیش فرض رو تغییر بدید.
2- مشکلی پیش نمیاد چون نام مدل رو شما مشخص نکنید یونیک در نظر میگیره بجز اینکه شما خودتون تغییر بدید و نام مدل تکراری باشه که exception دریافت می کنید.
عذر میخام الان اون کدی که در پاسخ نوشتم اکی هست ؟
سوال ۱ -  اینکه من پاس دادن مدل به سشین را متوجه نشدم کجا من مدل را به سشین پاس میدم؟ مگر پاس دادن مدل به سشین به صورت حالت ۱ نیست ؟
حالت ۱ :
create model
with model.as_default:
with tf.sesstion(graph=model) as sess:

حالت ۲ :
create model
with tf.sesstion() as sess:

فرق دو حالت بالا چیه؟ گراف اجرایی برای سشین هر کدام حالات بالایی چیه؟

سوال ۲ - انتخاب نام برای مدل چجوری هست؟
    with tf.gfile.GFile(frozen_graph_filename, "rb") as f:
        graph_def = tf.GraphDef()
        graph_def.ParseFromString(f.read())
   tf.import_graph_def(
            graph_def,
            name="prefix",
        )
همان چیزی که در name مشخص میکنیم میشه نام مدل ؟ اگر بصورت " " بزاریم چی میشه؟

سوال ۳ : اگر من بصورت زیر تعریف کنم مدل پیش فرض برای سشین کدام مدل خواهد بود ؟
create model ۱
create model ۲
video capture
with tf.Session() as sess:
capture frame
out1 = sess.run(feed frame to input node of model 1
out 2 = sess.run(feed image to input node of model 2 accordingly output model 1
...