示例#1
0
def get_error(deltas, sums, weights):
    """
    compute error on the previous layer of network
    deltas - ndarray of shape (n, n_{l+1})
    sums - ndarray of shape (n, n_l)
    weights - ndarray of shape (n_{l+1}, n_l)
    """
    return np.mean(np.dot(deltas, weights) * sigmoid_prime(sums), axis=0).T
示例#2
0
 def summatory(self, input_matrix):
     """
     Вычисляет результат сумматорной функции для каждого примера из input_matrix.
     input_matrix - матрица примеров размера (n, m), каждая строка - отдельный пример,
     n - количество примеров, m - количество переменных.
     Возвращает вектор значений сумматорной функции размера (n, 1).
     """
     return np.dot(input_matrix, self.w)
示例#3
0
 def vectorized_forward_pass(self, input_matrix):
     """
     Метод рассчитывает ответ перцептрона при предъявлении набора примеров
     input_matrix - матрица примеров размера (n, m), каждая строка - отдельный пример,
     n - количество примеров, m - количество переменных
     Возвращает вертикальный вектор размера (n, 1) с ответами перцептрона
     (элементы вектора - boolean или целые числа (0 или 1))
     """
     return np.dot(input_matrix, self.w) + self.b > 0
示例#4
0
def sigmoid_prime(x):
    return sigmoid(x) * (
        1 - sigmoid(x)
    )  # производная сигмоидальной функции, работает и с числами, и с векторами (поэлементно)


def get_error(deltas, sums, weights):
    """
    compute error on the previous layer of network
    deltas - ndarray of shape (n, n_{l+1})
    sums - ndarray of shape (n, n_l)
    weights - ndarray of shape (n_{l+1}, n_l)
    """
    return np.mean(np.dot(deltas, weights) * sigmoid_prime(sums), axis=0).T


deltas = np.random.random((2, 3))
sums = np.random.random((2, 4))
weights = np.random.random((3, 4))
print("deltas\n", deltas, "\n", "sums\n", sums, "\n", "weights\n", weights)

a = np.dot(deltas, weights)
print("deltas.dot(weights)\n", a)
b = a * sigmoid_prime(sums)
print("*sigmoid_prime(sums)\n", b)
c = np.mean(b, axis=0)
print("average delta\n", c)
d = c.T
print("delta = average transpose\n", d)
示例#5
0
                       [0.8, 0.3,
                        0.6]])  # задаем матрицу весво между слоями 0 и 1
weights1_2 = np.array([[0.2, 0.4]])  # задаем матрицу весво между слоями 1 и 2
print("weights0_1\n", weights0_1, "\nweights1_2\n", weights1_2)

b1 = np.zeros((2, 1))
b2 = np.zeros((1, 1))

input_a = np.array([[0], [1], [1]])  # задаем вектор входных активаций
print("input_activations\n", input_a, input_a.shape)

y = np.ones((1, 1))  # задаем вектор правильных ответов
print("answer y\n", y, y.shape)

# прямое распространение активаций
z1 = np.dot(weights0_1, input_a) + b1
a1_1 = max(z1[0][0])
a1_2 = sigmoid(z1[1][0])  # вектор активаций 1го слоя (помежуточного)
a1 = np.array([[a1_1], [a1_2]])
print("activations1\n", a1_1, a1.shape)

z2 = np.dot(weights1_2, a1) + b2
a2 = sigmoid(z2)  # вектор активаций 2го слоя (выходного)
print("activations2\n", a2, a2.shape)

# обратное распространение ошибки
deltas2 = (a2 - y) * sigmoid_prime(
    z2)  # считаем вектор дельт (ошибок) 2го слоя (выходного)
print("deltas2\n", deltas2, deltas2.shape)
deltas1_1 = weights1_2[0][0] * deltas2[0][0] * max_prime(z1[0][0])
deltas1_2 = weights1_2[0][1] * deltas2[0][0] * sigmoid_prime(