Tensorflow简单教程
為什么使用Tensorflow?
作為一個(gè)數(shù)據(jù)科學(xué)研究者,已經(jīng)有很多工具如R語(yǔ)言、Scikit等學(xué)習(xí)工具,為什么還要使用Tensorflow呢?
1. TensorFlow的深度學(xué)習(xí)部分能夠在一個(gè)模型中堆積了許多不同的模型和轉(zhuǎn)換,你能夠在一個(gè)模型中方便地處理文本 圖片和規(guī)則分類以及連續(xù)變量,同時(shí)實(shí)現(xiàn)多目標(biāo)和多損失工作;
2. TensorFlow的管道部分能夠?qū)?shù)據(jù)處理和機(jī)器學(xué)習(xí)放在一個(gè)框架中,TensorFlow指引了方向。
?
Titanic?數(shù)據(jù)集的簡(jiǎn)單模型
開始一個(gè)簡(jiǎn)單的案例,從Kaggle獲得Titanic?數(shù)據(jù)集,首先,肯定你已經(jīng)安裝了?TensorFlow?和?Scikit Learn,包括一些支持庫(kù)包Scikit Flow ,它可以簡(jiǎn)化TensorFlow的許多工作。
pip install numpy scipy sklearn pandas # For Ubuntu: pip install https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.5.0-cp27-none-linux_x86_64.whl # For Mac: pip install https://storage.googleapis.com/tensorflow/mac/tensorflow-0.5.0-py2-none-any.whl pip install git+git://github.com/google/skflow.git?
你可以從http://github.com/ilblackdragon/tf_examples得到數(shù)據(jù)集和代碼:
git clone https://github.com/ilblackdragon/tf_examples.git?
使用iPython或 iPython notebook可以快速瀏覽一下數(shù)據(jù):
>>> import pandas >>> data = pandas.read_csv('data/train.csv') >>> data.shape (891, 12) >>> data.columns Index([u'PassengerId', u'Survived', u'Pclass', u'Name', u'Sex', u'Age',u'SibSp', u'Parch', u'Ticket', u'Fare', u'Cabin', u'Embarked'],dtype='object') >>> data[:1]PassengerId Survived Pclass Name Sex Age SibSp 0 1 0 3 Braund, Mr. Owen Harris male 22 1Parch Ticket Fare Cabin Embarked 0 0 A/5 21171 7.25 NaN S讓我們基于Scikit?學(xué)習(xí)的浮點(diǎn)變量預(yù)測(cè)Survived?類別:
>>> y, X = train['Survived'], train[['Age', 'SibSp', 'Fare']].fillna(0) >>> X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) >>> lr = LogisticRegression() >>> lr.fit(X_train, y_train) >>> print accuracy_score(lr.predict(X_test), y_test) 0.664804469274我們將數(shù)據(jù)集分離進(jìn)入特征和目標(biāo),用數(shù)據(jù)零填入N/A中,建立一個(gè)邏輯回歸,基于訓(xùn)練數(shù)據(jù)的預(yù)測(cè)會(huì)給我們一定的精確度,現(xiàn)在使用Scikit Flow:
>>> import skflow >>> import random >>> random.seed(42) # to sample data the same way >>> classifier = skflow.TensorFlowLinearClassifier(n_classes=2, batch_size=128, steps=500, learning_rate=0.05) >>> classifier.fit(X_train, y_train) >>> print accuracy_score(classifier.predict(X_test), y_test) 0.68156424581恭喜你,你已經(jīng)建立了第一個(gè)TensorFlow?模型。
?
Scikit Flow
Scikit Flow是一個(gè)將TensorFlow包裝其中提供多新與Scikit Learn?API類似的API。TensorFlow是一個(gè)構(gòu)建和執(zhí)行圖,這是一個(gè)強(qiáng)大的概念,但是開始時(shí)比較復(fù)雜一些。所以,需要簡(jiǎn)化包裝一下。
揭開?Scikit Flow神秘面紗,我們發(fā)現(xiàn)有三個(gè)部分:
- TensorFlowTrainer?—?各種優(yōu)化類,可以進(jìn)行灰度修剪等優(yōu)化。
- logistic_regression邏輯回歸?—?創(chuàng)建一個(gè)邏輯回歸模型的圖
- linear_regression線性回歸?—?創(chuàng)建線性回歸模型的圖。
- DataFeeder?—?取樣訓(xùn)練數(shù)據(jù)的最小批次放入模型。
- TensorFlowLinearClassifier?—?一個(gè)使用LogisticRegression實(shí)現(xiàn)Scikit Learn接口的類,它創(chuàng)建一個(gè)模型和一個(gè)訓(xùn)練者,使用給定數(shù)據(jù)集調(diào)用fit()運(yùn)行訓(xùn)練者,調(diào)用predict()在評(píng)估模型中運(yùn)行模型。
- TensorFlowLinearRegressor?—?類似于TensorFlowClassifier, 但是使用 LinearRegression作為一個(gè)模型
?
模擬數(shù)據(jù)
我們使用TensorFlow分析三種模擬數(shù)據(jù):線性可數(shù)據(jù),月亮和土星數(shù)據(jù)三種。第一種使用線性分類器很容易實(shí)現(xiàn),后兩種需要非線性模型如多層神經(jīng)網(wǎng)絡(luò)multi-layer neural network。
線性數(shù)據(jù)如下,可以用從左上到右下一條直線區(qū)分這兩族數(shù)據(jù):
線性分類器如?感知器, 邏輯回歸, 線性判別分析, 支持向量機(jī)(SVM)都能很好實(shí)現(xiàn)這種線性分類。
月亮數(shù)據(jù)如下,如同兩個(gè)月亮環(huán)抱,這就很難找出一條線可以將這兩種顏色的數(shù)據(jù)進(jìn)行分離。
而土星數(shù)據(jù)則是一族數(shù)據(jù)環(huán)繞另外一組數(shù)據(jù):
Jason Baldridge在其github上根據(jù)Tensorflow案例mnist.py編寫了Softmax回歸:?softmax.py.,使用它進(jìn)行線性分析:
$ python softmax.py --train simdata/linear_data_train.csv --test simdata/linear_data_eval.csv Accuracy: 0.99一代訓(xùn)練結(jié)果非常精確達(dá)到99%?,二代訓(xùn)練能夠達(dá)到100%:
$ python softmax.py --train simdata/linear_data_train.csv --test simdata/linear_data_eval.csv --num_epochs 2 Accuracy: 1.0更多請(qǐng)參考:
Simple end-to-end TensorFlow examples
?
機(jī)器學(xué)習(xí)流行算法一覽
機(jī)器學(xué)習(xí)教程:從感知到深度神經(jīng)網(wǎng)絡(luò)
總結(jié)
以上是生活随笔為你收集整理的Tensorflow简单教程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 万能make file
- 下一篇: 立体视觉