Coursera 吳恩達《神經網路與深度學習》第三週程式設計作業
阿新 • • 發佈:2018-12-12
# 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))
參考博文: