一个用于二分类任务的单隐层神经网络的实现
标签:
Others
发布于:2020-07-17 13:24:29
编辑于:2022-11-15 13:07:40
浏览量:1326
"""
title: 一个用于二分类任务的单隐层神经网络的实现
description: Coursera Deep Learning Course Week 3 Homework
tags:
- Others
"""
def initialize_parameters(n_x, n_h, n_y):
np.random.seed(2)
W1 = np.random.randn(n_h, n_x) * 0.01
b1 = np.random.randn(n_h, 1) * 0.01
W2 = np.random.randn(n_y, n_h) * 0.01
b2 = np.random.randn(n_y, 1) * 0.01
parameters = {"W1": W1,
"b1": b1,
"W2": W2,
"b2": b2}
return parameters
def forward_propagation(X, parameters):
W1 = parameters["W1"]
b1 = parameters["b1"]
W2 = parameters["W2"]
b2 = parameters["b2"]
Z1 = W1.dot(X) + b1;
A1 = np.tanh(Z1)
Z2 = W2.dot(A1) + b2;
A2 = sigmoid(Z2)
cache = {"Z1": Z1,
"A1": A1,
"Z2": Z2,
"A2": A2}
return A2, cache
def backward_propagation(parameters, cache, X, Y):
m = X.shape[1]
W1 = parameters["W1"]
W2 = parameters["W2"]
A1 = cache["A1"]
A2 = cache["A2"]
dZ2 = A2 - Y
dW2 = dZ2.dot(A1.T) / m
db2 = np.sum(dZ2, axis=1, keepdims=True) / m
dZ1 = W2.T.dot(dZ2) * (1 - np.power(A1, 2))
dW1 = dZ1.dot(X.T) / m
db1 = np.sum(dZ1, axis=1, keepdims=True) / m
grads = {"dW1": dW1,
"db1": db1,
"dW2": dW2,
"db2": db2}
return grad
def compute_cost(A2, Y, parameters):
m = Y.shape[1]
logprobs = np.log(A2) * Y + np.log(1 - A2) * (1 - Y);
cost = - np.sum(logprobs) / m;
cost = float(np.squeeze(cost))
return cost
def update_parameters(parameters, grads, learning_rate = 1.2):
W1 = parameters["W1"]
b1 = parameters["b1"]
W2 = parameters["W2"]
b2 = parameters["b2"]
dW1 = grads["dW1"]
db1 = grads["db1"]
dW2 = grads["dW2"]
db2 = grads["db2"]
W1 -= learning_rate * dW1
b1 -= learning_rate * db1
W2 -= learning_rate * dW2
b2 -= learning_rate * db2
parameters = {"W1": W1,
"b1": b1,
"W2": W2,
"b2": b2}
return parameters
def nn_model(X, Y, n_h, num_iterations = 10000, print_cost=False):
np.random.seed(3)
n_x = layer_sizes(X, Y)[0]
n_y = layer_sizes(X, Y)[2]
parameters = initialize_parameters(n_x, n_h, n_y)
for i in range(0, num_iterations):
A2, cache = forward_propagation(X, parameters)
cost = compute_cost(A2, Y, parameters)
grads = backward_propagation(parameters, cache, X, Y)
parameters = update_parameters(parameters, grads)
if print_cost and i % 1000 == 0:
print ("Cost after iteration %i: %f" %(i, cost))
return parameters
def predict(parameters, X):
A2, cache = forward_propagation(X, parameters)
predictions = A2 >= 0.5
return predictions
未经允许,禁止转载,本文源站链接:https://iamazing.cn/