برنامه نویسی

توابع از دست دادن و تجمع پارامتر NN در میکروگراد

سلام من Shrijith Venkatrama ، بنیانگذار Hexmos هستم. در حال حاضر ، من در حال ساختن LiveApi هستم ، ابزاری که تولید اسناد API را از کد شما به طرز مسخره ای آسان می کند.

یک مجموعه داده نمونه و مقایسه با پیش بینی ها

در مجموعه داده زیر ، 4 ورودی/خروجی به عنوان مثال داریم. و هر ورودی 3 شماره دارد.

ما از شبکه عصبی (شیء MLP) تعریف شده در آخرین پست برای انجام برخی پیش بینی ها در مورد هر ورودی استفاده می کنیم.

xs = [
    [2.0, 3.0, -1.0],
    [3.0, -1.0, 0.5],
    [0.5, 1.0, 1.0],
    [1.0, 1.0, -1.0],
]

ys = [1.0, -1.0, -1.0, 1.0]  # desired targets
ypred = [n(x) for x in xs]
ypred
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

وقتی این کار را اجرا کردم ، پیش بینی هایی می گیرم که کمی کمتر از حد مورد نیاز یا بیشتر هستند:

پیش بینی کم و بیش

یک اسکلت برای ساختن یک عملکرد از دست دادن

کد:

ما یک متغیر ضرر را تعریف می کنیم و به روش زیر تعریف می کنیم:

  1. تفاوت بین خروجی واقعی در مقابل خروجی پیش بینی شده را پیدا کنید
  2. مربع تفاوت (برای حذف مبلغ منفی)
  3. جمع همه این مربع های اختلاف برای مجموعه ورودی/خروجی کامل

loss = sum((yout - ygt)**2 for ygt, yout in zip(ys, ypred))
loss.grad = 1

loss.backward()

n.layers[0].neurons[0].w[0].grad
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

نتیجه 1

پس از اینکه گره ضرر داشتیم ، می توانیم انتشار عقب را اجرا کنیم تا شیب هر گره بدست آوریم.

وقتی این کار را می کنیم draw_dot(loss) ما یک نمودار عظیم متشکل از 4 پاس رو به جلو متناسب با 4 نمونه فوق و از دست دادن در بالای آن دریافت می کنیم.

جمع آوری کلیه پارامترهای شبکه عصبی و کار بر روی آنها

توجه به parameters() روش در هر یک از کلاسهای زیر – جایی که پارامترهای مختلف را در هر سطح (نورون ، لایه ، MLP) جمع آوری می کنیم:

class Neuron:

    def __init__(self, nin):
        self.w = [Value(random.uniform(-1,1)) for _ in range(nin)]
        self.b = Value(random.uniform(-1,1))

    def __call__(self, x):
        # w * x + b
        act = sum((wi * xi for wi, xi in zip(self.w, x)), self.b)
        out = act.tanh()
        return out

    def parameters(self):
        return self.w + [self.b]


class Layer:

    def __init__(self, nin, nout):
        self.neurons = [Neuron(nin) for _ in range(nout)]

    def __call__(self, x):
        outs = [n(x) for n in self.neurons]
        return outs[0] if len(outs) == 1 else outs

    def parameters(self):
        params = []
        for neuron in self.neurons:
            params.extend(neuron.parameters())
        return params

class MLP:

    def __init__(self, nin, nouts):
        sz = [nin] + nouts
        self.layers = [Layer(sz[i], sz[i+1]) for i in range(len(nouts))]

    def __call__(self, x):
        for layer in self.layers:
            x = layer(x)
        return x

    def parameters(self):
        params = []
        for layer in self.layers:
            params.extend(layer.parameters())
        return params
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

حالا وقتی این کار را می کنم n.parameters() من تمام پارامترها را در شبکه عصبی دریافت می کنم:

params1

مرجع

مقدمه املایی به شبکه های عصبی و backpropagation: ساختمان میکروگراد – YouTube

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا