در یادگیری ماشین، یک مدل یک تابع با یادگرفتنی است پارامترهای که به یک خروجی نقشه ورودی. پارامترهای بهینه با آموزش مدل بر روی داده ها به دست می آیند. یک مدل به خوبی آموزش دیده یک نقشه برداری دقیق از ورودی به خروجی مورد نظر ارائه می دهد.
در TensorFlow.js دو راه برای ایجاد یک مدل یادگیری ماشین وجود دارد:
- با استفاده از API لایه که در آن شما یک مدل با استفاده از لایه ساخت.
- با استفاده از API هسته ای با عملیات در سطح پایین تر مانند
tf.matMul()
،tf.add()
، و غیره
ابتدا لایه های API را بررسی می کنیم که یک API سطح بالاتر برای ساخت مدل ها است. سپس، نحوه ساخت همان مدل را با استفاده از Core API نشان خواهیم داد.
ایجاد مدل ها با لایه های API
دو راه برای ایجاد یک مدل با استفاده از API لایه وجود دارد: مدل پی در پی، و یک مدل کاربردی. دو بخش بعدی هر نوع را با دقت بیشتری بررسی می کند.
مدل متوالی
بیشترین نوع رایج از مدل است Sequential
مدل است که یک پشته خطی از لایه ها. شما می توانید یک Sequential
مدل با عبور یک لیست از لایه ها را به sequential()
تابع:
const model = tf.sequential({
layers: [
tf.layers.dense({inputShape: [784], units: 32, activation: 'relu'}),
tf.layers.dense({units: 10, activation: 'softmax'}),
]
});
و یا از طریق add()
روش:
const model = tf.sequential();
model.add(tf.layers.dense({inputShape: [784], units: 32, activation: 'relu'}));
model.add(tf.layers.dense({units: 10, activation: 'softmax'}));
مهم: اولین لایه در مدل نیاز به یک
inputShape
. اطمینان حاصل کنید که شما را محروم اندازه دسته که ارائهinputShape
. برای مثال، اگر شما قصد دارید به تغذیه تانسورها مدل از شکل[B, 784]
، که در آنB
می تواند هر اندازه دسته ای، مشخصinputShape
به عنوان[784]
در هنگام ایجاد مدل.
شما می توانید لایه های مدل طریق دسترسی model.layers
، و به طور خاص تر model.inputLayers
و model.outputLayers
.
مدل عملکردی
راه دیگر برای ایجاد یک LayersModel
است از طریق tf.model()
تابع. تفاوت کلیدی بین tf.model()
و tf.sequential()
است که tf.model()
اجازه می دهد تا به شما برای ایجاد نمودار دلخواه از لایه ها، به عنوان زمانی که آنها را چرخه ندارد.
در اینجا یک قطعه کد که همان مدل همانطور که در بالا با استفاده از تعریف است tf.model()
API:
// Create an arbitrary graph of layers, by connecting them
// via the apply() method.
const input = tf.input({shape: [784]});
const dense1 = tf.layers.dense({units: 32, activation: 'relu'}).apply(input);
const dense2 = tf.layers.dense({units: 10, activation: 'softmax'}).apply(dense1);
const model = tf.model({inputs: input, outputs: dense2});
ما پاسخ apply()
در هر لایه به منظور اتصال آن به خروجی لایه های دیگری. نتیجه apply()
در این مورد یک است SymbolicTensor
، که مانند یک عمل Tensor
اما بدون هیچ ارزش بتن می باشد.
توجه داشته باشید که بر خلاف مدل های پی در پی، ایجاد ما SymbolicTensor
طریق tf.input()
به جای ارائه یک inputShape
به اولین لایه.
apply()
می توانند به شما بتن را Tensor
، اگر شما از عبور از یک بتن Tensor
به آن:
const t = tf.tensor([-2, 1, 0, 5]);
const o = tf.layers.activation({activation: 'relu'}).apply(t);
o.print(); // [0, 1, 0, 5]
این می تواند هنگام آزمایش لایه ها به صورت مجزا و دیدن خروجی آنها مفید باشد.
فقط در یک مدل توالی، شما می توانید لایه های مدل طریق دسترسی model.layers
، و به طور خاص تر model.inputLayers
و model.outputLayers
.
اعتبار سنجی
هر دو مدل توالی و مدل کاربردی نمونه هایی از هستند LayersModel
کلاس. یکی از مزایای عمده ای از کار با یک LayersModel
اعتبار سنجی است: آن شما را مجبور به مشخص شکل ورودی و بعد از آن استفاده خواهد کرد برای تایید اعتبار ورودی خود را. LayersModel
همچنین این استنتاج شکل خودکار به عنوان جریان داده از طریق لایه. دانستن شکل از قبل به مدل اجازه می دهد تا به طور خودکار پارامترهای خود را ایجاد کند و می تواند به شما بگوید که آیا دو لایه متوالی با یکدیگر سازگار نیستند.
خلاصه مدل
پاسخ model.summary()
به چاپ خلاصه ای از این مدل، که شامل:
- نام و نوع تمام لایه های مدل.
- شکل خروجی برای هر لایه
- تعداد پارامترهای وزن هر لایه.
- اگر مدل دارای توپولوژی کلی باشد (در زیر به آن پرداخته می شود)، ورودی هایی که هر لایه دریافت می کند
- تعداد کل پارامترهای آموزش پذیر و غیر قابل آموزش مدل.
برای مدلی که در بالا تعریف کردیم، خروجی زیر را روی کنسول دریافت می کنیم:
لایه (نوع) | شکل خروجی | پارامتر # |
dense_Dense1 (متراکم) | [null,32] | 25120 |
dense_Dense2 (متراکم) | [null,10] | 330 |
مجموع پارامترها: 25450 پارامترهای قابل آموزش: 25450 پارامترهای غیر قابل آموزش: 0 |
توجه داشته باشید که null
ارزش ها در اشکال خروجی از لایه: یک یادآوری است که مدل انتظار دارد که ورودی به یک اندازه دسته به عنوان بعد خارجی ترین، که در این مورد می تواند انعطاف پذیر با توجه به null
ارزش.
سریال سازی
یکی از مزایای عمده استفاده از یک LayersModel
بیش از API های سطح پایین تر توانایی برای ذخیره و بارگذاری یک مدل است. LayersModel
می داند در مورد:
- معماری مدل، به شما امکان می دهد مدل را دوباره ایجاد کنید.
- وزن های مدل
- پیکربندی آموزش (از دست دادن، بهینه ساز، معیارها).
- وضعیت بهینه ساز، به شما امکان می دهد آموزش را از سر بگیرید.
برای ذخیره یا بارگذاری یک مدل فقط 1 خط کد وجود دارد:
const saveResult = await model.save('localstorage://my-model-1');
const model = await tf.loadLayersModel('localstorage://my-model-1');
مثال بالا مدل را در حافظه محلی در مرورگر ذخیره می کند. را ببینید model.save() documentation
و صرفه جویی و بار راهنمایی در مورد چگونگی صرفه جویی به رسانه های مختلف (به عنوان مثال ذخیره سازی فایل، IndexedDB
، باعث دانلود مرورگر، و غیره)
لایه های سفارشی
لایه ها بلوک های سازنده یک مدل هستند. اگر مدل شما در حال انجام یک محاسبات سفارشی است، می توانید یک لایه سفارشی تعریف کنید که به خوبی با بقیه لایه ها تعامل دارد. در زیر یک لایه سفارشی تعریف می کنیم که مجموع مربع ها را محاسبه می کند:
class SquaredSumLayer extends tf.layers.Layer {
constructor() {
super({});
}
// In this case, the output is a scalar.
computeOutputShape(inputShape) { return []; }
// call() is where we do the computation.
call(input, kwargs) { return input.square().sum();}
// Every layer needs a unique name.
getClassName() { return 'SquaredSum'; }
}
برای آزمایش آن، ما می توانیم پاسخ apply()
روش با یک تانسور بتن:
const t = tf.tensor([-2, 1, 0, 5]);
const o = new SquaredSumLayer().apply(t);
o.print(); // prints 30
مهم: اگر یک لایه سفارشی اضافه کنید، توانایی سریال سازی یک مدل را از دست خواهید داد.
ایجاد مدل با Core API
در ابتدای این راهنما، اشاره کردیم که دو راه برای ایجاد یک مدل یادگیری ماشین در TensorFlow.js وجود دارد.
قانون کلی این است که همیشه سعی کنید به استفاده از API لایه اول، از آن است که پس از API Keras خوبی به تصویب رسید که به شرح زیر مدل بهترین شیوه ها و کاهش بار شناختی . Layers API همچنین راهحلهای مختلفی مانند مقدار دهی اولیه وزن، سریالسازی مدل، آموزش نظارت، قابلیت حمل و بررسی ایمنی را ارائه میدهد.
ممکن است بخواهید از Core API هر زمان که:
- شما به حداکثر انعطاف یا کنترل نیاز دارید.
- شما نیازی به سریال سازی ندارید یا می توانید منطق سریال سازی خود را پیاده سازی کنید.
مدل در پایه API فقط توابع است که یک یا چند هستند Tensors
و بازگشت یک Tensor
. همان مدلی که در بالا با استفاده از Core API نوشته شده است به صورت زیر است:
// The weights and biases for the two dense layers.
const w1 = tf.variable(tf.randomNormal([784, 32]));
const b1 = tf.variable(tf.randomNormal([32]));
const w2 = tf.variable(tf.randomNormal([32, 10]));
const b2 = tf.variable(tf.randomNormal([10]));
function model(x) {
return x.matMul(w1).add(b1).relu().matMul(w2).add(b2).softmax();
}
توجه داشته باشید که در Core API ما مسئول ایجاد و مقداردهی اولیه وزن های مدل هستیم. هر وزن است که توسط یک حمایت Variable
که سیگنال به TensorFlow.js که این تانسورها یادگرفتنی هستند. شما می توانید یک Variable
با استفاده از tf.variable () و عبور در یک موجود Tensor
.
در این راهنما شما با روش های مختلف ایجاد یک مدل با استفاده از لایه ها و Core API آشنا شده اید. در مرحله بعد، دیدن مدل های آموزش راهنمایی در مورد چگونگی آموزش یک مدل.