bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

關(guān)于python損失函數(shù)教程的信息

怎樣用python構(gòu)建一個(gè)卷積神經(jīng)網(wǎng)絡(luò)

用keras框架較為方便

在全州等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供網(wǎng)站設(shè)計(jì)制作、成都做網(wǎng)站 網(wǎng)站設(shè)計(jì)制作按需定制制作,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站設(shè)計(jì),成都全網(wǎng)營(yíng)銷推廣,外貿(mào)網(wǎng)站建設(shè),全州網(wǎng)站建設(shè)費(fèi)用合理。

首先安裝anaconda,然后通過(guò)pip安裝keras

以下轉(zhuǎn)自wphh的博客。

#coding:utf-8

'''

GPU?run?command:

THEANO_FLAGS=mode=FAST_RUN,device=gpu,floatX=float32?python?cnn.py

CPU?run?command:

python?cnn.py

2016.06.06更新:

這份代碼是keras開(kāi)發(fā)初期寫的,當(dāng)時(shí)keras還沒(méi)有現(xiàn)在這么流行,文檔也還沒(méi)那么豐富,所以我當(dāng)時(shí)寫了一些簡(jiǎn)單的教程。

現(xiàn)在keras的API也發(fā)生了一些的變化,建議及推薦直接上keras.io看更加詳細(xì)的教程。

'''

#導(dǎo)入各種用到的模塊組件

from?__future__?import?absolute_import

from?__future__?import?print_function

from?keras.preprocessing.image?import?ImageDataGenerator

from?keras.models?import?Sequential

from?keras.layers.core?import?Dense,?Dropout,?Activation,?Flatten

from?keras.layers.advanced_activations?import?PReLU

from?keras.layers.convolutional?import?Convolution2D,?MaxPooling2D

from?keras.optimizers?import?SGD,?Adadelta,?Adagrad

from?keras.utils?import?np_utils,?generic_utils

from?six.moves?import?range

from?data?import?load_data

import?random

import?numpy?as?np

np.random.seed(1024)??#?for?reproducibility

#加載數(shù)據(jù)

data,?label?=?load_data()

#打亂數(shù)據(jù)

index?=?[i?for?i?in?range(len(data))]

random.shuffle(index)

data?=?data[index]

label?=?label[index]

print(data.shape[0],?'?samples')

#label為0~9共10個(gè)類別,keras要求格式為binary?class?matrices,轉(zhuǎn)化一下,直接調(diào)用keras提供的這個(gè)函數(shù)

label?=?np_utils.to_categorical(label,?10)

###############

#開(kāi)始建立CNN模型

###############

#生成一個(gè)model

model?=?Sequential()

#第一個(gè)卷積層,4個(gè)卷積核,每個(gè)卷積核大小5*5。1表示輸入的圖片的通道,灰度圖為1通道。

#border_mode可以是valid或者full,具體看這里說(shuō)明:

#激活函數(shù)用tanh

#你還可以在model.add(Activation('tanh'))后加上dropout的技巧:?model.add(Dropout(0.5))

model.add(Convolution2D(4,?5,?5,?border_mode='valid',input_shape=(1,28,28)))?

model.add(Activation('tanh'))

#第二個(gè)卷積層,8個(gè)卷積核,每個(gè)卷積核大小3*3。4表示輸入的特征圖個(gè)數(shù),等于上一層的卷積核個(gè)數(shù)

#激活函數(shù)用tanh

#采用maxpooling,poolsize為(2,2)

model.add(Convolution2D(8,?3,?3,?border_mode='valid'))

model.add(Activation('tanh'))

model.add(MaxPooling2D(pool_size=(2,?2)))

#第三個(gè)卷積層,16個(gè)卷積核,每個(gè)卷積核大小3*3

#激活函數(shù)用tanh

#采用maxpooling,poolsize為(2,2)

model.add(Convolution2D(16,?3,?3,?border_mode='valid'))?

model.add(Activation('relu'))

model.add(MaxPooling2D(pool_size=(2,?2)))

#全連接層,先將前一層輸出的二維特征圖flatten為一維的。

#Dense就是隱藏層。16就是上一層輸出的特征圖個(gè)數(shù)。4是根據(jù)每個(gè)卷積層計(jì)算出來(lái)的:(28-5+1)得到24,(24-3+1)/2得到11,(11-3+1)/2得到4

#全連接有128個(gè)神經(jīng)元節(jié)點(diǎn),初始化方式為normal

model.add(Flatten())

model.add(Dense(128,?init='normal'))

model.add(Activation('tanh'))

#Softmax分類,輸出是10類別

model.add(Dense(10,?init='normal'))

model.add(Activation('softmax'))

