Exemplo n.º 1
0
class MLP:
    def __init__(self, input_size, hidden_size_1, hidden_size_2, output_size):
        self.input_layer = InputLayer(input_size, hidden_size_1, ReLU)
        self.hidden_layer = HiddenLayer(hidden_size_1, hidden_size_2)
        self.output_layer = SoftmaxOutputLayer(hidden_size_2, output_size)

    def predict(self, x):
        x = self.input_layer.forward(x)
        x = self.hidden_layer.forward(x)
        prob = self.output_layer.predict(x)

        pred = np.argmax(prob, axis=-1)

        return pred

    def loss(self, x, y):
        x = self.input_layer.forward(x)
        x = self.hidden_layer.forward(x)
        loss = self.output_layer.forward(x, y)
        return loss

    def gradient(self):
        d_prev = 1
        d_prev = self.output_layer.backward(d_prev=d_prev)
        d_prev = self.hidden_layer.backward(d_prev)
        self.input_layer.backward(d_prev)

    def update(self, learning_rate):
        self.input_layer.W -= self.input_layer.dW * learning_rate
        self.input_layer.b -= self.input_layer.db * learning_rate
        self.hidden_layer.W -= self.hidden_layer.dW * learning_rate
        self.hidden_layer.b -= self.hidden_layer.db * learning_rate
        self.output_layer.W -= self.output_layer.dW * learning_rate
        self.output_layer.b -= self.output_layer.db * learning_rate
Exemplo n.º 2
0
 def __init__(self, input_size, hidden_size_1, hidden_size_2, output_size):
     self.input_layer = InputLayer(input_size, hidden_size_1, ReLU)
     self.hidden_layer = HiddenLayer(hidden_size_1, hidden_size_2)
     self.output_layer = SoftmaxOutputLayer(hidden_size_2, output_size)
Exemplo n.º 3
0
 [[0.03511903 0.25949646 0.70538451]
 [0.00108758 0.00270191 0.99621051]]
Forward: 
 4.631404434078592
Backward: 
 [[ 0.25645564  0.50146461  1.92169975]
 [ 2.7215362  -0.314622   10.96489546]]
dW: 
 [[-5.43791927e-04  4.98649045e-01 -4.98105254e-01]
 [ 5.43791927e-04 -4.98649045e-01  4.98105254e-01]
 [ 2.71895963e-04 -2.49324523e-01  2.49052627e-01]]
db: 
 [-0.48189669 -0.36890082  0.85079751]
"""

softmax_output_layer = SoftmaxOutputLayer(3, 3)
softmax_output_layer.W = np.array([[1.12, -2.34, 3.12], [-1, 0.5, -0.13],
                                   [1.1, -11, 11]])
softmax_output_layer.b = np.array([-1, 1, 2])

temp_y = np.array([[0, 1, 0], [1, 0, 0], [0, 0, 1]])
temp_y_hat = np.array([[0.5, 0.0, 0.1], [0.3, 0.2, 2.1], [3.5, 1.0, 1.1]])
print('Cross-entropy loss: \n',
      softmax_output_layer.ce_loss(temp_y_hat, temp_y))

temp8 = np.array([[0, 0, 0], [-1, 1, 0.5]])
print('Predict: \n', softmax_output_layer.predict(temp8))

temp_y = np.array([[1, 0, 0], [0, 1, 0]])
print('Forward: \n', softmax_output_layer.forward(temp8, temp_y))
print('Backward: \n', softmax_output_layer.backward(d_prev=1))