tensorflow等框架是如何處理大數據的(數據無法一次性讀入機器內存)?
之前接觸了hadoop和spark這樣的大數據處理框架,知道這些框架是利用map-reduce這種把數據讀一點算一點的方式來處理大數據的,那麼現在的這些主流的深度學習框架是如何處理的呢,目前我認為這些只是一些運算庫,能work的前提是數據能一次性讀入內存,然後才能談得上gpu加速之類的。不知道我理解的對不對
當然是用隊列和多線程
可以使用 tensorflow 提供的 batch generator, 首先把數據送入隊列中 queue, 然後需要一種 tensorflow reader (tf 有好幾種reader), 然後從隊列中讀取數據, 然後使用 tf.train.batch 或者 tf.train.shuffle_batch 就可以生成你定義的 batch size 的數據了,需要用 Coordinator()和 start_queue_runner 監控隊列的狀態。
我製作了一個 tensorflow 實戰教程,第一系列就是:
如果使用tensorflow處理我們自己的數據?
比如一堆圖片存放在本地硬碟上,
怎麼讀取數據,生成batch,train?
怎麼保存訓練好的模型結構和參數?
怎麼恢復訓練好的結構和參數,並使用新的數據測試?
怎麼測試單張圖片?
我使用的是Kaggle貓狗大戰的數據,25000張圖片。
具體請看我的youtube主頁:
https://www.youtube.com/channel/UCVCSn4qQXTDAtGWpWAe4Plw
good luck!
可以參考mnist數據源的源碼,然後在load_mnist階段,只讀取所有的文件名和標籤,而不讀取圖形的位元組數據,最後重寫next_batch函數,在這裡隨機取得batch_size個image content及其label返回——只在這裡進行圖片的真正讀取。由於每次只讀取batch_size個圖片,避免了一次載入了所有圖片的數據,故這種方法可以處理百萬級圖片數據。
當圖片超過百萬後,即使一次性載入文件名和標籤數據都已經太過佔用內存了,這時候也都可以分段化處理,比如
train.img10w.txt 表示圖片0-10萬訓練圖與標籤對應的格式
train.img20w.txt 表示圖片10w-20w萬訓練圖與標籤對應的格式
test格式類似處理
這樣可以處理無限量的圖片數據,即使一個8G內存的機器,也可以處理千萬級的數據(只是時間問題比較長了)
最後:
1、對於如何在mnist代碼基礎上修改(讀取文件夾的image和txt的image filename,label),已經有人已經做了,代碼在這裡 mrlittlepig/ImageProcessing
聲明一下:本人只是借花獻佛,該代碼不是本人所寫 作者博客在Tensorflow for Image Processing
2、分批的還沒有代碼,但在上述項目基礎上可以很方便修改,(修改process_images,next_batch兩個函數即可)
tf提供了多種方式,當數據量大時可以考慮使用隊里,多線程,官方提供的cifar10就是一個很好的例子
著作權歸作者所有。
商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。
作者:thinker1017
鏈接:大數據下基於Tensorflow框架的深度學習示例教程 - thinker1017 - 博客園
來源:博客園
近幾年,信息時代的快速發展產生了海量數據,誕生了無數前沿的大數據技術與應用。在當今大數據時代的產業界,商業決策日益基於數據的分析作出。當數據膨脹到一定規模時,基於機器學習對海量複雜數據的分析更能產生較好的價值,而深度學習在大數據場景下更能揭示數據內部的邏輯關係。本文就以大數據作為場景,通過自底向上的教程詳述在大數據架構體系中如何應用深度學習這一技術。大數據架構中採用的是hadoop系統以及Kerberos安全認證,深度學習採用的是分散式的Tensorflow架構,hadoop解決了大數據的存儲問題,而分散式Tensorflow解決了大數據訓練的問題。本教程是我們團隊在開發基於深度學習的實時欺詐預警服務時,部署深度學習這一模塊時總結出的經驗,感興趣的歡迎深入交流。
安裝Tensorflow我們安裝Tensorflow選擇的是Centos7,因為Tensorflow需要使用GNU發布的1.5版本的libc庫,Centos6系統並不適用該版本庫而被拋棄。對於如何聯網在線安裝Tensorflow,官網有比較詳盡的教程。本教程著重講一下網上資料較少的離線安裝方式,系統的安裝更需要在意的是各軟體版本的一致性,下面教程也是解決了很多版本不一致的問題後給出的一個方案。首先我們先將整個系統搭建起來吧。1.安裝編程語言Python3.5:在官網下載軟體並解壓後執行如下安裝命令:./configure make make testsudo make install2.安裝基於Python的科學計算包python-numpy:在官網下載軟體並解壓後執行如下安裝命令:python setup.py install3.安裝Python模塊管理的工具wheel:在官網下載軟體後執行如下安裝命令:
pip install wheel-0.30.0a0-py2.py3-none-any.whl4.安裝自動下載、構建、安裝和管理 python 模塊的工具setuptools:在官網下載軟體並解壓後執行如下安裝命令:python setup.py install5.安裝Python開發包python-devel:在官網下載軟體後執行如下安裝命令:sudo rpm -i --nodeps python3-devel-3.5.2-4.fc25.x86_64.rpm6.安裝Python包安裝管理工具six:在官網下載軟體後執行如下安裝命令:sudo pip install six-1.10.0-py2.py3-none-any.whl7.安裝Java 開發環境JDK8:在官網下載軟體並解壓後執行如下移動命令:mv java1.8 /usr/local/software/jdk設置JDK的環境變數,編輯文件 .bashrc,加入下面內容
export JAVA_HOME=/usr/local/software/jdkexport JRE_HOME=${JAVA_HOME}/jreexport CLASSPATH=$CLASSPATH:${JAVA_HOME}/lib:${JRE_HOME}/libexport PATH=$PATH:${JAVA_HOME}/bin進行Java版本的切換,選擇對應的版本sudo update-alternatives --config javasudo update-alternatives --config javac8.安裝Bazel:Bazel是一個類似於Make的工具,是Google為其內部軟體開發的特點量身定製的工具,構建Tensorflow項目。在官網下載後執行如下安裝命令:chmod +x bazel-0.4.3-installer-linux-x86_64.sh./bazel-0.4.3-installer-linux-x86_64.sh –user
9.安裝Tensorflow:在官網下載軟體後執行如下安裝命令:pip install --upgrade tensorflow-0.12.1-cp35-cp35m-linux_x86_64.whlTensorflow訪問HDFS的部署1.首先安裝Hadoop客戶端,在官網下載後執行下面解壓移動命令:tar zxvf hadoop-2.6.0.tar.gzmv hadoop-2.6.0.tar.gz /usr/local/software/Hadoop進行環境變數的配置/etc/profile,加入如下內容export PATH=$PATH:/usr/local/software/hadoop/binexport LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$JAVA_HOME/jre/lib/amd64/serverexport HADOOP_HOME=/usr/local/software/hadoop
export HADOOP_HDFS_HOME=/usr/local/software/hadoop配置完後進行配置更新source /etc/profile2.其次,安裝完客戶端後,配置自己的hadoop集群環境文件。Tensorflow與Kerberos驗證的部署在Tesorflow0.12版本中已經支持了Kerberos驗證,本機只要配置好Kerberos文件即可使用。該文中不詳述Kerberos的配置內容,羅列一下相關的配置流程。首先在/etc/krb5.conf文件中進行伺服器跟驗證策略的配置;然後在Kerberos服務端生成一個用戶文件傳至本機;最後進行Kerberos客戶端的許可權認證並設置定時任務。
推薦閱讀:
※Facenet即triplet network模型訓練,loss不收斂的問題?
※卷積神經網路(CNN)中卷積層與池化層如何進行BP殘差傳遞與參數更新?
※訓練集準確率接近100%,驗證集準確率80%但是隨著訓練step增加不增也不降。算是過擬合還是欠擬合?
※caffe里的clip gradient是什麼意思?
※GPU對CNN計算的加速原理到底是怎樣的?
TAG:Hadoop | 大數據 | 深度學習DeepLearning | TensorFlow |