#############

#開(kāi)始訓(xùn)練模型

##############

#使用SGD?+?momentum

#model.compile里的參數(shù)loss就是損失函數(shù)(目標(biāo)函數(shù))

sgd?=?SGD(lr=0.05,?decay=1e-6,?momentum=0.9,?nesterov=True)

model.compile(loss='categorical_crossentropy',?optimizer=sgd,metrics=["accuracy"])

#調(diào)用fit方法,就是一個(gè)訓(xùn)練過(guò)程.?訓(xùn)練的epoch數(shù)設(shè)為10,batch_size為100.

#數(shù)據(jù)經(jīng)過(guò)隨機(jī)打亂shuffle=True。verbose=1,訓(xùn)練過(guò)程中輸出的信息,0、1、2三種方式都可以,無(wú)關(guān)緊要。show_accuracy=True,訓(xùn)練時(shí)每一個(gè)epoch都輸出accuracy。

#validation_split=0.2,將20%的數(shù)據(jù)作為驗(yàn)證集。

model.fit(data,?label,?batch_size=100,?nb_epoch=10,shuffle=True,verbose=1,validation_split=0.2)

"""

#使用data?augmentation的方法

#一些參數(shù)和調(diào)用的方法,請(qǐng)看文檔

datagen?=?ImageDataGenerator(

featurewise_center=True,?#?set?input?mean?to?0?over?the?dataset

samplewise_center=False,?#?set?each?sample?mean?to?0

featurewise_std_normalization=True,?#?divide?inputs?by?std?of?the?dataset

samplewise_std_normalization=False,?#?divide?each?input?by?its?std

zca_whitening=False,?#?apply?ZCA?whitening

rotation_range=20,?#?randomly?rotate?images?in?the?range?(degrees,?0?to?180)

width_shift_range=0.2,?#?randomly?shift?images?horizontally?(fraction?of?total?width)

height_shift_range=0.2,?#?randomly?shift?images?vertically?(fraction?of?total?height)

horizontal_flip=True,?#?randomly?flip?images

vertical_flip=False)?#?randomly?flip?images

#?compute?quantities?required?for?featurewise?normalization?

#?(std,?mean,?and?principal?components?if?ZCA?whitening?is?applied)

datagen.fit(data)

for?e?in?range(nb_epoch):

print('-'*40)

print('Epoch',?e)

print('-'*40)

print("Training...")

#?batch?train?with?realtime?data?augmentation

progbar?=?generic_utils.Progbar(data.shape[0])

for?X_batch,?Y_batch?in?datagen.flow(data,?label):

loss,accuracy?=?model.train(X_batch,?Y_batch,accuracy=True)

progbar.add(X_batch.shape[0],?values=[("train?loss",?loss),("accuracy:",?accuracy)]?)

"""

python入門教程(非常詳細(xì))

python入門教程如下:

準(zhǔn)備材料:windows電腦、python

1、這里簡(jiǎn)單告用python軟件編寫的一個(gè)關(guān)于貨物售價(jià)折扣方面的一個(gè)計(jì)算程序,首先打開(kāi)python軟件。

2、進(jìn)入python后,會(huì)出現(xiàn)如圖所示界面,按照?qǐng)D中箭頭指示,先選擇File選項(xiàng),然后在下拉菜單中選擇New file選項(xiàng)。

3、選擇完畢后,會(huì)出現(xiàn)一個(gè)新的界面,如圖箭頭和紅色框指示。

4、進(jìn)入這個(gè)新的界面,在里面輸入自己想編輯的程序,如圖所示是編寫的一個(gè)關(guān)于貨物售價(jià)折扣方面的一個(gè)簡(jiǎn)單的計(jì)算程序。

5、程序輸入完畢后,按照?qǐng)D中箭頭和紅色框指示,先選擇Run選項(xiàng),然后在下拉菜單中選擇Run Module(注:除此方法外還可以點(diǎn)擊鍵盤F5)。

6、此時(shí)會(huì)在原界面出現(xiàn)如圖所示的字樣,這是因?yàn)榫帉懗绦蚓庉嫼玫模藭r(shí)可以輸入一個(gè)數(shù)字,然后回車,又會(huì)讓輸入一個(gè)折扣,輸入完即可得出最后售價(jià)結(jié)果。

7、如圖所示,這里輸入的原價(jià)是10,折扣是0.2,故此系統(tǒng)根據(jù)編寫的程序計(jì)算除了打折后的價(jià)格為2。

從零開(kāi)始用Python構(gòu)建神經(jīng)網(wǎng)絡(luò)

從零開(kāi)始用Python構(gòu)建神經(jīng)網(wǎng)絡(luò)

