1. 如何在R語言中進行神經網路模型的建立
不能發鏈接,所以我復制過來了。
#載入程序和數據
library(RSNNS)
data(iris)
#將數據順序打亂
iris <- iris[sample(1:nrow(iris),length(1:nrow(iris))),1:ncol(iris)]
#定義網路輸入
irisValues <- iris[,1:4]
#定義網路輸出,並將數據進行格式轉換
irisTargets <- decodeClassLabels(iris[,5])
#從中劃分出訓練樣本和檢驗樣本
iris <- splitForTrainingAndTest(irisValues, irisTargets, ratio=0.15)
#數據標准化
iris <- normTrainingAndTestSet(iris)
#利用mlp命令執行前饋反向傳播神經網路演算法
model <- mlp(iris$inputsTrain, iris$targetsTrain, size=5, learnFunc="Quickprop", learnFuncParams=c(0.1, 2.0, 0.0001, 0.1),maxit=100, inputsTest=iris$inputsTest, targetsTest=iris$targetsTest)
#利用上面建立的模型進行預測
predictions <- predict(model,iris$inputsTest)
#生成混淆矩陣,觀察預測精度
confusionMatrix(iris$targetsTest,predictions)
#結果如下:
# predictions
#targets 1 2 3
# 1 8 0 0
# 2 0 4 0
# 3 0 1 10
2. 如何用keras實現多變數輸入神經網路
要點如下:
1、神經網路基本結構,應該是輸入層-若干個隱含層-輸出層。
2、輸入層應該有7個輸入變數。
3、隱含層層數自定,但每層要超過7個神經元。
4、輸出層可以用softmax之類的函數,將隱含層的輸出歸並成一個。
代碼請自行編寫。
3. keras怎麼可視化神經網路的結構
可以用summary,也可以用plot_model 畫出更直觀的結構圖。
4. 如何從零使用 Keras + TensorFlow 開發一個復雜深度學習模型
這篇文章介紹的是關於並行深度神經網路的設計。在今年發布的兩個機器學習項目中,cxxnet是最精彩的一個。因為它包含了我們團隊可以發揮到的機器學習和系統的各個方面的極致:除了前沿的深度學習之外,它的兩個獨到特點也是讓我們在設計實現中最為享受的1)靈活的公式支持和極致的C++模板編程;深度神經網路的實現大致分兩類:以python為主的編程效率派和以c++為核心的為代表的追逐性能派。前者支持直接tensor的計算,而後者往往需要給每個神經網路的層和更新公式編寫獨立的cudakernel。編程效率派認為機器學習程序員應該是寫公式來達到代碼最大的可讀性和易改寫性。而很多以C++為核心的代碼之所以沒有支持非常靈活的張量計算,是因為因為運算符重載和臨時空間的分配會帶來效率的降低。cxxnet的核心mshadow在這兩者之間做了一個平衡。使得我們在不損失效率的前提下可以通過模板編程技術允許開發者編寫和matlab/numpy類似的代碼,並且在編譯時自動成優化的kernel。其背後的expressiontemplate技術是我最喜歡的c++trick之一。非常值得最求效率抽象和優美的同學了解。因為採用了mshadow作為核心,直接導致cxxnet的各種實現可以非常簡單可讀,編寫一份代碼就可以在GPU和CPU上面跑。使得其在代碼簡潔和可擴展上更加容易。2)通用的並行參數共享和更新方案多卡和多機計算一直是大規模機器學習中一個讓人興奮的話題。提到神經網路並行,最讓我頭疼的是可以選擇的方案很多,而都涉及到不同的hack。單機多卡到底是用P2P,還是拷貝到內存,是用stream開始開多線程。分布式到底是用parameterserver,MPI還是自己寫一個框架。可以選擇的方法很多。設計出一個分布式的代碼不難,困難的是如何讓並行的介面自然的獨立出來,使得其不會影響其它部分的實現。經過不斷地考慮,最終我決定採用了mshadow-ps這樣一個統一的參數共享介面。簡單的說,mshadow-ps是一個GPU的非同步parameterserver介面(應該也是目前為止唯一一個,因為GPU線程模型和CPU不同,原有的的ps庫並不能直接用於GPU)。非同步通信對於神經網路的更新非常重要。在backprop演算法中,我們很早就可以獲得梯度並且進行梯度同步,而只有到下一次forward到對應層的時候才會需要這個weight。我和limu合作設計了ps風格的三個介面來解決這樣的同步問題,Push/PullReq和Pullwait。當獲backprop得梯度的時候直接調用push把梯度發送出去,並且調用pullreq請求結果。Push和Pullreq都是非同步操作,背後會有單獨的線程同時完成數據拷貝同步,以及拷回的操作。而當我們需要weight之前在調用Pullwait來等待可能沒有完成的操作。這樣簡單的三個介面,使得我們可以經過很少的改動就可以設計出多卡和分布式的神經網路來,並且在調用這些介面的時候完全不需要關系同步的實現是什麼。值得一提的是,這樣的編程模式把多GPU,分布式以及各個通信框架直接結合起來。mshadow-ps支持單機多卡的GPUPS,以及基於parameter-server的分布式PS實現。同樣的也可以很容易MPI來支持多機通信。使得一個統一的介面,可以完成從單機多卡到分布式各種後端實現的支持。並且因為高效的非同步通信,使得我們可以在alexnet上面達到linearspeep(註:並行的難度在於計算和通信的時間比,weight少更加復雜的網路反而更加容易線性加速,而alexnet是非常困難的例子)。經過團隊裡面大家不斷地努力,cxxnet的V2終於可以和大家見面了。除了上述介紹的技術亮點之外,還有各種好玩的特性。現在把特點總結如下:1.輕量而齊全的框架:我們盡力維持最小的依賴庫實現最多的功能。推薦環境下僅需要CUDA,OpenCV,MKL或BLAS即可編譯。2.強大的統一的並行計算介面:基於mshadow-ps的並行計算介面採用了一份代碼解決了多GPU,多機的非同步同步。同步和計算重疊,在多份測試中均可以得到線性加速比。3.易於擴展的代碼結構:cxxnet計算核心由mshadow提供。Mshadow使用戶可以編寫numpy/matlab風格的代碼,但仍具備手動優化cuda代碼的靈活性。CPU和GPU共享同一份代碼,在編譯期間通過模板自動翻譯成CUDA/MKL調用。另外一些特性包括:4.CuDNN支持:Nvidia原生卷積支持,可加速計算30%!5.及時更新的最新技術:我們將及時跟進學術界的動態,例如現在已經支持MSRA的ParametricRelu和Google的BatchNormalization6.Caffe模型轉換:支持將訓練好的Caffe模型直接轉化為cxxnet模型(本周內上線!)7.方便的語言介面:在Python中直接進行訓練,方便可視化。Matlab也將很快提供我們相信可以通過最簡潔清晰的代碼來完成高效的C++深度神經網路實現。我們也歡迎對於系統和機器學習有興趣的同學加入到項目中來
5. 如何在基於tensorflow的深度學習框架keras中指定GPU
Keras 被認為是構建神經網路的未來,以下是一些它流行的原因:
輕量級和快速開發:Keras 的目的是在消除樣板代碼。幾行 Keras 代碼就能比原生的 TensorFlow 代碼實現更多的功能。你也可以很輕松的實現 CNN 和 RNN,並且讓它們運行在 CPU 或者 GPU 上面。
框架的「贏者」:Keras 是一個API,運行在別的深度學習框架上面。這個框架可以是 TensorFlow 或者 Theano。Microsoft 也計劃讓 CNTK 作為 Keras 的一個後端。目前,神經網路框架世界是非常分散的,並且發展非常快。
6. keras中accuracy是怎麼算出來的,為什麼loss下降,accuracy不變甚至減小
accuracy是在test的數據上得到的,train和test的數據的分開的。
loss下降而accuracy不變說明已經過擬合了,可以考慮使用BN、Dropout之類的方法消除過擬合的影響,或者修改網路結構。
7. 關於Python如何用Keras訓練神經網路更穩定的問題
Python由荷蘭數學和計算機科學研究學會的Guido van Rossum 於1990 年代初設計,作為一門叫做ABC語言的替代品。Python提供了高效的高級數據結構,還能簡單有效地面向對象編程。
8. python關於如何進行Keras神經網路可視化的
是可視化網路結構嗎?
可以使用summary函數 也可是使用下面的代碼
fromkeras.utilsimportplot_model
plot_model(model,to_file='model.png',show_shapes=True)
如果是可視化網路所學習到的東西的話 可以去這里找找思路網頁鏈接
9. 如何用Keras自定義層
lambda層是沒有參數學習的功能的,你要做的就是將每張圖片上像素的最大值和最小值的函數包裝進lambda層。你的輸入是(batch,224,224,3),寫一個在每個通道上提取空間特徵的最大最小值的函數。假設為spatial_max(input)和spatial_min(input),那麼新層你可以直接寫為new_layer1=Lambda(spatial_max, x : x)(input)
new_layer2=Lambda(spatial_min, x : x)(input)
10. keras可視化怎麼用 ubuntu
請按如下順序安裝:
sudo pip install graphviz(安裝介面)
sudo apt-get install graphviz(安裝軟體本身)
sudo pip install pydot==1.1.0
sudo pip install keras
運行效果(隨便舉個例子,model是之前定義好的):
from keras.utils.vis_utils import plot_model
plot_model(model, to_file='model.png', show_shapes=True)
Image('model.png')