深度學習編程做業(識別圖像是否爲貓)

深度學習第一課第二週編程,源代碼在:https://github.com/NoteXYX/catClassifiergit

main.py:github

import numpy as np import h5py import matplotlib.pyplot as plt import scipy from PIL import Image from scipy import ndimage from lr_utils import load_dataset #%matplotlib inline
def showPic(index): plt.imshow(train_set_x_orig[index]) plt.show() '''print("y = " + str(train_set_y[:, index]) + ", it's a '" + classes[np.squeeze(train_set_y[:, index])].decode( "utf-8") + "' picture.")'''

def sigmoid(z): s = 1 / (1 + np.exp(-z)) return s def initialize_with_zeros(dim): w = np.zeros((dim, 1)) b = 0 assert (w.shape == (dim, 1)) assert (isinstance(b, float) or isinstance(b, int)) return w, b def propagate(w, b, X, Y): m = X.shape[1] A = sigmoid(np.dot(w.T, X) + b) cost = -1/m * np.sum(Y * np.log(A) + (1-Y) * np.log(1-A)) dw = 1/m * np.dot(X, (A-Y).T) db = 1/m * np.sum(A - Y) assert (dw.shape == w.shape) assert (db.dtype == float) cost = np.squeeze(cost) assert (cost.shape == ()) grads = {"dw": dw, "db": db} return grads, cost def optimize(w, b, X, Y, num_iterations, learning_rate, print_cost = False): costs = [] for i in range(num_iterations): grades, cost = propagate(w, b, X, Y) dw = grades["dw"] db = grades["db"] w = w - learning_rate * dw b = b - learning_rate * db if i % 100 == 0: costs.append(cost) if print_cost and i % 100 ==0: print("Cost after iteration %i: %f" %(i, cost)) params = {"w": w, "b": b} grades = {"dw": dw, "db": db} return params,grades,costs def predict(w, b, X): m = X.shape[1] Y_prediction = np.zeros((1, m)) w = w.reshape(X.shape[0], 1) A = sigmoid(np.dot(w.T, X) + b) for i in range(X.shape[1]): if(A[0][i] <= 0.5): Y_prediction[0][i] = 0 else: Y_prediction[0][i] = 1
    assert (Y_prediction.shape == (1, m)) return Y_prediction def model(X_train, Y_train, X_test, Y_test, num_iterations=2000, learning_rate=0.5, print_cost=False): w,b = initialize_with_zeros(X_train.shape[0]) params, grades, costs = optimize(w,b,X_train,Y_train,num_iterations,learning_rate,print_cost) w = params["w"] b = params["b"] Y_prediction_train = predict(w, b, X_train) Y_prediction_test = predict(w, b, X_test) print("train accuracy: {} %".format(100 - np.mean(np.abs(Y_prediction_train - Y_train)) * 100)) print("test accuracy: {} %".format(100 - np.mean(np.abs(Y_prediction_test - Y_test)) * 100)) d = {"costs": costs, "Y_prediction_test": Y_prediction_test, "Y_prediction_train": Y_prediction_train, "w": w, "b": b, "learning_rate": learning_rate, "num_iterations": num_iterations} return d if __name__ =='__main__': train_set_x_orig, train_set_y, test_set_x_orig, test_set_y, classes = load_dataset() #train_set_x_orig is a numpy-array of shape (m_train, num_px, num_px, 3).
    #showPic(25)
    m_train = train_set_x_orig.shape[0] m_test = test_set_x_orig.shape[0] num_px = train_set_x_orig.shape[1] train_set_x_flatten = train_set_x_orig.reshape(train_set_x_orig.shape[0], -1).T test_set_x_flatten = test_set_x_orig.reshape(test_set_x_orig.shape[0], -1).T train_set_x = train_set_x_flatten / 255. test_set_x = test_set_x_flatten / 255. d = model(train_set_x, train_set_y, test_set_x, test_set_y, num_iterations=5000, learning_rate=0.005, print_cost=True) '''index = 1 showPic(index) print("y = " + str(test_set_y[0, index]) + ", you predicted that it is a \"" + classes[ int(d["Y_prediction_test"][0, index])].decode("utf-8") + "\" picture.") costs = np.squeeze(d['costs']) plt.plot(costs) plt.ylabel('cost') plt.xlabel('iterations (per hundreds)') plt.title("Learning rate =" + str(d["learning_rate"])) plt.show()''' my_image="123.jpg" fname = "images/" + my_image image = np.array(ndimage.imread(fname, flatten=False)) my_image = scipy.misc.imresize(image, size=(num_px, num_px)).reshape((1, num_px * num_px * 3)).T my_predicted_image = predict(d["w"], d["b"], my_image) plt.imshow(image) plt.show() print("y = " + str(np.squeeze(my_predicted_image)) + ", your algorithm predicts a \"" + classes[ int(np.squeeze(my_predicted_image)),].decode("utf-8") + "\" picture.")

lr_utils.py:編程

import numpy as np import h5py def load_dataset(): train_dataset = h5py.File('datasets/train_catvnoncat.h5', "r") train_set_x_orig = np.array(train_dataset["train_set_x"][:]) # your train set features
    train_set_y_orig = np.array(train_dataset["train_set_y"][:]) # your train set labels
 test_dataset = h5py.File('datasets/test_catvnoncat.h5', "r") test_set_x_orig = np.array(test_dataset["test_set_x"][:]) # your test set features
    test_set_y_orig = np.array(test_dataset["test_set_y"][:]) # your test set labels
 classes = np.array(test_dataset["list_classes"][:]) # the list of classes
 train_set_y_orig = train_set_y_orig.reshape((1, train_set_y_orig.shape[0])) test_set_y_orig = test_set_y_orig.reshape((1, test_set_y_orig.shape[0])) return train_set_x_orig, train_set_y_orig, test_set_x_orig, test_set_y_orig, classes
相關文章
相關標籤/搜索