動(dòng)機(jī):為了更加深入的理解深度學(xué)習(xí),我們將使用 python 語(yǔ)言從頭搭建一個(gè)神經(jīng)網(wǎng)絡(luò),而不是使用像 Tensorflow 那樣的封裝好的框架。我認(rèn)為理解神經(jīng)網(wǎng)絡(luò)的內(nèi)部工作原理,對(duì)數(shù)據(jù)科學(xué)家來(lái)說(shuō)至關(guān)重要。

這篇文章的內(nèi)容是我的所學(xué),希望也能對(duì)你有所幫助。

神經(jīng)網(wǎng)絡(luò)是什么?

介紹神經(jīng)網(wǎng)絡(luò)的文章大多數(shù)都會(huì)將它和大腦進(jìn)行類比。如果你沒(méi)有深入研究過(guò)大腦與神經(jīng)網(wǎng)絡(luò)的類比,那么將神經(jīng)網(wǎng)絡(luò)解釋為一種將給定輸入映射為期望輸出的數(shù)學(xué)關(guān)系會(huì)更容易理解。

神經(jīng)網(wǎng)絡(luò)包括以下組成部分

? 一個(gè)輸入層,x

? 任意數(shù)量的隱藏層

? 一個(gè)輸出層,?

? 每層之間有一組權(quán)值和偏置,W and b

? 為隱藏層選擇一種激活函數(shù),σ。在教程中我們使用 Sigmoid 激活函數(shù)

下圖展示了 2 層神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)(注意:我們?cè)谟?jì)算網(wǎng)絡(luò)層數(shù)時(shí)通常排除輸入層)

2 層神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)

用 Python 可以很容易的構(gòu)建神經(jīng)網(wǎng)絡(luò)類

訓(xùn)練神經(jīng)網(wǎng)絡(luò)

這個(gè)網(wǎng)絡(luò)的輸出 ? 為:

你可能會(huì)注意到,在上面的等式中,輸出 ? 是 W 和 b 函數(shù)。

因此 W 和 b 的值影響預(yù)測(cè)的準(zhǔn)確率. 所以根據(jù)輸入數(shù)據(jù)對(duì) W 和 b 調(diào)優(yōu)的過(guò)程就被成為訓(xùn)練神經(jīng)網(wǎng)絡(luò)。

每步訓(xùn)練迭代包含以下兩個(gè)部分:

? 計(jì)算預(yù)測(cè)結(jié)果 ?,這一步稱為前向傳播

? 更新 W 和 b,,這一步成為反向傳播

下面的順序圖展示了這個(gè)過(guò)程:

前向傳播

正如我們?cè)谏蠄D中看到的,前向傳播只是簡(jiǎn)單的計(jì)算。對(duì)于一個(gè)基本的 2 層網(wǎng)絡(luò)來(lái)說(shuō),它的輸出是這樣的:

我們?cè)?NeuralNetwork 類中增加一個(gè)計(jì)算前向傳播的函數(shù)。為了簡(jiǎn)單起見(jiàn)我們假設(shè)偏置 b 為0:

但是我們還需要一個(gè)方法來(lái)評(píng)估預(yù)測(cè)結(jié)果的好壞(即預(yù)測(cè)值和真實(shí)值的誤差)。這就要用到損失函數(shù)。

損失函數(shù)

常用的損失函數(shù)有很多種,根據(jù)模型的需求來(lái)選擇。在本教程中,我們使用誤差平方和作為損失函數(shù)。

誤差平方和是求每個(gè)預(yù)測(cè)值和真實(shí)值之間的誤差再求和,這個(gè)誤差是他們的差值求平方以便我們觀察誤差的絕對(duì)值。

訓(xùn)練的目標(biāo)是找到一組 W 和 b,使得損失函數(shù)最好小,也即預(yù)測(cè)值和真實(shí)值之間的距離最小。

反向傳播

我們已經(jīng)度量出了預(yù)測(cè)的誤差(損失),現(xiàn)在需要找到一種方法來(lái)傳播誤差,并以此更新權(quán)值和偏置。

為了知道如何適當(dāng)?shù)恼{(diào)整權(quán)值和偏置,我們需要知道損失函數(shù)對(duì)權(quán)值 W 和偏置 b 的導(dǎo)數(shù)。

回想微積分中的概念,函數(shù)的導(dǎo)數(shù)就是函數(shù)的斜率。

梯度下降法

如果我們已經(jīng)求出了導(dǎo)數(shù),我們就可以通過(guò)增加或減少導(dǎo)數(shù)值來(lái)更新權(quán)值 W 和偏置 b(參考上圖)。這種方式被稱為梯度下降法。

但是我們不能直接計(jì)算損失函數(shù)對(duì)權(quán)值和偏置的導(dǎo)數(shù),因?yàn)樵趽p失函數(shù)的等式中并沒(méi)有顯式的包含他們。因此,我們需要運(yùn)用鏈?zhǔn)角髮?dǎo)發(fā)在來(lái)幫助計(jì)算導(dǎo)數(shù)。

