精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

一篇文章掌握TensorFlow深度學習

人工智能 深度學習
TensorFlow的流行讓深度學習門檻變得越來越低,只要你有Python和機器學習基礎,入門和使用神經(jīng)網(wǎng)絡模型變得非常簡單。TensorFlow支持Python和C++兩種編程語言,再復雜的多層神經(jīng)網(wǎng)絡模型都可以用Python來實現(xiàn),如果業(yè)務使用其他編程也不用擔心,使用跨語言的gRPC或者HTTP服務也可以訪問使用TensorFlow訓練好的智能模型。

[[200803]]

ensorFlow深度學習框架

Google不僅是大數(shù)據(jù)和云計算的領導者,在機器學習和深度學習上也有很好的實踐和積累,在2015年年底開源了內(nèi)部使用的深度學習框架TensorFlow。

與Caffe、Theano、Torch、MXNet等框架相比,TensorFlow在Github上Fork數(shù)和Star數(shù)都是最多的,而且在圖形分類、音頻處理、推薦系統(tǒng)和自然語言處理等場景下都有豐富的應用。最近流行的Keras框架底層默認使用TensorFlow,著名的斯坦福CS231n課程使用TensorFlow作為授課和作業(yè)的編程語言,國內(nèi)外多本TensorFlow書籍已經(jīng)在籌備或者發(fā)售中,AlphaGo開發(fā)團隊Deepmind也計劃將神經(jīng)網(wǎng)絡應用遷移到TensorFlow中,這無不印證了TensorFlow在業(yè)界的流行程度。

TensorFlow不僅在Github開放了源代碼,在《TensorFlow: Large-Scale Machine Learning on Heterogeneous Distributed Systems》論文中也介紹了系統(tǒng)框架的設計與實現(xiàn),其中測試過200節(jié)點規(guī)模的訓練集群也是其他分布式深度學習框架所不能媲美的。Google還在《Wide & Deep Learning for Recommender Systems》和《The YouTube Video Recommendation System》論文中介紹了Google Play應用商店和YouTube視頻推薦的算法模型,還提供了基于TensorFlow的代碼實例,使用TensorFlow任何人都可以在ImageNet或Kaggle競賽中得到接近State of the art的好成績。

TensorFlow從入門到應用

毫不夸張得說,TensorFlow的流行讓深度學習門檻變得越來越低,只要你有Python和機器學習基礎,入門和使用神經(jīng)網(wǎng)絡模型變得非常簡單。TensorFlow支持Python和C++兩種編程語言,再復雜的多層神經(jīng)網(wǎng)絡模型都可以用Python來實現(xiàn),如果業(yè)務使用其他編程也不用擔心,使用跨語言的gRPC或者HTTP服務也可以訪問使用TensorFlow訓練好的智能模型。

那使用Python如何編寫TensorFlow應用呢?從入門到應用究竟有多難呢?

