Untitled

mail@pastecode.io avatar
unknown
plain_text
a year ago
2.9 kB
11
Indexable
Never
def relu(x):
    return # ВАШ КОД ЗДЕСЬ (подсказка, воспользуйтесь np.maximum())
def relu_derivative(x):
    return x>0
class Perceptron_ReLU:
    def __init__(self, w=None, b=0):

        self.w = w
        self.b = b
        
    def activate(self, x):
        return relu(x)
        
    def forward(self, X):

        n = X.shape[0]
        y_pred = # ВАШ КОД ЗДЕСЬ (можно вставить из семинара)
        y_pred = # ВАШ КОД ЗДЕСЬ (можно вставить из семинара)
        return y_pred.reshape(-1,1)
    
    def backward(self, X, y, y_pred, learning_rate=0.005):

        n = len(y)
        y = np.array(y).reshape(-1, 1)

        dw = # ВАШ КОД ЗДЕСЬ (по аналогии с сигмоидой, только производная уже для relu)
        db = # ВАШ КОД ЗДЕСЬ (по аналогии с сигмоидой, только производная уже для relu)

        self.w -= learning_rate*dw
        self.b -= learning_rate*db
    
    def fit(self, X, y, num_epochs=5000):

        self.w = np.zeros((X.shape[1], 1))  # вектор весов
        self.b = 0  # смещение (число)
        loss_values = []  # значения функции потерь на различных итерациях обновления весов
        
        for i in range(num_epochs):
            y_pred = self.forward(X)
            loss_values.append(mse_loss(y_pred,y))
            self.backward(X,y,y_pred)
        
        return np.array(loss_values)
perceptron = Perceptron_ReLU()
losses = perceptron.fit(X,y)
plt.figure(figsize=(10, 8))
plt.plot(# ВАШ КОД ЗДЕСЬ)
plt.title('График функция потерь', fontsize=15)
plt.xlabel('Номер итерации', fontsize=14)
plt.ylabel('$Loss(\hat{y}, y)$', fontsize=14)
plt.show()
#На графике прямая линия
#веса  изначально инициализированы нулями! Поэтому обучение и не происходит.
#Заинициализируем их случайными числами (не забудьте закомментировать в классе инициализацию нулями):

perceptron = Perceptron_ReLU(# ВАШ КОД ЗДЕСЬ)
losses = perceptron.fit(X, y, num_epochs=5000)

plt.figure(figsize=(10, 8))
plt.plot(losses.reshape(-1,))
plt.title('График функция потерь', fontsize=15)
plt.xlabel('Номер итерации', fontsize=14)
plt.ylabel('$Loss(\hat{y}, y)$', fontsize=14)
plt.show()
#должен получиться график с кривой - на 1500 шагу обучения падает в минимальное значение и к 5000 шагу уже идет по прямой