鏈?zhǔn)椒▌t用于計(jì)算損失函數(shù)對(duì) W 和 b 的導(dǎo)數(shù)。注意,為了簡(jiǎn)單起見(jiàn)。我們只展示了假設(shè)網(wǎng)絡(luò)只有 1 層的偏導(dǎo)數(shù)。

這雖然很簡(jiǎn)陋,但是我們依然能得到想要的結(jié)果—損失函數(shù)對(duì)權(quán)值 W 的導(dǎo)數(shù)(斜率),因此我們可以相應(yīng)的調(diào)整權(quán)值。

現(xiàn)在我們將反向傳播算法的函數(shù)添加到 Python 代碼中

為了更深入的理解微積分原理和反向傳播中的鏈?zhǔn)角髮?dǎo)法則,我強(qiáng)烈推薦 3Blue1Brown 的如下教程:

Youtube:

整合并完成一個(gè)實(shí)例

既然我們已經(jīng)有了包括前向傳播和反向傳播的完整 Python 代碼,那么就將其應(yīng)用到一個(gè)例子上看看它是如何工作的吧。

神經(jīng)網(wǎng)絡(luò)可以通過(guò)學(xué)習(xí)得到函數(shù)的權(quán)重。而我們僅靠觀察是不太可能得到函數(shù)的權(quán)重的。

讓我們訓(xùn)練神經(jīng)網(wǎng)絡(luò)進(jìn)行 1500 次迭代,看看會(huì)發(fā)生什么。 注意觀察下面每次迭代的損失函數(shù),我們可以清楚地看到損失函數(shù)單調(diào)遞減到最小值。這與我們之前介紹的梯度下降法一致。

讓我們看看經(jīng)過(guò) 1500 次迭代后的神經(jīng)網(wǎng)絡(luò)的最終預(yù)測(cè)結(jié)果:

經(jīng)過(guò) 1500 次迭代訓(xùn)練后的預(yù)測(cè)結(jié)果

我們成功了!我們應(yīng)用前向和方向傳播算法成功的訓(xùn)練了神經(jīng)網(wǎng)絡(luò)并且預(yù)測(cè)結(jié)果收斂于真實(shí)值。

注意預(yù)測(cè)值和真實(shí)值之間存在細(xì)微的誤差是允許的。這樣可以防止模型過(guò)擬合并且使得神經(jīng)網(wǎng)絡(luò)對(duì)于未知數(shù)據(jù)有著更強(qiáng)的泛化能力。

下一步是什么?

幸運(yùn)的是我們的學(xué)習(xí)之旅還沒(méi)有結(jié)束,仍然有很多關(guān)于神經(jīng)網(wǎng)絡(luò)和深度學(xué)習(xí)的內(nèi)容需要學(xué)習(xí)。例如:

? 除了 Sigmoid 以外,還可以用哪些激活函數(shù)

? 在訓(xùn)練網(wǎng)絡(luò)的時(shí)候應(yīng)用學(xué)習(xí)率

? 在面對(duì)圖像分類任務(wù)的時(shí)候使用卷積神經(jīng)網(wǎng)絡(luò)

我很快會(huì)寫更多關(guān)于這個(gè)主題的內(nèi)容,敬請(qǐng)期待!

最后的想法

我自己也從零開(kāi)始寫了很多神經(jīng)網(wǎng)絡(luò)的代碼

雖然可以使用諸如 Tensorflow 和 Keras 這樣的深度學(xué)習(xí)框架方便的搭建深層網(wǎng)絡(luò)而不需要完全理解其內(nèi)部工作原理。但是我覺(jué)得對(duì)于有追求的數(shù)據(jù)科學(xué)家來(lái)說(shuō),理解內(nèi)部原理是非常有益的。

這種練習(xí)對(duì)我自己來(lái)說(shuō)已成成為重要的時(shí)間投入,希望也能對(duì)你有所幫助

新聞標(biāo)題:關(guān)于python損失函數(shù)教程的信息
標(biāo)題網(wǎng)址:http://vcdvsql.cn/article26/hecscg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)移動(dòng)網(wǎng)站建設(shè)搜索引擎優(yōu)化網(wǎng)頁(yè)設(shè)計(jì)公司靜態(tài)網(wǎng)站網(wǎng)站內(nèi)鏈

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護(hù)公司