下面我們編寫了一個Hello world應用,輸出字符串和進行簡單的運算。

  1. # Import the library 
  2. import tensorflow as tf 
  3.  
  4. # Define the graph 
  5. hello_op = tf.constant('Hello, TensorFlow!'
  6. a = tf.constant(10) 
  7. b = tf.constant(32) 
  8. compute_op = tf.add(a, b) 
  9.  
  10. # Define the session to run graph 
  11. with tf.Session() as sess: 
  12.     print(sess.run(hello_op)) 
  13.     print(sess.run(compute_op))  

從這段簡單的代碼可以了解到TensorFlow的使用非常方便,通過Python標準庫的形式導入,不需要啟動額外的服務。第一次接觸TensorFlow可能比較疑惑,這段邏輯Python也可以實現(xiàn),為什么要使用tf.constant()和tf.Session()呢?其實TensorFlow通過Graph和Session來定義運行的模型和訓練,這在復雜的模型和分布式訓練上有非常大好處,將在文章的后續(xù)部分介紹到。

前面的Hello world應用并沒有訓練模型,接下來介紹一個邏輯回歸問題與模型。我們使用numpy構(gòu)建一組線性關系的數(shù)據(jù),通過TensorFlow實現(xiàn)的隨機梯度算法,在訓練足夠長的時間后可以自動求解函數(shù)中的斜率和截距。

  1. import tensorflow as tf 
  2. import numpy as np 
  3.  
  4. Prepare train data 
  5. train_X = np.linspace(-1, 1, 100) 
  6. train_Y = 2 * train_X + np.random.randn(*train_X.shape) * 0.33 + 10 
  7.  
  8. # Define the model 
  9. X = tf.placeholder(tf.float32) 
  10. Y = tf.placeholder(tf.float32) 
  11. w = tf.Variable(0.0, name="weight"
  12. b = tf.Variable(0.0, name="bias"
  13. loss = tf.square(Y - tf.matmul(X, w) - b) 
  14. train_op = tf.train.GradientDescentOptimizer(0.01).minimize(loss) 
  15.  
  16. Create session to run 
  17. with tf.Session() as sess: 
  18.     sess.run(tf.initialize_all_variables()) 
  19.     epoch = 1 
  20.     for i in range(10): 
  21.         for (x, y) in zip(train_X, train_Y): 
  22.             _, w_value, b_value = sess.run([train_op, w, b],  
  23.                                            feed_dict={X: x, Y: y}) 
  24.         print("Epoch: {}, w: {}, b: {}".format(epoch, w_value, b_value)) 
  25.         epoch += 1  

上面的代碼可以在tensorflow_examples項目中找到,經(jīng)過訓練,我們看到輸出的斜率w約為2,截距b約為10,與我們構(gòu)建的數(shù)據(jù)之間的關聯(lián)關系十分吻合!注意在TensorFlow代碼中并沒有實現(xiàn)最小二乘法等算法,也沒有if-else來控制代碼邏輯,完全是由數(shù)據(jù)驅(qū)動并且根據(jù)梯度下降算法動態(tài)調(diào)整Loss值學習出來的。這樣我們即使換了其他數(shù)據(jù)集,甚至換成圖像分類等其他領域的問題,無需修改代碼也可以由機器自動學習,這也是神經(jīng)網(wǎng)絡和TensorFlow強大的地方。

  1. Epoch: 1, w: -0.909195065498352, b: 9.612462043762207 
  2. Epoch: 2, w: 0.296161413192749, b: 10.418954849243164 
  3. Epoch: 3, w: 1.108984351158142, b: 10.283171653747559 
  4. Epoch: 4, w: 1.5482335090637207, b: 10.143315315246582 
  5. Epoch: 5, w: 1.7749555110931396, b: 10.063009262084961 
  6. Epoch: 6, w: 1.8906776905059814, b: 10.020986557006836 
  7. Epoch: 7, w: 1.9495772123336792, b: 9.999467849731445 
  8. Epoch: 8, w: 1.9795364141464233, b: 9.988500595092773 
  9. Epoch: 9, w: 1.994771122932434, b: 9.982922554016113 
  10. Epoch: 10, w: 2.0025179386138916, b: 9.980087280273438  

前面的模型只有w和b兩個變量,如果數(shù)據(jù)處于非線性關系就難以得到很好的結(jié)果,因此我們建議使用深層神經(jīng)網(wǎng)絡,這也是TensorFlow設計重點就要解決的深度學習模型。我們知道Google在2014年憑借Inception模型贏下了ImageNet全球競賽,里面代碼就是基于TensorFlow實現(xiàn)的,下面是較為復雜的模型定義代碼。

  1. with tf.op_scope([inputs], scope, 'inception_v3'): with scopes.arg_scope([ops.conv2d, ops.fc, ops.batch_norm, ops.dropout], is_training=is_training): with scopes.arg_scope([ops.conv2d, ops.max_pool, ops.avg_pool], stride=1, padding='VALID'): # 299 x 299 x 3 end_points['conv0'] = ops.conv2d(inputs, 32, [3, 3], stride=2, scope='conv0') # 149 x 149 x 32 end_points['conv1'] = ops.conv2d(end_points['conv0'], 32, [3, 3], scope='conv1') # 147 x 147 x 32 end_points['conv2'] = ops.conv2d(end_points['conv1'], 64, [3, 3], padding='SAME', scope='conv2') # 147 x 147 x 64 end_points['pool1'] = ops.max_pool(end_points['conv2'], [3, 3], stride=2, scope='pool1') # 73 x 73 x 64 end_points['conv3'] = ops.conv2d(end_points['pool1'], 80, [1, 1], scope='conv3') # 73 x 73 x 80 end_points['conv4'] = ops.conv2d(end_points['conv3'], 192, [3, 3], scope='conv4') # 71 x 71 x 192 end_points['pool2'] = ops.max_pool(end_points['conv4'], [3, 3], stride=2, scope='pool2') # 35 x 35 x 192 net = end_points['pool2'

使用TensorFlow已經(jīng)封裝好的全連接網(wǎng)絡、卷積神經(jīng)網(wǎng)絡、RNN和LSTM,我們已經(jīng)可以組合出各種網(wǎng)絡模型,實現(xiàn)Inception這樣的多層神經(jīng)網(wǎng)絡如拼湊Lego一樣簡單。但在選擇優(yōu)化算法、生成TFRecords、導出模型文件和支持分布式訓練上,這里有比較多的細節(jié),接下來我們將在一篇文章的篇幅內(nèi)介紹所有TensorFlow相關的核心使用技巧。

TensorFlow核心使用技巧

為了介紹TensorFlow的各種用法,我們將使用deep_recommend_system(https://github.com/tobegit3hub/deep_recommend_system)

這個開源項目,它實現(xiàn)了TFRecords、QueueRunner、Checkpoint、TensorBoard、Inference、GPU支持、分布式訓練和多層神經(jīng)網(wǎng)絡模型等特性,而且可以輕易拓展實現(xiàn)Wide and deep等模型,在實際的項目開發(fā)中可以直接下載使用。

1. 準備訓練數(shù)據(jù)

一般TensorFlow應用代碼包含Graph的定義和Session的運行,代碼量不大可以封裝到一個文件中,如cancer_classifier.py文件。訓練前需要準備樣本數(shù)據(jù)和測試數(shù)據(jù),一般數(shù)據(jù)文件是空格或者逗號分隔的CSV文件,但TensorFlow建議使用二進制的TFRecords格式,這樣可以支持QueuRunner和Coordinator進行多線程數(shù)據(jù)讀取,并且可以通過batch size和epoch參數(shù)來控制訓練時單次batch的大小和對樣本文件迭代訓練多少輪。如果直接讀取CSV文件,需要在代碼中記錄下一次讀取數(shù)據(jù)的指針,而且在樣本無法全部加載到內(nèi)存時使用非常不便。

在data目錄,項目已經(jīng)提供了CSV與TFRecords格式轉(zhuǎn)換工具generate_csv_tfrecords.py,參考這個腳本你就可以parse任意格式的CSV文件,轉(zhuǎn)成TensorFlow支持的TFRecords格式。無論是大數(shù)據(jù)還是小數(shù)據(jù),通過簡單的腳本工具就可以直接對接TensorFlow,項目中還提供print_csv_tfrecords.py腳本來調(diào)用API直接讀取TFRecords文件的內(nèi)容。

  1. def generate_tfrecords(input_filename, output_filename): 
  2.     print("Start to convert {} to {}".format(input_filename, output_filename)) 
  3.     writer = tf.python_io.TFRecordWriter(output_filename) 
  4.  
  5.     for line in open(input_filename, "r"): 
  6.         data = line.split(","
  7.         label = float(data[9]) 
  8.         features = [float(i) for i in data[:9]] 
  9.  
  10.         example = tf.train.Example(features=tf.train.Features(feature={ 
  11.             "label"
  12.             tf.train.Feature(float_list=tf.train.FloatList(value=[label])), 
  13.             "features"
  14.             tf.train.Feature(float_list=tf.train.FloatList(value=features)), 
  15.         })) 
  16.         writer.write(example.SerializeToString()) 
  17.  
  18.     writer.close() 
  19.     print("Successfully convert {} to {}".format(input_filename, 
  20.                                                  output_filename))  

2. 接受命令行參數(shù)

有了TFRecords,我們就可以編寫代碼來訓練神經(jīng)網(wǎng)絡模型了,但眾所周知,深度學習有過多的Hyperparameter需要調(diào)優(yōu),我們就優(yōu)化算法、模型層數(shù)和不同模型都需要不斷調(diào)整,這時候使用命令行參數(shù)是非常方便的。

TensorFlow底層使用了python-gflags項目,然后封裝成tf.app.flags接口,使用起來非常簡單和直觀,在實際項目中一般會提前定義命令行參數(shù),尤其在后面將會提到的Cloud Machine Learning服務中,通過參數(shù)來簡化Hyperparameter的調(diào)優(yōu)。

  1. # Define hyperparameters 
  2. flags = tf.app.flags 
  3. FLAGS = flags.FLAGS 
  4. flags.DEFINE_boolean("enable_colored_log"False"Enable colored log"
  5. flags.DEFINE_string("train_tfrecords_file"
  6.                     "./data/a8a/a8a_train.libsvm.tfrecords"
  7.                     "The glob pattern of train TFRecords files"
  8. flags.DEFINE_string("validate_tfrecords_file"
  9.                     "./data/a8a/a8a_test.libsvm.tfrecords"
  10.                     "The glob pattern of validate TFRecords files"
  11. flags.DEFINE_integer("feature_size", 124, "Number of feature size"
  12. flags.DEFINE_integer("label_size", 2, "Number of label size"
  13. flags.DEFINE_float("learning_rate", 0.01, "The learning rate"
  14. flags.DEFINE_integer("epoch_number", 10, "Number of epochs to train"
  15. flags.DEFINE_integer("batch_size", 1024, "The batch size of training"
  16. flags.DEFINE_integer("validate_batch_size", 1024, 
  17.                      "The batch size of validation"
  18. flags.DEFINE_integer("batch_thread_number", 1, 
  19.                      "Number of threads to read data"
  20. flags.DEFINE_integer("min_after_dequeue", 100, 
  21.                      "The minimal number after dequeue"
  22. flags.DEFINE_string("checkpoint_path""./sparse_checkpoint/"
  23.                     "The path of checkpoint"
  24. flags.DEFINE_string("output_path""./sparse_tensorboard/"
  25.                     "The path of tensorboard event files"
  26. flags.DEFINE_string("model""dnn""Support dnn, lr, wide_and_deep"
  27. flags.DEFINE_string("model_network""128 32 8""The neural network of model"
  28. flags.DEFINE_boolean("enable_bn"False"Enable batch normalization or not"
  29. flags.DEFINE_float("bn_epsilon", 0.001, "The epsilon of batch normalization"
  30. flags.DEFINE_boolean("enable_dropout"False"Enable dropout or not"
  31. flags.DEFINE_float("dropout_keep_prob", 0.5, "The dropout keep prob"
  32. flags.DEFINE_boolean("enable_lr_decay"False"Enable learning rate decay"
  33. flags.DEFINE_float("lr_decay_rate", 0.96, "Learning rate decay rate"
  34. flags.DEFINE_string("optimizer""adagrad""The optimizer to train"
  35. flags.DEFINE_integer("steps_to_validate", 10, 
  36.                      "Steps to validate and print state"
  37. flags.DEFINE_string("mode""train""Support train, export, inference"
  38. flags.DEFINE_string("saved_model_path""./sparse_saved_model/"
  39.                     "The path of the saved model"
  40. flags.DEFINE_string("model_path""./sparse_model/""The path of the model"
  41. flags.DEFINE_integer("model_version", 1, "The version of the model"
  42. flags.DEFINE_string("inference_test_file""./data/a8a_test.libsvm"
  43.                     "The test file for inference"
  44. flags.DEFINE_string("inference_result_file""./inference_result.txt"
  45.                     "The result file from inference" 

3. 定義神經(jīng)網(wǎng)絡模型

準備完數(shù)據(jù)和參數(shù),最重要的還是要定義好網(wǎng)絡模型,定義模型參數(shù)可以很簡單,創(chuàng)建多個Variable即可,也可以做得比較復雜,例如使用使用tf.variable_scope()和tf.get_variables()接口。為了保證每個Variable都有獨特的名字,而且能都輕易地修改隱層節(jié)點數(shù)和網(wǎng)絡層數(shù),我們建議參考項目中的代碼,尤其在定義Variables時注意要綁定CPU,TensorFlow默認使用GPU可能導致參數(shù)更新過慢。

  1. # Define the model 
  2. input_units = FEATURE_SIZE 
  3. hidden1_units = 10 
  4. hidden2_units = 10 
  5. hidden3_units = 10 
  6. hidden4_units = 10 
  7. output_units = LABEL_SIZE 
  8.  
  9. def full_connect(inputs, weights_shape, biases_shape): 
  10.     with tf.device('/gpu:0'): 
  11.         weights = tf.get_variable("weights", weights_shape,  
  12.                                  initializer=tf.random_normal_initializer()) 
  13.         biases = tf.get_variable("biases", biases_shape, 
  14.                                  initializer=tf.random_normal_initializer()) 
  15.         return tf.matmul(inputs, weights) + biases 
  16.  
  17. def full_connect_relu(inputs, weights_shape, biases_shape): 
  18.     return tf.nn.relu(full_connect(inputs, weights_shape, biases_shape)) 
  19.  
  20. def deep_inference(inputs): 
  21.     with tf.variable_scope("layer1"): 
  22.         layer = full_connect_relu(inputs, [input_units, hidden1_units], 
  23.                                  [hidden1_units]) 
  24.     with tf.variable_scope("layer2"): 
  25.         layer = full_connect_relu(inputs, [hidden1_units, hidden2_units], 
  26.                                  [hidden2_units]) 
  27.     with tf.variable_scope("layer3"): 
  28.         layer = full_connect_relu(inputs, [hidden2_units, hidden3_units], 
  29.                                  [hidden3_units]) 
  30.     with tf.variable_scope("layer4"): 
  31.         layer = full_connect_relu(inputs, [hidden3_units, hidden4_units], 
  32.                                  [hidden4_units]) 
  33.     with tf.variable_op_scope("output"): 
  34.         layer = full_connect_relu(inputs, [hidden4_units, output_units], 
  35.                                  [output_units]) 
  36.     return layer  

上述代碼在生產(chǎn)環(huán)境也十分常見,無論是訓練、實現(xiàn)inference還是驗證模型正確率和auc時都會用到。項目中還基于此代碼實現(xiàn)了Wide and deep模型,在Google Play應用商店的推薦業(yè)務有廣泛應用,這也是適用于普遍的推薦系統(tǒng),將傳統(tǒng)的邏輯回歸模型和深度學習的神經(jīng)網(wǎng)絡模型有機結(jié)合在一起。

4. 使用不同的優(yōu)化算法

定義好網(wǎng)絡模型,我們需要覺得使用哪種Optimizer去優(yōu)化模型參數(shù),是應該選擇Sgd、Rmsprop還是選擇Adagrad、Ftrl呢?對于不同場景和數(shù)據(jù)集沒有固定的答案,最好的方式就是實踐,通過前面定義的命令行參數(shù)我們可以很方便得使用不同優(yōu)化算法來訓練模型。

  1. def get_optimizer(optimizer, learning_rate): logging.info("Use the optimizer: {}".format(optimizer)) if optimizer == "sgd"return tf.train.GradientDescentOptimizer(learning_rate) elif optimizer == "adadelta"return tf.train.AdadeltaOptimizer(learning_rate) elif optimizer == "adagrad"return tf.train.AdagradOptimizer(learning_rate) elif optimizer == "adam"return tf.train.AdamOptimizer(learning_rate) elif optimizer == "ftrl"return tf.train.FtrlOptimizer(learning_rate) elif optimizer == "rmsprop"return tf.train.RMSPropOptimizer(learning_rate) else: logging.error("Unknow optimizer, exit now") exit(1) 

在生產(chǎn)實踐中,不同優(yōu)化算法在訓練結(jié)果、訓練速度上都有很大差異,過度優(yōu)化網(wǎng)絡參數(shù)可能效果沒有使用其他優(yōu)化算法來得有效,因此選用正確的優(yōu)化算法也是Hyperparameter調(diào)優(yōu)中很重要的一步,通過在TensorFlow代碼中加入這段邏輯也可以很好地實現(xiàn)對應的功能。

5. Online learning與Continuous learning

很多機器學習廠商都會宣稱自己的產(chǎn)品支持Online learning,其實這只是TensorFlow的一個基本的功能,就是支持在線數(shù)據(jù)不斷優(yōu)化模型。TensorFlow可以通過tf.train.Saver()來保存模型和恢復模型參數(shù),使用Python加載模型文件后,可不斷接受在線請求的數(shù)據(jù),更新模型參數(shù)后通過Saver保存成checkpoint,用于下一次優(yōu)化或者線上服務。

  1. Create Session to run graph 
  2. with tf.Session() as sess: 
  3.     summary_op = tf.merge_all_summaries() 
  4.     write = tf.train.SummaryWriter(tensorboard_dir, sess.graph) 
  5.     sess.run(init_op) 
  6.     sess.run(tf.initialize_local_variables()) 
  7.  
  8.     if mode == "train" or mode == "train_from_scratch"
  9.         if mode != "train_from_scratch"
  10.             ckpt = tf.train.get_checkpoint_state(checkpoint_dir) 
  11.             if ckpt and ckpt.model_checkpoint_path: 
  12.                 print("Continue training from the model {}".format(ckpt.model_checkpoint_path)) 
  13.                 saver.restore(sess, ckpt.model_checkpoint_path)

 

而Continuous training是指訓練即使被中斷,也能繼續(xù)上一次的訓練結(jié)果繼續(xù)優(yōu)化模型,在TensorFlow中也是通過Saver和checkpoint文件來實現(xiàn)。在deep_recommend_system項目默認能從上一次訓練中繼續(xù)優(yōu)化模型,也可以在命令行中指定train_from_scratch,不僅不用擔心訓練進程被中斷,也可以一邊訓練一邊做inference提供線上服務。

6. 使用TensorFlow優(yōu)化參數(shù)

TensorFlow還集成了一個功能強大的圖形化工具,也即是TensorBoard,一般只需要在代碼中加入我們關心的訓練指標,TensorBoard就會自動根據(jù)這些參數(shù)繪圖,通過可視化的方式來了解模型訓練的情況。

  1. tf.scalar_summary(‘loss’, loss) 
  2. tf.scalar_summary(‘accuracy’, accuracy) 
  3. tf.scalar_summary(‘auc’, auc_op)  

 

7. 分布式TensorFlow應用

最后不得不介紹TensorFlow強大的分布式計算功能,傳統(tǒng)的計算框架如Caffe,原生不支持分布式訓練,在數(shù)據(jù)量巨大的情況下往往無法通過增加機器scale out。TensorFlow承載了Google各個業(yè)務PB級的數(shù)據(jù),在設計之初就考慮到分布式計算的需求,通過gRPC、Protobuf等高性能庫實現(xiàn)了神經(jīng)網(wǎng)絡模型的分布式計算。

實現(xiàn)分布式TensorFlow應用并不難,構(gòu)建Graph代碼與單機版相同,我們實現(xiàn)了一個分布式的cancer_classifier.py例子,通過下面的命令就可以啟動多ps多worker的訓練集群。

  1. cancer_classifier.py --ps_hosts=127.0.0.1:2222,127.0.0.1:2223 --worker_hosts=127.0.0.1:2224,127.0.0.1:2225 --job_name=ps --task_index=0 
  2.  
  3. cancer_classifier.py --ps_hosts=127.0.0.1:2222,127.0.0.1:2223 --worker_hosts=127.0.0.1:2224,127.0.0.1:2225 --job_name=ps --task_index=1 
  4.  
  5. cancer_classifier.py --ps_hosts=127.0.0.1:2222,127.0.0.1:2223 --worker_hosts=127.0.0.1:2224,127.0.0.1:2225 --job_name=worker --task_index=0 
  6.  
  7. cancer_classifier.py --ps_hosts=127.0.0.1:2222,127.0.0.1:2223 --worker_hosts=127.0.0.1:2224,127.0.0.1:2225 --job_name=worker --task_index=1 

在深入閱讀代碼前,我們需要了解分布式TensorFlow中ps、worker、in-graph、between-graph、synchronous training和asynchronous training的概念。首先ps是整個訓練集群的參數(shù)服務器,保存模型的Variable,worker是計算模型梯度的節(jié)點,得到的梯度向量會交付給ps更新模型。in-graph與between-graph對應,但兩者都可以實現(xiàn)同步訓練和異步訓練,in-graph指整個集群由一個client來構(gòu)建graph,并且由這個client來提交graph到集群中,其他worker只負責處理梯度計算的任務,而between-graph指的是一個集群中多個worker可以創(chuàng)建多個graph,但由于worker運行的代碼相同因此構(gòu)建的graph也相同,并且參數(shù)都保存到相同的ps中保證訓練同一個模型,這樣多個worker都可以構(gòu)建graph和讀取訓練數(shù)據(jù),適合大數(shù)據(jù)場景。同步訓練和異步訓練差異在于,同步訓練每次更新梯度需要阻塞等待所有worker的結(jié)果,而異步訓練不會有阻塞,訓練的效率更高,在大數(shù)據(jù)和分布式的場景下一般使用異步訓練。

8. Cloud Machine Learning

前面已經(jīng)介紹了TensorFlow相關的全部內(nèi)容,細心的網(wǎng)友可能已經(jīng)發(fā)現(xiàn),TensorFlow功能強大,但究其本質(zhì)還是一個library,用戶除了編寫TensorFlow應用代碼還需要在物理機上起服務,并且手動指定訓練數(shù)據(jù)和模型文件的目錄,維護成本比較大,而且機器之間不可共享。

縱觀大數(shù)據(jù)處理和資源調(diào)度行業(yè),Hadoop生態(tài)儼然成為了業(yè)界的標準,通過MapReduce或Spark接口來處理數(shù)據(jù),用戶通過API提交任務后由Yarn進行統(tǒng)一的資源分配和調(diào)度,不僅讓分布式計算成為可能,也通過資源共享和統(tǒng)一調(diào)度平的臺極大地提高了服務器的利用率。很遺憾TensorFlow定義是深度學習框架,并不包含集群資源管理等功能,但開源TensorFlow以后,Google很快公布了Google Cloud ML服務,我們從Alpha版本開始已經(jīng)是Cloud ML的早期用戶,深深體會到云端訓練深度學習的便利性。通過Google Cloud ML服務,我們可以把TensorFlow應用代碼直接提交到云端運行,甚至可以把訓練好的模型直接部署在云上,通過API就可以直接訪問,也得益于TensorFlow良好的設計,我們基于Kubernetes和TensorFlow serving實現(xiàn)了Cloud Machine Learning服務,架構(gòu)設計和使用接口都與Google Cloud ML類似。

 

TensorFlow是很好深度學習框架,對于個人開發(fā)者、科研人員已經(jīng)企業(yè)都是值得投資的技術方向,而Cloud Machine Learning可以解決用戶在環(huán)境初始化、訓練任務管理以及神經(jīng)網(wǎng)絡模型的在線服務上的管理和調(diào)度問題。目前Google Cloud ML已經(jīng)支持automatically hyperparameter tunning,參數(shù)調(diào)優(yōu)未來也將成為計算問題而不是技術問題,即使有的開發(fā)者使用MXNet或者其他,而不是TensorFlow,我們也愿意與更多深度學習用戶和平臺開發(fā)者交流,促進社區(qū)的發(fā)展。

總結(jié)

總結(jié)一下,本文主要介紹TensorFlow深度學習框架的學習與應用,通過deep_recommend_system項目介紹了下面使用TensorFlow的8個核心要點,也歡迎大家下載源碼試用和反饋。 

責任編輯:龐桂玉 來源: 36大數(shù)據(jù)
相關推薦

2020-10-09 08:15:11

JsBridge

2015-11-12 10:40:43

2021-07-13 11:37:47

cpu架構(gòu)Linux

2017-09-05 08:52:37

Git程序員命令

2021-04-09 08:40:51

網(wǎng)絡保險網(wǎng)絡安全網(wǎng)絡風險

2022-02-21 09:44:45

Git開源分布式

2021-06-30 00:20:12

Hangfire.NET平臺

2019-04-17 15:16:00

Sparkshuffle算法

2023-05-12 08:19:12

Netty程序框架

2024-06-25 08:18:55

2020-07-16 15:10:49

Pythonzip()可迭代對象

2016-07-01 14:55:07

開源數(shù)據(jù)庫

2021-06-16 14:44:32

etcd-raftRaftLeader

2017-08-04 15:33:33

大數(shù)據(jù)數(shù)據(jù)可視化方法

2023-05-08 08:21:15

JavaNIO編程

2023-07-28 07:14:13

2021-03-09 14:04:01

JavaScriptCookie數(shù)據(jù)

2021-09-27 09:18:30

ListIterato接口方法

2022-08-04 09:39:39

Kubernetes聲明式系統(tǒng)

2021-01-26 23:46:32

JavaScript數(shù)據(jù)結(jié)構(gòu)前端
點贊
收藏

51CTO技術棧公眾號

国产精品一区二区三区免费观看| 日韩亚洲综合在线| 欧美精品色婷婷五月综合| 婷婷亚洲一区二区三区| 久久久久一区| 日韩在线观看网址| 中文字幕久久久久久久| 欧美伦理免费在线| www精品美女久久久tv| 国产精品黄色av| 777777国产7777777| 红杏一区二区三区| 欧美日韩精品三区| www.成年人视频| 免费黄在线观看| 成人啊v在线| 一区二区三区中文字幕精品精品| 久久国产精品久久精品国产| 在线免费观看一级片| 在线观看一区视频| 色噜噜国产精品视频一区二区| 久久久久国产免费| 精品福利在线| 狠狠躁18三区二区一区| 伊人色综合影院| 亚洲AV第二区国产精品| 国产美女一区二区三区| 国产精品久久91| 日韩精品在线免费看| 99久久夜色精品国产亚洲96| 亚洲免费av电影| 中文字幕avav| 激情中国色综合| 色先锋aa成人| 每日在线更新av| 羞羞的视频在线看| 国产精品女同互慰在线看| 国产精品一区二区三区精品| 国产乱码一区二区| 日本va欧美va欧美va精品| 午夜精品一区二区三区视频免费看 | 免费日韩一区二区三区| 欧美日韩在线播放三区四区| 国产精品一色哟哟| 日本在线人成| 久久精品日产第一区二区三区高清版| 91精品国产99久久久久久红楼 | 日韩av电影国产| 一区二区视频免费看| 蜜桃tv一区二区三区| 日韩视频免费观看高清完整版在线观看| 狠狠97人人婷婷五月| 岛国中文字幕在线| 国产精品美女久久久久久久久久久 | 久久久久国内| 91av成人在线| 久久免费精彩视频| 欧美激情偷拍自拍| 在线观看欧美www| 亚洲狠狠婷婷综合久久久久图片| 亚洲精品观看| 日韩三级视频在线看| 日本中文字幕影院| 香蕉成人在线| 欧美日韩一区二区三区四区五区| 男人亚洲天堂网| 麻豆mv在线看| 亚洲成av人片观看| 欧美少妇一区二区三区| 在线免费观看的av| 亚洲黄色免费电影| 中文字幕色呦呦| 黄色网址视频在线观看| 国产精品理论在线观看| 亚洲巨乳在线观看| 99re在线视频| 国产精品麻豆欧美日韩ww| 婷婷久久伊人| 免费在线看黄色| 国产精品免费视频观看| 亚洲在线视频一区二区| 在线免费黄色| 亚洲男人的天堂一区二区| 妞干网这里只有精品| 午夜dj在线观看高清视频完整版| 亚洲免费观看高清完整版在线观看 | 日韩中文字幕视频| 五月综合色婷婷| 自产国语精品视频| 久久久久中文字幕2018| 日韩精品一区二区不卡| 天堂资源在线中文精品| 国产精品久久久久av| 精品人妻一区二区色欲产成人| 久久久久欧美精品| 国产欧美婷婷中文| 性色av蜜臀av| 99精品在线观看视频| 茄子视频成人在线观看| 日本三级在线播放完整版| 伊人性伊人情综合网| 亚洲熟妇无码另类久久久| 国产综合色区在线观看| 欧美日本在线播放| 日本泡妞xxxx免费视频软件| 色橹橹欧美在线观看视频高清| 亚洲天堂免费视频| 一区二区国产精品精华液| 国语自产精品视频在线看8查询8| 2019亚洲男人天堂| 136福利视频导航| 成人精品gif动图一区| 欧美精品与人动性物交免费看| 1769在线观看| 亚洲一区二区精品视频| 爱情岛论坛成人| 国产麻豆一区二区三区| 欧美精品一区二区三区蜜臀| 四季av中文字幕| 影音先锋中文字幕一区二区| 国产脚交av在线一区二区| 国产jzjzjz丝袜老师水多 | 熟女俱乐部一区二区视频在线| 欧美激情黄色片| 午夜精品久久久久久99热软件| 精品成人无码久久久久久| 国内精品在线播放| 女人一区二区三区| 欧美日韩经典丝袜| 欧美综合久久久| 欧美在线一级片| 亚洲欧美色图| 国产精品精品视频| 少妇高潮一区二区三区69| 中文字幕中文字幕一区| 国产原创中文在线观看| 国产欧美88| 在线播放亚洲激情| 人人爽人人爽人人片av| 国产成人综合亚洲网站| 亚洲视频导航| 国产超碰精品| 亚洲精品久久久久中文字幕二区 | 久久99热精品这里久久精品| 亚洲系列第一页| 久久免费看少妇高潮| 久久久久久久9| 国产精品视频首页| 亚洲人永久免费| 日本在线小视频| 国产aⅴ综合色| 国产精品12p| 欧美视频精品| 色婷婷**av毛片一区| 国产免费a视频| www国产精品av| 无码专区aaaaaa免费视频| 亚洲精品国产九九九| 久久中文字幕视频| 国产精品日韩无码| 亚洲视频在线一区二区| 高潮一区二区三区| blacked蜜桃精品一区| 欧美自拍大量在线观看| 性xxxxbbbb| 精品久久久久久久久久国产| 佐佐木明希电影| 中文精品电影| 成人黄色在线免费观看| 午夜av在线免费观看| 日韩午夜av电影| 久久亚洲成人av| 国产成人综合在线观看| 久久久天堂国产精品| 日韩高清一区| 久久久视频在线| 日本美女一级视频| 欧美日韩国产中文字幕 | 2020日本不卡一区二区视频| 亚洲 高清 成人 动漫| 欧美男男freegayvideosroom| 欧美黑人又粗大| 黄色一级大片在线免费看国产| 亚洲国产aⅴ天堂久久| 少妇精品一区二区| 久久综合导航| 亚洲一区二区高清视频| 精品国产欧美| 欧美—级高清免费播放| 亚洲免费一级片| 欧美日韩亚洲精品一区二区三区| 国产精品无码永久免费不卡| 日韩av中文字幕一区二区| 一区二区视频国产| 一区二区三区欧洲区| 欧美中文字幕在线播放| 丁香婷婷在线| 日韩欧美在线123| 99热国产在线观看| 国产精品美女久久久久aⅴ | 亚洲欧美自拍视频| 国产精品无码永久免费888| 亚洲高清av一区二区三区| 在线看片日韩| 亚洲精品一区二区三| 视频免费一区二区| 日产精品99久久久久久| 9191在线播放| 亚洲免费福利视频| 一级特黄aaaaaa大片| 亚洲韩国一区二区三区| 男人舔女人下部高潮全视频 | 亚洲精品免费在线播放| 一本色道综合久久欧美日韩精品| 蜜臀av性久久久久蜜臀av麻豆| 污污污污污污www网站免费| 午夜欧洲一区| 成人在线小视频| 咪咪网在线视频| 日韩专区中文字幕| 日韩电影免费| 日韩美女天天操| 国产精品成人久久久| 亚洲一卡二卡三卡四卡五卡| 真实乱视频国产免费观看| 成人免费不卡视频| 天天摸天天舔天天操| 国产亚洲午夜| www.99riav| 不卡中文字幕| 精品久久久久久一区| 懂色av色香蕉一区二区蜜桃| 国产成人精品午夜| 黄色软件视频在线观看| 成人444kkkk在线观看| 国内在线免费高清视频| 欧美成人官网二区| 一卡二卡三卡在线观看| 欧美日韩亚洲精品内裤| 欧美成人aaaaⅴ片在线看| 国产精品美女久久久久久久网站| 亚洲码无人客一区二区三区| 99久久99久久精品国产片果冻| 少妇伦子伦精品无吗| 久草中文综合在线| 男女啪啪网站视频| 久久视频一区| 免费无码国产v片在线观看| 狠色狠色综合久久| japanese在线播放| 欧美fxxxxxx另类| 一区二区冒白浆视频| 精品久久美女| 欧美日韩国产精品一卡| 伊人www22综合色| 5g国产欧美日韩视频| 91嫩草国产线观看亚洲一区二区| 国产精品久久久久久久午夜| 99re66热这里只有精品4| 欧洲亚洲在线视频| 亚洲黄色网址| 日韩免费观看视频| 美女福利一区二区三区| 日本人成精品视频在线| 在线观看v片| 日韩av免费在线| 成人av免费电影网站| 97视频在线观看播放| 久久人体大尺度| 国产精品com| 懂色aⅴ精品一区二区三区| 国产精品日韩久久久久| 国产成人77亚洲精品www| 国产日韩精品一区二区| 日韩在线你懂得| 成人在线观看视频网站| 久久国产精品免费一区二区三区| 91热精品视频| 999国产精品一区| 国产视频一区二区三区四区| 人人精品亚洲| 精品免费日产一区一区三区免费| 亚洲香蕉视频| 亚洲一区不卡在线| 国产综合自拍| 日韩中文字幕在线视频观看| 亚洲免费在线| 五月天激情视频在线观看| 久久 天天综合| 9.1在线观看免费| 久久婷婷国产综合国色天香| 国产精成人品免费观看| 亚洲人午夜精品天堂一二香蕉| 国产精品麻豆一区| 亚洲乱码国产乱码精品精的特点| 亚洲国产综合久久| 欧美视频在线播放| 精品人妻一区二区三区蜜桃| 亚洲精品v欧美精品v日韩精品| 国产三级在线免费观看| 久久最新资源网| 黄色在线观看www| 国产精品久久中文| 超碰成人免费| 视频一区国产精品| 国产精品av久久久久久麻豆网| 国产黄色片免费在线观看| 美女视频黄频大全不卡视频在线播放| 交换做爰国语对白| 久久综合精品国产一区二区三区| 日本伦理一区二区三区| 亚洲第一福利一区| 中文天堂在线视频| 精品成人免费观看| 色多多视频在线观看| 97视频在线观看视频免费视频 | 国产成人综合精品| 香蕉大人久久国产成人av| 欧美成人dvd在线视频| 婷婷综合激情| 又粗又黑又大的吊av| 国产在线一区二区| 男人天堂av电影| 一区二区三区中文字幕| 国产精品尤物视频| 亚洲福利小视频| 免费在线观看av网站| 日韩av手机在线看| 精品一级视频| 天堂av免费看| 日本亚洲视频在线| 青青草成人免费视频| 亚洲色图欧美在线| 国产成人精品亚洲| 日韩精品免费在线观看| 羞羞电影在线观看www| 国产精品中文在线| 国产欧美高清视频在线| 蜜臀精品一区二区| 成人精品亚洲人成在线| 三级黄色在线观看| 色伊人久久综合中文字幕| 少妇高潮一区二区三区69| 欧美韩日一区二区| 精品一区二区三区中文字幕在线 | 免费的成人av| 麻豆av免费观看| 亚洲成av人片一区二区三区| 国产毛片毛片毛片毛片| 在线性视频日韩欧美| 欧美色网一区| 国产精品亚洲一区| 在线欧美一区| 中文字幕精品视频在线| 香蕉成人伊视频在线观看| www.麻豆av| 九九热这里只有在线精品视| 日韩伦理一区二区| 亚洲欧美日韩国产yyy| 免费久久精品视频| 精品伦精品一区二区三区视频密桃| 色综合色狠狠天天综合色| 手机福利小视频在线播放| 97精品国产97久久久久久春色| 视频精品二区| 欧美成人精品免费| 不卡的av电影| 成人免费区一区二区三区| 亚洲国产日韩欧美在线动漫| 操喷在线视频| 就去色蜜桃综合| 国产人成精品一区二区三| 国产精品久久久久久亚洲色 | 在线视频不卡一区二区| 久久99最新地址| 青青草原国产视频| 日韩av资源在线播放| 午夜影院在线播放| 国产一区视频观看| 在线一区免费观看| 亚洲精品国产熟女久久久| 欧美午夜在线观看| www.久久ai| 国产一区二区三区高清视频| 国产亚洲网站| 91香蕉国产视频| 日韩视频一区在线观看| 主播国产精品| 欧美亚洲丝袜| 久久精品国产亚洲一区二区三区| 日韩精品一区二区亚洲av性色| 亚洲白拍色综合图区| 樱桃视频成人在线观看| 亚洲国产精品久久久久久女王| 国模无码大尺度一区二区三区| 久久久精品人妻一区二区三区四| 精品美女一区二区| 激情亚洲影院在线观看| 在线视频91| 99久久精品情趣|