1. 程式人生 > >Coursera 吳恩達《神經網路與深度學習》第三週程式設計作業

Coursera 吳恩達《神經網路與深度學習》第三週程式設計作業

# Package imports
import numpy as np
import matplotlib.pyplot as plt
from testCases import *
import sklearn
import sklearn.datasets
import sklearn.linear_model
from planar_utils import plot_decision_boundary, sigmoid, load_planar_dataset, load_extra_datasets

%matplotlib inline

#seed( ) 用於指定隨機數生成時所用演算法開始的整數值。 
    #1.如果使用相同的seed( )值,則每次生成的隨即數都相同; 
    #2.如果不設定這個值,則系統根據時間來自己選擇這個值,此時每次生成的隨機數因時間差異而不同。 
    #3.設定的seed()值僅一次有效
np.random.seed(1) # set a seed so that the results are consistent設定一個統一的隨機數

X, Y = load_planar_dataset() #X:np.zeros((m,D))。Y:labels vector (0 for red, 1 for blue)

下面是呼叫的下載資料集的函式load_planar_dataset():

def load_planar_dataset():
    np.random.seed(1)#seed( ) 用於指定隨機數生成時所用演算法開始的整數值。 
                        #1.如果使用相同的seed( )值,則每次生成的隨即數都相同; 
                        #2.如果不設定這個值,則系統根據時間來自己選擇這個值,此時每次生成的隨機數因時間差異而不同。 
                        #3.設定的seed()值僅一次有效
    m = 400 # number of examples #樣本總量
    N = int(m/2) # number of points per class #每個類別的樣本量
    D = 2 # dimensionality #維度數
    X = np.zeros((m,D)) # data matrix where each row is a single example#初始化X 
    Y = np.zeros((m,1), dtype='uint8') # labels vector (0 for red, 1 for blue)#初始化Y
    a = 4 # maximum(最大) ray(射線) of the flower #花兒最大長度

    for j in range(2):
        ix = range(N*j,N*(j+1))
        t = np.linspace(j*3.12,(j+1)*3.12,N) + np.random.randn(N)*0.2 # theta#角度
        r = a*np.sin(4*t) + np.random.randn(N)*0.2 # radius#半徑
        X[ix] = np.c_[r*np.sin(t), r*np.cos(t)]
        Y[ix] = j
        
    X = X.T
    Y = Y.T

    return X, Y

原來的程式碼有一些小問題,執行報錯。主要是因為plt.scatter(),(對該函式不瞭解的同學可以點進去看看),主要報錯就是在c引數的賦值。

若我們對下載資料的Y值和shape進行列印,則可以看到以下結果:可以看出Y是一個二維陣列,是1行400列。我們需要的是Y的具體的每一個0/1的值,可以看出它是處於Y.shape[1]中的400個值。

我們可以通過squeeze函式:從陣列的shape中刪除單維度條目,即把shape中為1的維度去掉。

# Visualize(視覺化) the data:
#print(Y)
#print(Y.shape)
a = np.squeeze(Y)
print(a.shape) #(400,)
plt.scatter(X[0,:],X[1,:],c=np.squeeze(Y),s=40,cmap=plt.cm.Spectral)
#plt.scatter(X[0, :], X[1, :], c=Y, s=40, cmap=plt.cm.Spectral);#X[0, :], X[1, :]是輸入資料,c是色彩或顏色序列 y的值是0或者1((0 for red, 1 for blue))

參考博文: