DNNを構築して予測する(続き:自作コードで深さニューラルネットワークを実現する)
12633 ワード
自分で作ったDNNを利用して簡単な予測をする.前編の博文です:《自己コードは深さの神経のネットワークを実現します》の後続の部分を実現します.前編を呼び出す関数は次のとおりです.
予測関数を定義し、予測結果Pを出力する
勾配降下による反復パラメータparametersの使用
Accuracy: 0.9856459330143541
Accuracy: 0.8
精度は,浅層ニューラルネットワークを用いると最高でも0.72しかなく,hidden unitが多く,過フィッティングを招くことも許容できる.
def initialize_parameters_deep(layer_dims):
...
return parameters
def L_model_forward(X, parameters):
...
return AL, caches
def compute_cost(AL, Y):
...
return cost
def L_model_backward(AL, Y, caches):
...
return grads
def update_parameters(parameters, grads, learning_rate):
...
return parameters
予測関数を定義し、予測結果Pを出力する
def predict(X, y, parameters):
m = X.shape[1]
n = len(parameters) // 2 # number of layers in the neural network
p = np.zeros((1,m))
# Forward propagation
probas, caches = L_model_forward(X, parameters)
# convert probas to 0/1 predictions
for i in range(0, probas.shape[1]):
if probas[0,i] > 0.5:
p[0,i] = 1
else:
p[0,i] = 0
print("Accuracy: " + str(np.sum(p == y)/m))
return p
勾配降下による反復パラメータparametersの使用
def L_layer_model(X, Y, layers_dims, learning_rate = 0.0075, num_iterations = 3000, print_cost=False):
np.random.seed(1)
costs = [] # keep track of cost
# Parameters initialization.
parameters = initialize_parameters_deep(layers_dims)
# Loop (gradient descent)
for i in range(0, num_iterations):
#
AL, caches =L_model_forward(X, parameters)
# cost
cost = compute_cost(AL, Y)
#
grads = L_model_backward(AL, Y, caches)
#
parameters = update_parameters(parameters, grads, learning_rate)
# cost
if print_cost and i % 100 == 0:
print ("Cost after iteration %i: %f" %(i, cost))
if print_cost and i % 100 == 0:
costs.append(cost)
# cost
plt.plot(np.squeeze(costs))
plt.ylabel('cost')
plt.xlabel('iterations (per tens)')
plt.title("Learning rate =" + str(learning_rate))
plt.show()
return parameters
parameters = L_layer_model(train_x, train_y, layers_dims, num_iterations = 2500, print_cost=True)
pred_train = predict(train_x, train_y, parameters)
Accuracy: 0.9856459330143541
pred_test = predict(test_x, test_y, parameters)
Accuracy: 0.8
精度は,浅層ニューラルネットワークを用いると最高でも0.72しかなく,hidden unitが多く,過フィッティングを招くことも許容できる.