شبکه عصبی پرسپترون

شبکه عصبی پرسپترون

Multilayer-Perceptron-Tutorial
شبکه عصبی هوش مصنوعي

شبکه عصبی پرسپترون

رابطه ریاضی:
فرمول به‌روزرسانی وزن‌ها:
import matplotlib.pyplot as plt
import numpy as np

# ۱. چهار نقطه گیت AND
X = np.array([[0, 0], [0, 1], [1, 0], [1, 1]])
y = np.array([0, 0, 0, 1])

در این مرحله الگوریتم یادگیری پرسپترون را به‌صورت پایه‌ای پیاده کرده و وزن‌ها و بایاس را با قاعده به‌روزرسانی پرسپترون آموزش می‌دهیم. سپس با قرار دادن وزن‌های به‌دست‌آمده در معادله خط w1x1+w2x2+b=0w_1 x_1 + w_2 x_2 + b = 0، مرز تصمیم‌گیری را مستقیماً روی نمودار رسم می‌کنیم.

import matplotlib.pyplot as plt
import numpy as np

def train_perceptron(X, y, lr=0.1, epochs=10):
    # Initialize weights and bias to zeros
    weights = np.zeros(X.shape[1])
    bias = 0
    
    # Start training loop
    for _ in range(epochs):
        for p, target in zip(X, y):
            # Calculate prediction: 1 if (w*p + b) >= 0, else 0
            linear_output = np.dot(weights, p) + bias
            prediction = 1 if linear_output >= 0 else 0
            
            # Calculate error
            error = target - prediction
            
            # Update weights and bias
            weights = weights + lr * error * p
            bias  = bias + lr * error
            
    return weights, bias

# فراخوانی تابع و آموزش مدل
weights, bias = train_perceptron(X, y, lr=0.1, epochs=10)
print(f"Trained Weights: {weights}, Bias: {bias}")

# رسم نقاط داده‌ها
plt.scatter(X[y == 0, 0], X[y == 0, 1], color='blue', s=100, label='Class 0 (False)')
plt.scatter(X[y == 1, 0], X[y == 1, 1], color='red', s=100, label='Class 1 (True)')

# محاسبه و رسم خط مرز تصمیم
x1_vals = np.linspace(-0.2, 1.2, 100)
x2_vals = -(weights[0] * x1_vals + bias) / weights[1]

plt.plot(x1_vals, x2_vals, color='green', linestyle='--', label='Decision Boundary')

# تنظیمات نمودار
plt.xlim(-0.2, 1.2)
plt.ylim(-0.2, 1.2)
plt.xlabel('X1')
plt.ylabel('X2')
plt.title('Perceptron Decision Boundary for AND Gate')
plt.legend()
plt.grid(True)
plt.show()

در این بخش همان مسئله را با کلاس آماده Perceptron از کتابخانه Scikit-Learn پیاده کرده و پارامترها را بعد از یادگیری استخراج می‌کنیم. در نهایت خروجی ویژگی‌های coef_ و intercept_ همان وزن‌ها و بایاس شبکه هستند و خط تصمیم حاصل، داده‌ها را جدا می‌سازد.

from sklearn.linear_model import Perceptron

# داده‌ها
X = [[0, 0], [0, 1], [1, 0], [1, 1]]
y = [0, 0, 0, 1]

# تعریف و آموزش مدل
clf = Perceptron(tol=1e-3, random_state=42)
clf.fit(X, y)

# آزمایش پیش‌بینی
print("پیش‌بینی برای ورودی [1, 1]:", clf.predict([[1, 1]]))  # خروجی: [1]
print("پیش‌بینی برای ورودی [1, 0]:", clf.predict([[1, 0]]))  # خروجی: [0]
شبکه پرسپترون در متلب
% 1. Define AND gate input patterns (each column is one sample)
P = [0 0 1 1; 
     0 1 0 1]; % P1=[0;0], P2=[0;1], P3=[1;0], P4=[1;1]

% 2. Define target outputs for AND gate
T = [0 0 0 1];

% 3. Create a Perceptron network
net = perceptron;

% 4. Train the network
net = train(net, P, T);

% 5. Test the trained network with inputs
Y = net(P);
disp('Predicted outputs:');
disp(Y);

% 6. View learned weights and bias
disp('Trained Weights (w1, w2):');
disp(net.IW{1,1});
disp('Trained Bias:');
disp(net.b{1});

% 7. Plot the decision boundary using MATLAB built-in visualization
plotpv(P, T);       % Plot input vectors
plotpc(net.IW{1,1}, net.b{1}); % Plot classification line (decision boundary)

MLP
MLP
«گرادیان کاهشی» (Gradient Descent) یک الگوریتم بهینه‌سازی برای پیدا کردن کمینه یک تابع است. در این الگوریتم کار با یک نقطه تصادفی روی تابع آغاز می‌شود و روی جهت منفی از گرادیان تابع حرکت می‌کند تا به کمینه محلی/سراسری برسد.

دیدگاه (4)

  1. محمد

    بکارم اومد، ممنون

  2. شیرازی

    اینستاگرام لب متلب هم متعلق به شماست؟

    1. زهرا سهامی

      بله یکی هستن

  3. […] ما حداقل به یک لایه پنهان نیاز داریم تا تفکيک غیر خطی داشته باشيم. RBNN کاری که انجام می دهد این است که سیگنال ورودی را به شکل دیگری تبديل مي کند که پس از اعمال آن به شکبه تفکيک خطی را ممکن مي کند. RBNN از نظر ساختاری مشابه پرسپترون (MLP) است. […]

فکر خود را اینجا بگذارید

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