版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
KerasKeras:基于Python的深度學習庫萬震(WANZhen)OGodblesswzQwanzhen@2018年5月16日*Copyright?2018bykeras-team整理Keras:基于Python的深度學習庫(PDF版)的主要原因在于學習Keras深度學習庫時方便本地查閱,最新PDF版本請訪問:https:〃/Godblesswz/keras-docs-zh。感謝keras-team所做的中文翻譯工作,本文檔制作基于此處。嚴正聲明:本文檔可免費用于學習和科學研究,可自由傳播,但切勿擅自用于商業(yè)用途,由此引發(fā)一切后果作者概不負責“ThemainreasonoforganizingPDFversionbasedtheChineseKerasMarkdownisthatitiseasytoreadlocallywhenlearningtheKerasDeepLearningLibrary.ForthelatestPDFversion,pleasevisit/Godblesswz/keras-docs-zh.ThanksfortheChinesetranslationworkdonebykeras-team,thisdocumentisproducedbasedonit.Statement:Thisdocumentcanbefreelyusedforlearningandscientificresearchandisfreelydisseminated,butitmustnotbeusedforcommercialpurposes.Otherwise,theauthorisnotresponsiblefortheconsequences.目錄TOC\o"1-5"\h\z\o"CurrentDocument"Keras:基于Python的深度學習庫 1你恰好發(fā)現(xiàn)了Keras 1指導原則 1快速開始:30秒上手Keras 1安裝指引 3使用TensorFlow以外的后端 3技術支持 3為什么取名為Keras? 4\o"CurrentDocument"2為什么選擇Keras? 5Keras優(yōu)先考慮開發(fā)人員的經(jīng)驗 5Keras被工業(yè)界和學術界廣泛采用 5Keras可以輕松將模型轉(zhuǎn)化為產(chǎn)品 5Keras支持多個后端引擎,并且不會將你鎖定到一個生態(tài)系統(tǒng)中 6Keras擁有強大的多GPU和分布式訓練支持 6Keras的發(fā)展得到深度學習生態(tài)系統(tǒng)中的關鍵公司的支持 63快速開始 7Sequential順序模型指引 7開始使用Keras順序(Sequential)模型 7指定輸入數(shù)據(jù)的尺寸 7編譯 8訓練 8例子 9基于多層感知器(MLP)的softmax多分類: 10基于多層感知器的二分類: 11類似VGG的卷積神經(jīng)網(wǎng)絡: 11基于LSTM的序列分類: 12基于1D卷積的序列分類: 13基于棧式LSTM的序列分類 13帶有狀態(tài)(stateful)的相同的棧式LSTM模型 14函數(shù)式API指引 16開始使用Keras函數(shù)式API 16例一:全連接網(wǎng)絡 16所有的模型都可調(diào)用,就像網(wǎng)絡層一樣 16多輸入多輸出模型 17共享網(wǎng)絡層 19層「節(jié)點」的概念 20
更多的例子 21Inception模型 21卷積層上的殘差連接 22共享視覺模型 22視覺問答模型 23視頻問答模型 24KerasFAQ:常見問題解答 25KerasFAQ:常見問題解答 25如何引用Keras? 25如何在GPU上運行Keras? 25如何在多GPU上運行Keras模型? 26數(shù)據(jù)并行 26設備并行 26"sample","batch","epoch”分別是什么? 27如何保存Keras模型? 27保存/加載整個模型(結構+權重+優(yōu)化器狀態(tài)) 27只保存/加載模型的結構 28只保存/加載模型的權重 28處理已保存:模型中的自定義層(或其他自定義對象) 29為什么訓練誤差比測試誤差高很多? 30如何獲取中間層的輸出? 30如何用Keras處理超過內(nèi)存的數(shù)據(jù)集? 31在驗證集的誤差不再下降時,如何中斷訓練? 31驗證集劃分是如何計算的? 31在訓練過程中數(shù)據(jù)是否會混洗? 31如何在每個epoch后記錄訓練集和灼正集的誤基和準確率? 31如何['凍結」網(wǎng)絡層? 32如何使用有狀態(tài)RNN(statefulRNNs)? 32如何從Sequential模型中移除一個層? 33如何在Keras中使用預訓練的模型? 34如何在Keras中使用HDF5輸入? 34Keras配置文件保存在哪里? 35如何在Keras開發(fā)過程中獲取可復現(xiàn)的結果? 354模型 37關于Keras模型 37\o"CurrentDocument"Sequential順序模型API 38Sequential順序模型API 38常用Sequential屬性 38Sequential模型方法 38
.1 compile 38fit 39evaluate 40predict 41train_on_batch 416 test_on_batch 41predict_on_batch 428 fit_generator 42evaluate_generator 430 predict_generator 441 getjayer 44\o"CurrentDocument"函數(shù)式API 46Model 類API 46Model的實用屬性 46Model類模型方法 46.1 compile 46fit 47evaluate 48predict 49train_on_batch 49test_on_batch 50predict_on_batch 50fit_generator 519 evaluate_generator 520 predict_generator 531 getjayer 54\o"CurrentDocument"5關于Keras網(wǎng)絡層 55\o"CurrentDocument"關于Keras層 55核心、網(wǎng)2各層 56Dense[source] 56Activation[source] 57Dropout[source] 57Flatten[source] 57Input[source] 58Reshape[source] 59Permute[source] 59RepeatVector[source] 60Lambda[source] 60ActivityRegularization[source] 61Masking[source] 62\o"CurrentDocument"卷積層Convolutional 63ConvlD[source] 63Conv2D[source] 64SeparableConv2D[source] 65Conv2DTranspose[source] 67Conv3D[source] 68CroppiiiglD[source] 69Cropping2D[source] 70Croppmg3D[source] 71UpSamplinglD[source] . 72UpSampling2D[source] 72UpSampling3D[source] 73ZeroPaddinglD[source] 73ZeroPadding2D[source] 74ZeroPadding3D[source] 75\o"CurrentDocument"*也化層Pooling 76MaxPoolinglD[source] 76MaxPooling2D[source] 76MaxPooling3D[source] 77AveragePooling1D[source] 77AveragePooling2D[source] 78AveragePooling3D[source] 79GlobalMaxPoolinglD[source] 79GlobalAveragePoolinglD[source] 80GlobalMaxPooling2D[source] 80GlobalAx^eragePooling2D[source] 80\o"CurrentDocument"局部連接層Locally-connected 82LocallyConnectedlD[source] 82LocallyConnected2D[source] 83\o"CurrentDocument"循環(huán)層Recurrent 85RNN[source] 85SimpleRNN[source] 87GRU[source] 88LSTM[source] 89ConvLSTM2D[source] 91566 SimpleRNNCell[source] 93GRUCell[source] 94LSTMCell[source] 94StackedRNNCells[source] 955610 CuDNNGRU[source] 96CuDNNLSTM[source] 97\o"CurrentDocument"嵌入層 Embedding 98Embedding[source] 98\o"CurrentDocument"融合層 Merge 99Add[source] 99Subtract[source] 99Multiply[source] * 100584 Average[source] 100Maximum[source] 100Concatenate[source] 100Dot[source] 100add 101subtract 101multiply 102average 102maximum 102concatenate 103dot 103\o"CurrentDocument"高級激活層AdvancedActivations 104LeakyReLU[source] 104PReLU[source] 104593 ELU[source] 105594 ThresholdedReLU[source] 105Softmax[source] 105\o"CurrentDocument"標準化層Normalization 107BatchNormalization[source] 107\o"CurrentDocument"噪聲層 Noise 108GaussiaiiNoise[source] 108GaussianDropout[source] 108AlphaDropout[source] 109\o"CurrentDocument"層封裝器wrappers 110TimeDistributed[source] 110Bidirectional[source] 110編寫你自己的Keras層 1126數(shù)據(jù)預處理 113序列預處理 113pad_sequences 113skipgrams 113make_sampling_table 114文本預處理 115text_to_word_sequence 115one_hot 115hashing_trick 116Tbkenizer 116圖像預處理 118ImageDataGenerator 118\o"CurrentDocument"7 損失函數(shù)Losses 124損失函數(shù)的使用 124可用損失函數(shù) 124mean_squared_error 124mean_absolute_error 124mean_absolute_percentage_error 124mean_squared_logarithmic_error 124squared_hinge 124hinge 124categorical_hinge 125logcosh 125categorical_crossentropy 125sparse_categorical_crossentropy 125binary_crossentropy 125kullback_leibler_divergence 125poisson 125cosine_proximity 125\o"CurrentDocument"8評估標準Metrics 127評價函數(shù)的用法 127參數(shù) 127返回值 127可使用的評價函數(shù) 127binary.accuracy 127categorical_accuracy 127sparse_categorical_accuracy 127top_k_categorical_accuracy 127sparse_top_k_categorical_accuracy 128自定義評價函數(shù) 128\o"CurrentDocument"優(yōu)化器Optimizers 129優(yōu)化器的用法 129Keras優(yōu)化器的公共參數(shù) 129SGD[source] 129RMSprop[source] 130Adagrad[source] 130Adadelta[source] 131Adam[source] 131Adamax[source] 131Nadam[source] 132TFOptimizer[source] 132\o"CurrentDocument"激活函數(shù)Activations 133激活函數(shù)的用法 133預定義激活函數(shù) 133softmax 133elu 133selu 134softplus 134softsign 134relu 134tanh 134sigmoid 134hard_sigmoid 134linear 134高級激活函數(shù) 135\o"CurrentDocument"回調(diào)函數(shù)Callbacks 136回調(diào)函數(shù)使用 136Callback[source] 136BaseLogger[source] 136TerminateOnNaN[source] 136ProgbarLogger[source] 136History[source] 137ModelCheckpoint[source] 137EarlyStopping[source] 138RemoteMonitor[source] 138LeamingRateScheduler[source] 138TensorBoard [source] 139ReduceLROnPlateau[source] 139CSVLogger[source] 140LambdaCallback [source] 140創(chuàng)建一個回調(diào)函數(shù) 142例:記錄損失歷史 142例:模型檢查點 142\o"CurrentDocument"12常用數(shù)據(jù)集Datasets 1441CIFAR10小圖像分類數(shù)據(jù)集 1442CIFAR100小圖像分類數(shù)據(jù)集 1443IMDB電影評論情感分類數(shù)據(jù)集 1444路透社新聞主題分類 1455MNIST手寫字符數(shù)據(jù)集 146\o"CurrentDocument"6Fashion-MNIST時尚物品數(shù)據(jù)集 1467Boston房價回歸數(shù)據(jù)集 147\o"CurrentDocument"預訓練模型Applications 148可用的模型 148圖像分類模型的示例代碼 148使用ResNet50進行ImageNet分類 148使用VGG16提取特征 149從VGG19的任意中間層中抽取特征 149在新類上微調(diào)InceptionV3 150通過自定義輸入tensor構建InceptionV3 151模型概覽 152Xception 152VGG16 153VGG19 154ResNet50 155InceptionV3 155InceptionResNetV2 156MobileNet 157DenseNet 158NASNet 159\o"CurrentDocument"后端Backend 161什么是「后端」? 161從一個后端切換到另一個后端 161\o"CurrentDocument"keras.json詳細配置 161使用抽象Keras后端編寫新代碼 162后端函數(shù) 163\o"CurrentDocument"初始化Initializers 216初始化器的用法 216可用的初始化器 216Initializer[source] 216Zeros[source] 216Ones[source] 216Constant[source] 216RandomNormal[source] 217RandomUniform[source] 217TruncatedNormal[source] 217VarianceScaling[source] 217Orthogonal[source] 218Identity[source] 218lecun_uniform 218glorot_normal 219glorot.uniforin 219he_normal 220lecun_normal 220he_uniform 220使用自定義初始化器 221\o"CurrentDocument"正則化Regularizers 222正規(guī)化的使用 222例子 222可用的懲罰 222開發(fā)新的正則化器 222\o"CurrentDocument"約束 Constraints 223約束使用 223可用的約束 223\o"CurrentDocument"可視化Visualization 224\o"CurrentDocument"Scikit-learnAPI 225\o"CurrentDocument"20工具 226\o"CurrentDocument"CustomObjectScope[source] 226\o"CurrentDocument"HDF5Matrix[source] 226\o"CurrentDocument"Sequence[source] 226\o"CurrentDocument"to_categorical 227\o"CurrentDocument"normalize 228\o"CurrentDocument"get_file 228\o"CurrentDocument"print_summary 229\o"CurrentDocument"plot_model 229\o"CurrentDocument"multi_gpu_model 229\o"CurrentDocument"21貢獻 232\o"CurrentDocument"關于GithubIssues和PullRequests 232漏洞報告 232請求新功能 232請求貢獻代碼 233\o"CurrentDocument"PullRequests合并請求 233添加新的樣例 234Keras:基于Python的深度學習庫你恰好發(fā)現(xiàn)了KerasKeras是一個用Python編寫的高級神經(jīng)網(wǎng)絡API,它能夠以TensorFlow,CNTK,或者Theano作為后端運行。Keras的開發(fā)重點是支持快速的實驗。能夠以最小的時延把你的想法轉(zhuǎn)換為實驗結果,是做好斫究的關鍵。如果你在以下情況下需要深度學習庫,請使用Keras:允許簡單而快速的原型設計(由于用戶友好,高度模塊化,可擴展性)。同時支持卷積神經(jīng)網(wǎng)絡和循環(huán)神經(jīng)網(wǎng)絡,以及兩者的組合。在CPU和GPU上無縫運行。查看文檔,請訪問Keras.iooKeras兼容的Python版本:Python2.7-3.6。指導原則用戶友好。Keras是為人類而不是為機器設計的API。它把用戶體驗放在首要和中心位置。Keras遵循減少認知困難的最佳實踐:它提供一致且簡單的API,將常見用例所需的用戶操作數(shù)量降至最低,并且在用戶錯誤時提供清晰和可操作的反饋。模塊化。模型被理解為由獨立的、完全可配置的模塊構成的序列或圖。這些模塊可以以盡可能少的限制組裝在一起。特別是神經(jīng)網(wǎng)絡層、損失函數(shù)、優(yōu)化器、初始化方法、激活函數(shù)、正則化方法,它們都是可以結合起來構建新模型的模塊。易擴展性。新的模塊是很容易添加的(作為新的類和函數(shù)),現(xiàn)有的模塊已經(jīng)提供了充足的示例。由于能夠輕松地創(chuàng)建可以提高表現(xiàn)力的新模塊,Keras更加適合高級研究?;赑ython實現(xiàn)。Keras沒有特定格式的單獨配置文件。模型定義在Python代碼中,這些代碼緊湊,易于調(diào)試,并且易于擴展??焖匍_始:30秒上手KerasKeras的核心數(shù)據(jù)結構是model,一種組織網(wǎng)絡層的方式。最簡單的模型是Sequential順序模型,它是由多個網(wǎng)絡層線性堆疊的棧。對于更復雜的結構,你應該使用Keras函數(shù)式API,它允許構建任意的神經(jīng)網(wǎng)絡圖。Sequential順序模型如下所示:fromkeras.modelsimportSequentialmodel=Sequential()可以簡單地使用.add()來堆疊模型:fromkeras.layersimportDensemodel.add(Dense(units=64,activation=*relu',input_dim=100))model.add(Dense(units=10,activation=*softmax'))在完成了模型的構建后,可以使用.compile()來配置學習過程:pile(loss='categorical_crossentropy',optimizer='sgd',metrics=['accuracy'])如果需要,你還可以進一步地配置你的優(yōu)化器。Keras的核心原則是使事情變得相當簡單,同時又允許用戶在需要的時候能夠進行完全的控制(終極的控制是源代碼的易擴展性)。pile(loss=keras.losses.categorical-crossentropy,optimizer=keras.optimizers.SGD(lr=0.01,momentum=0.9,nesterov=True))現(xiàn)在,你可以批量地在訓練數(shù)據(jù)上進行迭代了:#x_train和y_train是Numpy數(shù)組一就像冏Selk/±-LearnAPI中一樣。model.fit(x_train,y_train,epochs=5,batch_size=32)或者,你可以手動地將批次的數(shù)據(jù)提供給模型:model.train_on_batch(x_batch,y_batch)只需一行代碼就能評估模型性能:loss_and_metrics=model.evaluate(x_test,y_test,batch_size=128)或者對新的數(shù)據(jù)生成預測:classes=model.predict(x_test,batch_size=128)構建一個問答系統(tǒng),一個圖像分類模型,一個神經(jīng)圖靈機,或者其他的任何模型,就是這么的快。深度學習背后的思想很簡單,那么它們的實現(xiàn)又何必要那么痛苦呢?有關Keras更深入的教程,請查看:?開始使用Sequential項序模型?開始使用函數(shù)式API在代碼倉庫的examples目錄中,你會找到更多高級模型:基于記憶網(wǎng)絡的問答系統(tǒng)、基于棧式LSTM的文本生成等等。安裝指引在安裝Keras之前,請安裝以下后端引擎之一:TensorFlow,Theano,或者CNTK。我們推薦TensorFlow后端。TensorFlow安裝指引。Theano安裝指引。CNTK安裝指引。你也可以考慮安裝以下可選依賴:cuDNN(如果你計劃在GPU上運行Keras,建議安裝)。HDF5和h5py(如果你需要將Keras模型保存到磁盤,則需要這些)。,graphviz和pydot(用于可視化工具繪制模型圖)。然后你就可以安裝Keras本身了。有兩種方法安裝Keras:使用PyPI安裝Keras(推薦):sudopipinstallkeras如果你使用virtualenv虛擬環(huán)境,你可以避免使用sudo:pipinstallkeras或者:使用Github源碼安裝Keras:首先,使用git來克隆Keras:gitclone/keras-team/keras.git然后,cd到Keras目錄并且運行安裝命令:cdkerassudopythonsetup.pyinstall使用TensorFlow以外的后端默認情況下,Keras將使用TensorFlow作為其張量操作庫。請跟隨這些指引來配置其他Keras后端。技術支持你可以提出問題并參與開發(fā)討論:KerasGooglegroupoKerasSlackchannelo使用這個鏈接向該頻道請求邀請函。你也可以在Githubissues中張貼漏洞報告和新功能請求(僅限于此)。注意請先閱讀規(guī)范文檔。為什么取名為Keras?Keras(展pa0在希臘語中意為號角。它來自古希臘和拉丁文學中的一個文學形象,首先出現(xiàn)于《奧德賽》中,夢神(Oneiroi,singularOneiros)從這兩類人中分離出來:那些用虛幻的景象欺騙人類,通過象牙之門抵達地球之人,以及那些宣告未來即將到來,通過號角之門抵達之人。它類似于文字寓意,KCpaq(號角)/Kpodvs(履行),以及存入的aq像牙)/eM(pcdpo)jai(欺騙)。Keras最初是作為ONEIROS項目(開放式神經(jīng)電子智能機器人操作系統(tǒng))研究工作的一部分而開發(fā)的?!癘neiroi超出了我們的理解-誰能確定它們講述了什么故事?并不是所有人都能找至h那里有兩扇門,就是通往短暫的Oneiroi的通道;一個是用號角制造的,一個是用象牙制造的。穿過尖銳的象牙的Onei也是詭計多端的,他們帶有一些不會實現(xiàn)的信息;那些穿過拋光的喇叭出來的人背后具有真理,對于看到他們的人來說是完成的?!癏omer,Odyssey19.562ff(Shewringtranslation).2為什么選擇Keras?在如今無數(shù)深度學習框架中,為什么要使用Keras而非其他?以下是Keras與現(xiàn)有替代品的一些比較。Keras優(yōu)先考慮開發(fā)人員的經(jīng)驗Keras是為人類而非機器設計的API。Keras遵循減少認知困難的最佳實踐:它提供一致且簡單的API,它將常見用例所需的用戶操作數(shù)量降至最低,并且在用戶錯誤時提供清晰和可操作的反饋。這使Keras易于學習和使用。作為Keras用戶,你的工作效率更高,能夠比競爭對手更快地嘗試更多創(chuàng)意,從而幫助你匾得機器學習競賽。這種易用性并不以降低靈活性為代價:因為Keras與底層深度學習語言(特別是Tensor-Flow)集成在一起,所以它可以讓你實現(xiàn)任何你可以用基礎語言編寫的東西。特別是,tf.keras作為KerasAPI可以與TensorFlow工作流無縫集成。Keras被工業(yè)界和學術界廣泛采用截至2017年11月,擁有超過200,000個人用戶的Keras是除TensorFlow外被工業(yè)界和學術界最多使用的深度學習框架(且Keras往往與TensorFlow結合使用你已經(jīng)在不斷與Keras構建的功能進行交互-它正在被Netflix,Uber,Yelp,Instacart,Zocdoc,Square等其他機構使用。它尤其受以深度學習作為產(chǎn)品核心的創(chuàng)業(yè)公司的歡迎。Keras也大受深度學習研究者的喜愛。在上傳到學術論文網(wǎng)站arX的論文中被提及的次數(shù)位居第二:Keras還被大型科研機構的研究者所采用,特別是CERN和NASA。Keras可以輕松將模型轉(zhuǎn)化為產(chǎn)品與任何其他深度學習框架相比,你的Keras模型可以輕松部署在更廣泛的平臺上:在iOS上,通過Apple'sCoreML(蘋果為Keras提供官方支持)。在安卓上,通過TensorFlowAndroidruntime,例如:NotHotdogapp?.在瀏覽器上,通過GPU加速的JavaScript運行時,例如:Keras.js和WebDNN。在GoogleCloud上,通過TensorFlow-Serving。[在Python網(wǎng)頁應用后端(比如Flaskapp)中](https://blog.keras.io/building-a-simple-keras-deep-learning-rest-api.html)。在JVM,通過SkyMind提供的DL4J模型導入。在RaspberryPi樹莓派上。Keras支持多個后端引擎,并且不會將你鎖定到一個生態(tài)系統(tǒng)中你的Keras模型可以基于不同的深度學習后端開發(fā)。重要的是,任何僅利用內(nèi)置層構建的Keras模型,都可以在所有這些后端中移植:用一種后端訓練模型,再將它載入另一種后端中(比如為了發(fā)布)。支持的后端有:谷歌的TensorFlow后端微軟的CNTK后端Theano后端亞馬遜也正在為Keras開發(fā)MXNet后端。如此一來,你的Keras模型可以在CPU之外的不同硬件平臺上訓練:.NVIDIAGPUoGoogleTPU,通過TensorFlow后端和GoogleCloud。OpenGL支持的GPU,比如AMD,通過PlaidMLKeras后端。Keras擁有強大的多GPU和分布式訓練支持Keras內(nèi)置對多GPU數(shù)據(jù)并行的支持。優(yōu)步的Horovod對Keras模型有第一流的支持。Keras模型可以被轉(zhuǎn)換為TensorFlow估計器并在GoogleCloud的GPU集群上訓練。Keras可以在Spark(通過CERN的Dist-Keras)和Elephas上運行。Keras的發(fā)展得到深度學習生態(tài)系統(tǒng)中的關鍵公司的支持Keras的開發(fā)主要由谷歌支持,KerasAPI以tf.keras的形式包裝在TensorFlow中。此外,微軟維護著Keras的CNTK后端。亞馬遜AWS正在開發(fā)MXNet支持。其他提供支持的公司包括NVIDIA、優(yōu)步、蘋果(通過CoreML)等。3快速開始Sequential順序模型指引開始使用Keras順序(Sequential)模型順序模型是多個網(wǎng)絡層的線性堆疊。你可以通過將層的列表傳遞給Sequential的構造函數(shù),來創(chuàng)建一個Sequential模型:fromkeras.modelsimportSequentialfromkeras.layersimportDense,Activationmodel=Sequential([Dense(32,input_shape=(784,)),Activation('relu*),Dense(lO),Activation('softmax*),])也可以使用.add()方法將各層添加到模型中:model=Sequential()model.add(Dense(32,input_dim=784))model.add(Activation(1relu'))指定輸入數(shù)據(jù)的尺寸模型需要知道它所期望的輸入的尺寸。出于這個原因,順序模型中的第一層(只有第一層,因為下面的層可以自動地推斷尺寸)需要接收關于其輸入尺寸的信息。有幾種方法來做到這一點:傳遞一個input,shape參數(shù)給第一層。它是一個表示尺寸的元組(一個整數(shù)或None的元組,其中None表示可能為任何正整數(shù))。在input_shape中不包含數(shù)據(jù)的batch大小。某些2D層,例如Dense,支持通過參數(shù)input_dim指定輸入尺寸,某些3D時序?qū)又С謎nput_dim和input_length參數(shù)。如果你需要為你的輸入指定一個固定的batch大小(這對statefulRNNs很有用),你可以傳遞一個batch_size參數(shù)給一個層。如果你同時將batch_size=32和input_shape=(6,8)傳遞給一個層,那么每一批輸入的尺寸就為(32,6,8)o因此,下面的代碼片段是等價的:model=Sequential()model.add(Dense(32,input_shape=(784,)))model=Sequential()model.add(Dense(32,input_dim=784))編譯在訓練模型之前,您需要配置學習過程,這是通過compile方法完成的。它接收三個參數(shù):優(yōu)化器optimizer。它可以是現(xiàn)有優(yōu)化器的字符串標識符,如rmsprop或adagrad,也可以是Optimizer類的實例。詳見:optimizers。損失函數(shù)loss,模型試圖最小化的目標函數(shù)。它可以是現(xiàn)有損失函數(shù)的字符串標識符,如categorical_crossentropy或mse,也可以是一個目標函數(shù)。詳見:losses。評估標準metrics。對于任何分類問題,你都希望將其設置為metrics=[*accuracy*]o評估標準可以是現(xiàn)有的標準的字符串標識符,也可以是自定義的評估標準函數(shù)。多分類問題pile(optimizer=1rmsprop',loss=1categorical_crossentropy',metrics=['accuracy'])二分類問題pile(optimizer='rmsprop',loss='binary-crossentropy',metrics=[1accuracy1])均方誤差回歸問題pile(optimizer='rmsprop',loss=*mse1)自定義評估標準函數(shù)importkeras.backendasKdefmean_pred(y_true,y_pred):returnK.mean(y_pred)pile(optimizer='rmsprop',loss=1binary_crossentropy1,metrics=['accuracy',mean_pred])3.1.4訓練Keras模型在輸入數(shù)據(jù)和標簽的Numpy矩陣上進行訓練。為了訓練一個模型,你通常會使用fit函數(shù)。文檔詳見此處。#對于具有2個類的單輸入模型(二進制分類):model=Sequential()model.add(Dense(32,activation='reluCIFAR10小圖片分類:具有實時數(shù)據(jù)增強的卷積神經(jīng)網(wǎng)絡(CNN)CIFAR10小圖片分類:具有實時數(shù)據(jù)增強的卷積神經(jīng)網(wǎng)絡(CNN)model.add(Dense(1,activation:'sigmoid*))pile(optimizer='rmsprop',loss='binary__crossentropy1,metrics=['accuracy*])生成虛擬數(shù)據(jù)importnumpyasnpdata=np.random.random((1000,100))labels=np?random。randint(2,size=(1000,1))訓練模型,以32個樣本為一個batch進行迭代model.fit(data,labels,epochs=10,batch_size=32)對于具有10個類的單輸入模型(多分類分類)4J ymodel=Sequential()model.add(Dense(32,activation='relu*,input_dim=100))model.add(Dense(10,activation=*softmax1))pile(optimizer='rmsprop',loss='categorical_crossentropy',metrics=[*accuracy1])生成虛擬數(shù)據(jù) 中yimportnumpyasnpdata=np.random.random((1000,100))labels=np.random.rcindint(10,size=(1000,1))將標簽轉(zhuǎn)換為分類居one-hot編碼one_hot_labels=keras.utils.to_categorical(labels,num_classes=10)訓練模型,以32個樣本為一個batch進行迭代model.fit(data,one_hot_labels,epochs=10,batch_size=32)3.1.5例子這里有幾個可以幫助你開始的例子!在examples目錄中,你可以找到真實數(shù)據(jù)集的示例模型:.IMDB電影評論情感分類:基于詞序列的LSTMReuters新聞主題分類:多層感知器(MLP)MNIST手寫數(shù)字分類:MLP和CNN基于LSTM的字符級文本生成.??O基于多層感知器(MLP)的softmax多分類:importkerasfromkeras.modelsimportSequentialfromkeras.layersimportDense,Dropout,Activationfromkeras.optimizersimportSGD生成虛擬數(shù)據(jù)importnumpyasnpx_train=np.random.random((1000,20))y_train=keras.utils.to_categorical(np.random.randint(10,size=(1000,1)),num_classes=10)x_test=np.random.random((100,20))y_test=keras.utils.to_categorical(np.random.randint(10,size=(100,1)),num_classes=10)model=Sequential()Dense(64)是一個具有64個隱藏r押經(jīng)元的全連接層。在第一層必須指定所期望的輸入贏(在這里,是一個20維的向量。0 Zbmodel.add(Dense(64,activation='relu,,input_dim=20))model.add(Dropout(0.5))model.add(Dense(64,activation='relu*))model.add(Dropout(0.5))model.add(Dense(10,activation='softmax1))sgd=SGD(lr=0.01,decay=le-6,momentum=0.9,nesterov=True)pile(loss='categorical_crossentropy',optimizer=sgd,metrics=[*accuracy*])model.fit(x_train,y_train,epochs=20,batch_size=128)score=model.evaluate(x_test,y_test,batch_size=128)基于多層感知器的二分類:importnumpyasnpfromkeras.modelsimportSequentialfromkeras.layersimportDense,Dropout#生成虛擬數(shù)據(jù)x_train=np.random.random((1000,20))y_train=np.random.randint(2,size=(1000,1))x_test=np.random.random((100,20))y_test=np.random.randint(2,size=(100,1))model=Sequential()model.add(Dense(64,input_dim=20,activation='relu1))model.add(Dropout(0.5))model.add(Dense(64,activation='relu'))model.add(Dropout(0.5))model.add(Dense(1,activation=1sigmoid1))pile(loss=1binary_crossentropy,,optimizer='rmsprop,,metrics=['accuracy1])model.fit(x_train,y_train,epochs=20,batch_size=128)score=model.evaluate(x_test,y_test,batch_size=128)類似VGG的卷積神經(jīng)網(wǎng)絡:importnumpyasnpimportkerasfromkeras.modelsimportSequentialfromkeras.layersimportDense,Dropout,Flattenfromkeras.layersimportConv2D,MaxPooling2Dfromkeras.optimizersimportSGD生成虛擬數(shù)據(jù)x_train=np.random.random((100,100,100,3))y_train=keras.utils.to_categorical(np.random.randint(10,size=(100,1)),num_classes=10)x_test=np.random.random((20,100,100,3))
y_test=keras.utils.to_categorical(np.random.randint(10,size=(20,1)),num_classes=10)model=Sequential()輸入:3通道IOOtIOO像素圖像->(100,100,3)張量。使用32個大小為3x3的卷積濾波器。model.add(Conv2D(32,(3,3),activation=*relu',input_shape=(100,100,3)))model.add(Conv2D(32,(3,3),activation=1relu'))model.add(MaxPooling2D(pool_size=(2,2)))model.add(Dropout(0.25))model.add(Conv2D(64,(3,3),activation='relu'))model.add(Conv2D(64,(3,3),activation=1relu*))model.add(MaxPooling2D(pool_size=(2,2)))model.add(Dropout(0.25))model.add(Flatten())model.add(Dense(256,activation='relu'))model.add(Dropout(0.5))model.add(Dense(10,activation=1softmax'))sgd=SGD(lr=0.01,decay=le-6,momentum=0.9,nesterov=True)pile(loss=*categorical-crossentropy',optimizer=sgd)model.fit(x_train,y_train,batch_size=32,epochs=10)score=model.evaluate(x_test,y_test,batch_size=32)基于LSTM的序列分類:fromkeras.modelsimportSequentialfromkeras.modelsimportSequentialfromkeras.layersimportDense,Dropoutfromkeras.layersimportEmbeddingfromkeras.layersimportLSTMmodel=Sequential()model.add(Embedding(max_features,output_dim=256))model.add(LSTM(128))model.add(Dropout(0.5))model.add(Dense(1,activation='sigmoid*))pile(loss=1binary_crossentropy1,
optimizer='rmsprop,,metrics=[1accuracy1])model.fit(x_train,y_train,batch_size=16,epochs=10)score=model.evaluate(x_test,y_test,batch_size=16)基于ID卷積的序列分類:fromkeras.modelsimportSequentialfromkeras.modelsimportSequentialfromkeras.layersimportDenseDropoutfromkeras.layersimportDenseDropoutfromkeras.layersimportEmbeddingfromkeras.layersimportEmbeddingfromkeras.layersimportConvlD,GlobalAveragePoolinglD,MaxPoolinglDmodel=Sequential()fromkeras.layersmodel.add(ConvlD(64,3,activation='relu',input_shape=(seq_length,100)))model.add(ConvlD(64,3,activation=1relu'))model.add(MaxPoolinglD(3))model.add(ConvlD(128,3,activation='relu'))model.add(ConvlD(128,3,activation=1relu'))model.add(GlobalAveragePoolinglD())model.add(Dropout(0.5))model.add(Dense(1,activation='sigmoid1))pile(loss='binary__crossentropy1,optimizer=1rmsprop1,metrics=['accuracy1])model.fit(x_train,y_train,batch_size=16,epochs=10)score=model.evaluate(x_test,y_test,batch_size=16)基于棧式LSTM的序列分類在這個模型中,我們將3個LSTM層疊在一起,使模型能夠?qū)W習更高層次的時間表示。前兩個LSTM返回完整的輸出序列,但最后一個只返回輸出序列的最后一步,從而降低了時間維度(即將輸入序列轉(zhuǎn)換成單個向量)。fromkeras.modelsimportSequentialfromkeras.layersimportLSTM,Denseimportnumpyasnpdata_dim=16timesteps=8
num_classes=10期望輸入數(shù)據(jù)尺寸;(batch_size,timesteps,data_dim)model=Sequential()model.add(LSTM(32,return_sequences=True,input_shape=(timesteps,data_dim)))#返回生度芍32的向童序列model.add(LSTM(32,return_sequences=True))#三回度為32的向量左3.model.add(LSTM(32))#返回;哩度為32的單個向量model.add(Dense(10,activation=*softmax1))pile(loss='categorical_crossentropy',optimizer='rmsprop,,metrics=[1accuracy*])生成虛擬訓練數(shù)據(jù)x_train=np.random.random((1000,timesteps,data_dim))y_train=np.random.random((1000,num_classes))生成虛擬驗證數(shù)據(jù)x_val=np.random.random((100,timesteps,data_dim))y_val=np.random.random((100,num_classes))model.fit(x_train,y_train,batch_size=64,epochs=5,validation_data=(x_val,y_val))帶有狀態(tài)(stateful)的相同的棧式LSTM模型有狀態(tài)的循環(huán)神經(jīng)網(wǎng)絡模型中,在一個batch的樣本處理完成后,其內(nèi)部狀態(tài)(記憶)會被記錄并作為下一個batch的樣本的初始狀態(tài)。這允許處理更長的序列,同時保持計算復雜度的可控性。你可以在FAQ中查找更多關于statefulRNNs的信息。fromkeras.modelsimportSequentialfromkeras.layersimportLSTM,Denseimportnumpyasnpdata_dim=16timesteps=8num_classes=10batchsize32batchsize32期望輸入數(shù)據(jù)尺寸;(batch_size,timesteps,data_dim)請注意,我們必須提供完整的batch_input_shape,因為網(wǎng)絡是有狀態(tài)的。第七批數(shù)據(jù)的第i個樣本是第k-1批數(shù)據(jù)的第i個樣本的后續(xù)。model=Sequential()model.add(LSTM(32,return_sequences=True,stateful=True,batch_input_shape=(batch_size,timesteps,data_dim)))model.add(LSTM(32,return_sequences=True,stateful=True))model.add(LSTM(32,stateful=True))model.add(Dense(10,activation='softmax1))pile(loss=*categorical_crossentropy',optimizer='rmsprop,,metrics=[*accuracy1])生成虛擬訓練數(shù)據(jù)x_train=np.random.random((batch_size*10,timesteps,data_dim))y_train=np.random.random((batch_size*10,num_classes))生成虛擬驗證數(shù)據(jù)x_val=np.random.random((batch_size*3,timesteps,data_dim))y_val=np.random.random((batch_size*3,num_classes))model.fit(x_train,y_train,batch_size=batch_size,epochs=5,shuffle=False,validation_data=(x_val,y_val))3.2函數(shù)式API指弓|開始使用Keras函數(shù)式APIKeras函數(shù)式API是定義復雜模型(如多輸出模型、有向無環(huán)圖,或具有共享層的模型)的方法。這部分文檔假設你已經(jīng)對Sequential順序模型比較熟悉。讓我們先從一些簡單的例子開始。例一:全連接網(wǎng)絡Sequential模型可能是實現(xiàn)這種網(wǎng)絡的一個更好選擇,但這個例子能夠幫助我們進行一些簡單的理解。網(wǎng)絡層的實例是可調(diào)用的,它以張量為參數(shù),并且返回一個張量輸入和輸出均為張量,它們都可以用來定義一個模型(Model)這樣的模型同Keras的Sequential模型一樣,都可以被訓練fromkeras.layersimportInput,Densefromkeras.modelsimportModel這部分返回一個張量inputs=Input(shape=(784,))層的實例是可調(diào)用的,它以張量多參數(shù),并且遮回一個張量x=Dense(64,activation=*relu')(inputs)x=Dense(64,activation=*relu')(x)predictions=Dense(10,activation=1softmax')(x)這部分創(chuàng)建了一個包含蚣層t個1連接層的模型model=Model(inputs=inputs,outputs=predictions)pile(optimizer='rmsprop,,loss='categorical_crossentropy',metrics=['accuracy'])model.fit(data,labels)#開始訓練所有的模型都可調(diào)用,就像網(wǎng)絡層一樣利用函數(shù)式APL可以輕易地重用訓練好的模型:可以將任何模型看作是一個層,然后通過傳遞一個張量來調(diào)用它。注意,在調(diào)用模型時,您不僅重用模型的結構,還重用了它的權重。x=Input(shape=(784,))這是可行的,并且返回上面定義的10-waysoftmaxoy=model(x)這種方式能允許我們快速創(chuàng)建可以處理序列輸入的模型。只需一行代碼,你就將圖像分類模型轉(zhuǎn)換為視頻分類模型。fromkeras.layersimportTimeDistributed輸入張量是2。個時間步的序列,每一個時間為一個784維的向量input_sequences=Input(shape=(20,784))這部分將我們之前定義的模型應用于輸入序列中的每個時間步。之前定義的模型的輸出是一個10-ujaysoftmax,因而下面的層的輸出將是維度為10的2。個向量的序列。processed_sequences=TimeDistributed(model)(input_sequences)多輸入多輸出模型以下是函數(shù)式API的一個很好的例子:具有多個輸入和輸出的模型。函數(shù)式API使處理大量交織的數(shù)據(jù)流變得容易。來考慮下面的模型。我們試圖預測Twitter上的一條新聞標題有多少轉(zhuǎn)發(fā)和點贊數(shù)。模型的主要輸入將是新聞標題本身,即一系列詞語,但是為了增添趣味,我們的模型還添加了其他的輔助輸入來接收額外的數(shù)據(jù),例如新聞標題的發(fā)布的時間等。該模型也將通過兩個損失函數(shù)進行監(jiān)督學習。較早地在模型中使用主損失函數(shù),是深度學習模型的一個良好正則方法。模型結構如下圖所示:讓我們用函數(shù)式API來實現(xiàn)它。主要輸入接收新聞標題本身,即一個整數(shù)序列(每個整數(shù)編碼一個詞)。這些整數(shù)在1到10,000之間(10,000個詞的詞匯表),且序列長度為100個詞。fromkeras.layersimportInput,Embedding,LSTM,Densefromkeras.modelsimportModel標題輸入:接收一個應有飛0星全數(shù)的序列,每個整數(shù)在1到10000之間。注意我們可以通過率;%ne?參數(shù)來命名任何層。main_input=Input(shape=(100,),dtype='int32',name='main_input')Embedding層將輸入序列編碼為一個稠密向量的序列,每個向量維度為512.x=Embedding(output_dim=512,input_dim=10000,input_length=100)(main_input)LSTM層把向量序列轉(zhuǎn)換成單個向量,它包含整個序列的上下文信息lstm_out=LSTM(32)(x)在這里,我們插入輔助損失,使得即使在模型主損失很高的情況下,LSTM層和Embedding層都能被平穩(wěn)地訓練。auxi1iary_output=Dense(1,activation=,sigmoid',name='aux_output*)(lstm_out)此時,我們將輔助輸入數(shù)據(jù)與LSTM層的輸出連接起來,輸入到模型中:auxiliary_input=Input(shape=(5,),name='aux_input*)x=keras.layers.concatenate([lstm_out,auxiliary_input])堆疊多個全連接網(wǎng)絡層x=Dense(64,activation=1relu')(x)x=Dense(64,activation=?relu')(x)x=Dense(64,activation=1relu')(x)最后添加主要的邏輯回歸層main_output=Dense(1,activation=1sigmoid',name=*main_output')(x)然后定義一個具有兩個輸入和兩個輸出的模型:model=Model(inputs=[main__input,auxiliary_input],outputs=[main_output,auxiliary_output]:現(xiàn)在編譯模型,并給輔助損失分配一個0.2的權重。如果要為不同的輸出指定不同的loss_weights或loss,可以使用列表或字典。在這里,我們給loss參數(shù)傳遞單個損失函數(shù),這個損失將用于所有的輸出。pile(optimizer:1rmsprop',loss='binary_crossentropy',loss_weights=[1.,0.2])我們可以通過傳遞輸入數(shù)組和目標數(shù)組的列表來訓練模型:model.fit([headline_data,additional_data],[labels,labels],epochs=50,batch_size=32)由于輸入和輸出均被命名了(在定義時傳遞了一個name參數(shù)),我們也可以通過以下方式編譯模型:pile(optimizer='rmsprop',loss={'main__output1:1binary-crossentropy',1aux_output':1binary_crossentropy'},loss_weights={'main_output1:1.,'aux_output':0.2})然后使用以下方式訓練:model.fit({'main_input*:headline_data,1aux_input*:additional_data},{1main_output':labels,1aux_output1:labels},epochs=50,batch_size=32)共享網(wǎng)絡層函數(shù)式API的另一個用途是使用共享網(wǎng)絡層的模型。我們來看看共享層。來考慮推特推文數(shù)據(jù)集。我們想要建立一個模型來分辨兩條推文是否來自同一個人(例如,通過推文的相似性來對用戶進行比較)。實現(xiàn)這個目標的一種方法是建立一個模型,將兩條推文編碼成兩個向量,連接向量,然后添加邏輯回歸層;這將輸出兩條推文來自同一作者的概率。模型將接收一對對正負表示的推特數(shù)據(jù)。由于這個問題是對稱的,編碼第一條推文的機制應該被完全重用來編碼第二條推文。這里我們使用一個共享的LSTM層來編碼推文。讓我們使用函數(shù)式API來構建它。首先我們將一條推特轉(zhuǎn)換為一個尺寸為(140,256)的矩陣,即每條推特140字符,每個字符為256維的。ne-hot編碼(取256個常用字符)。importkerasfromkeras.layersimportInput,LSTM,Densefromkeras.modelsimportModeltweet_a=Input(shape=(140,256))tweet_b=Input(shape=(140,256))要在不同的輸入上共享同一個層,只需實例化該層一次,然后根據(jù)需要傳入你想要的輸入即可:這一層可以輸入一個矩陣,并返回一個64維的向量shared_lstm=LSTM(64)當我們重用相同的圖層實例蹩,晦贏重也會被重用(它其實就是同一層)encoded_a=shared_lstm(tweet_a)encoded_b=sha
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度汽車美容店員工勞動合同變更與調(diào)整合同模板
- 二零二五年度企業(yè)年會現(xiàn)場錄制與視頻剪輯合同
- 2025年度解除勞動合同提前通知法律風險規(guī)避合同
- 二零二五年度社區(qū)門衛(wèi)值班人員雇傭合同
- 2025年度餐飲行業(yè)員工培訓與晉升勞動合同
- 南京理工大學《二外日語IV》2023-2024學年第一學期期末試卷
- 南京傳媒學院《建筑動態(tài)表現(xiàn)》2023-2024學年第一學期期末試卷
- 南充文化旅游職業(yè)學院《BM建模技術》2023-2024學年第一學期期末試卷
- 南昌大學《小學語文教學綜合訓練》2023-2024學年第一學期期末試卷
- 明達職業(yè)技術學院《計算社會科學》2023-2024學年第一學期期末試卷
- 2025年下半年貴州高速公路集團限公司統(tǒng)一公開招聘119人高頻重點提升(共500題)附帶答案詳解
- 資產(chǎn)評估服務房屋征收項目測繪實施方案
- 2025年經(jīng)濟形勢會議講話報告
- 北師大版小學三年級上冊數(shù)學第五單元《周長》測試卷(含答案)
- 國家安全責任制落實情況報告3篇
- 2024年度順豐快遞冷鏈物流服務合同3篇
- 六年級下冊【默寫表】(牛津上海版、深圳版)(漢譯英)
- 合同簽訂培訓
- 電工基礎知識培訓課程
- 鐵路基礎知識題庫單選題100道及答案解析
- 金融AI:顛覆與重塑-深化理解AI在金融行業(yè)的實踐與挑戰(zhàn)
評論
0/150
提交評論