吳恩達課程1 4作業

2021-08-17 03:44:26 字數 3282 閱讀 4238

#定義一些必要函式

def sigmoid(z):

a=1/(1+np.exp(-z))

assert(a.shape==z.shape)

cache=z

return a,cache

def relu(z):

a=za[z<=0]=0

assert(a.shape==z.shape)

cache=z

return a,cache

def backward_sigmoid(da,a):

da.reshape(a.shape)

dz=da*a*(1-a)

assert(dz.shape==da.shape)

return dz

def backward_relu(da,cache):

z=cache

dz=da

dz[z<=0]=0

assert(dz.shape==da.shape)

return dz

def initial_parameters(layerdims):

np.random.seed(3)

l=len(layerdims)

parameters={}

for l in range(1,

l):#之前寫成了l+1

parameters["w"+str(l)]=np.random.randn(layerdims[l],layerdims[l-1])*0.01

parameters["b"+str(l)]=np.zeros((layerdims[1],1))

assert( parameters["w"+str(l)].shape)==(layerdims[l],layerdims[l-1])

assert( parameters["b"+str(l)].shape)==(layerdims[1],1)

return parameters

def line(a_pre,w,b):

z=np.dot(w,a_pre)+b

assert(z.shape==(w.shape[0],a_pre.shape[1]))

cache=[a_pre,w,b]

#寫成[a_pre,w,b]與(a_pre,w,b)效果一樣

return z,cache

def cost(y,al):

m=y.shape[1]

cost=-np.sum(np.multiply(y,np.log(al))+np.multiply(1-y,np.log(1-al)))/m  #之前少寫了np.sum

cost=np.squeeze(cost) #記得降維成乙個數字 自己寫的忘記加了

assert(cost.shape==()) #自己寫的忘記加了

return cost

def forward_propagate(x,parameters):

l=len(parameters)/2  

#答案是//2有必要嗎?因為parameters必然是成對出現的!有必要的。因為可以取整。去掉小數點變成整數、不然是float型

caches=

a_pre=x

for l in range(1,l):

z,cache_line=line(a_pre,parameters["w"+str(l)],parameters["b"+str(l)])

a,cache_active=relu(z)

a_pre=a

zl,cache_line=line(a_pre,parameters["w"+str(l)],parameters["b"+str(l)])

al,cache_active=sigmoid(zl)

return al,caches

def backward_propagate(y,al,caches):

l=len(caches)

#原來/2了 這裡不應該/2

grads={}

#  cost=cost(y,al)  

#去掉這句話 不加了

m=y.shape[1]

dal=-np.divide(y,al)+np.divide(1-y,1-al)

assert(dal.shape==al.shape)

grads["da"+str(l)]=dal

# dzl=backward_sigmoid(dal,al)#修改 l層單獨處理,然後再走後面的

cache_line_l,cache_active_l=caches[l-1]

dzl=backward_sigmoid(dal,cache_active_l)

dz=dzl

#新增加

grads["dw"+str(l)]=np.dot(dz,cache_line_l[0].t)/m

grads["db"+str(l)]=np.sum(dz,axis=1,keepdims=true)/m

grads["da"+str(l-1)]=np.dot(cache_line_l[1].t,dz)

for l in reversed(range(

l-1)):

cache_line,cache_active=caches[l]

a_pre,w,b=cache_line

z=cache_active

dz=backward_relu(grads["da"+str(l+1)],z)

grads["dw"+str(l+1)]=np.dot(dz,a_pre.t)

grads["db"+str(l+1)]=np.sum(dz,axis=1,keepdims=true)/m

grads["da"+str(l)]=np.dot(w.t,dz)

# dz=backward_relu(grads["da"+str(l)],z)#錯誤就出在這裡,z是z(l+1)的這裡不匹配應該用z(l)的

return grads

#返回值裡也去掉cost

def updata_parameters(parameters,grads,learning_rate):

l=len(parameters)/

/2for l in rang(l):

parameters["w"+str(l+1)]=parameters["w"+str(l+1)]-learning_rate*grads["dw"+str(l+1)]

parameters["b"+str(l+1)]=parameters["b"+str(l+1)]-learning_rate*grads["db"+str(l+1)]

return parameters

吳恩達老師課程總結

吳恩達老師課程總結1 深度學習概論 目錄 1.1神經網路的概念 1.2用神經網路進行監督學習 1.3深度學習的興起 1.1神經網路的概念 隨著ai日益博取眼球,方興未艾,神經網路再度火熱,談及神經網路,首先我們要解決乙個問題,什麼是神經網路?在我看來,神經網路是一種強大的學習演算法,這種演算法受到人...

吳恩達深度學習課程筆記

一直以為機器學習的重點在於設計精巧 神秘的演算法來模擬人類解決問題。學了這門課程才明白如何根據實際問題優化 調整模型更為重要。事實上,機器學習所使用的核心演算法幾十年來都沒變過。什麼是機器學習呢?以二類分類監督學習為例,假設我們已經有了一堆訓練資料,每個訓練樣本可以看作n維空間裡的乙個點,那麼機器學...

Course吳恩達機器學習課程完結

andew ng老師的機器學習終於看完了,收穫還是蠻大的。我並不是在course上看的,我是在b站上看的,本來想在網易雲上看結果網易雲下架了。我course作業都完成了結果發現沒證書?excuse me?還得購買或者申請助學金?沒人告訴我,我就吃了這個虧,太窮了,沒工資,每個月能來錢的就國家500塊...