TF Learn: Scikit-learn と TensorFlow をベースにしたディープラーニング ツール

TF Learn: Scikit-learn と TensorFlow をベースにしたディープラーニング ツール

[51CTO.comより引用] 海外のデータサイエンス市場に詳しい人なら誰でも、2017年に海外のデータサイエンスで最もよく使われている3つのテクノロジーがSpark、Python、MongoDBであることを知っています。 Python といえば、ビッグデータを扱う人なら誰でも Scikit-learn と Pandas をよく知っているでしょう。

[[242642]]

Scikit-learn は、最も一般的に使用されている Python 機械学習フレームワークです。大手インターネット企業でアルゴリズムに取り組んでいるエンジニアは、アルゴリズムのスタンドアロン バージョンを実装するときに、多かれ少なかれ Scikit-learn を使用します。 TensorFlowはさらに有名です。ディープラーニングを行う人ならTensorFlowを知らないということはあり得ません。

例を見てみましょう。この例は、従来の機械学習アルゴリズムであるロジスティック回帰の実装です。

ご覧のとおり、この例ではロジスティック回帰の主な機能を完了するために 3 行のコードのみが使用されています。 TensorFlow を使用して同じコードを実装するには何行必要か見てみましょう。次のコードは GitHub からのものです:

  1. '' '  
  2. TensorFlow ライブラリを使用したロジスティック回帰学習アルゴリズムの例。  
  3. この例ではMNISTデータベースを使用しています 手書き数字 
  4. (http://yann.lecun.com/exdb/mnist/)  
  5. 著者: アイメリック・ダミアン 
  6. プロジェクト: https://github.com/aymericdamien/TensorFlow-Examples/  
  7. '' '  
  8. __future__からprint_function をインポートする 
  9. テンソルフローをtfとしてインポートする 
  10. # MNISTデータをインポートする 
  11. tensorflow.examples.tutorials.mnistからinput_dataをインポートします 
  12. mnist = input_data.read_data_sets( "/tmp/data/" 、 one_hot= True )  
  13.  
  14. # パラメータ 
  15. 学習率 = 0.01  
  16. トレーニングエポック = 25  
  17. バッチサイズ = 100  
  18. 表示ステップ = 1  
  19.  
  20. # tf グラフ入力 
  21. x = tf.placeholder(tf.float32, [None, 784]) #形状 28*28=784mnist データ画像 
  22. y = tf.placeholder(tf.float32, [None, 10]) # 0~9の数字の認識 => 10クラス 
  23.  
  24. #モデルの重みを設定する 
  25. W = tf.Variable(tf.zeros([784, 10]))  
  26. b = tf.Variable(tf.zeros([10]))  
  27.  
  28. # モデルの構築 
  29. pred = tf.nn.softmax(tf.matmul(x, W) + b) # ソフトマックス 
  30.  
  31. #クロスエントロピーを使用してエラーを最小化する 
  32. コスト = tf.reduce_mean(-tf.reduce_sum(y*tf.log(pred), reduction_indices=1))  
  33. # 勾配降下法 
  34. オプティマイザー = tf.train.GradientDescentOptimizer(learning_rate).minimize(コスト)  
  35.  
  36. # 変数を初期化する(つまり、デフォルト値を割り当てる)  
  37. 初期化 = tf.global_variables_initializer()  
  38.  
  39. # トレーニングを開始 
  40. tf.Session()を sessとして使用:  
  41. # 初期化を実行する 
  42. セッションの実行(初期化)  
  43. # トレーニングサイクル 
  44. 範囲内のエポックの場合(training_epochs):  
  45. 平均コスト = 0。  
  46. total_batch = int (mnist.train.num_examples/batch_size)  
  47. #すべてのバッチをループする 
  48. iが範囲(total_batch)の場合:  
  49. batch_xs、batch_ys = mnist.train.next_batch(batch_size)  
  50. # 最適化オペレーション(バックプロパゲーション)コストオペレーション(損失値を取得するため)を実行します 
  51. _, c = sess.run([オプティマイザ, コスト], feed_dict={x: batch_xs,  
  52. y: batch_ys})  
  53. # 平均損失を計算する 
  54. 平均コスト += c / 合計バッチ 
  55. # エポックステップごとにログを表示する 
  56. (エポック+1) % display_step == 0の場合:  
  57. print( "エポック:" , '%04d' % (エポック+1), "コスト=" , "{:.9f}" .format(avg_cost))  
  58.  
  59. print( "最適化が完了しました!" )  
  60.  
  61. # テストモデル 
  62. 正しい予測 = tf.equal(tf.argmax(予測, 1), tf.argmax(y, 1))  
  63. # 精度を計算する 
  64. 精度 = tf.reduce_mean( tf.cast (correct_prediction, tf.float32))  
  65. print( "精度: " , 精度評価({x: mnist.test.images, y: mnist.test.labels}))

比較的単純な機械学習アルゴリズムを Tensorflow を使用して実装するには、多くのスペースが必要です。ただし、Scikit-learn 自体には、Tensorflow ほど豊富なディープラーニング機能はありません。 Scikit-learn で、シンプルさと使いやすさを確保しながら、Tensorflow のようなディープラーニングをサポートする方法はありますか?答えは「はい」です。それが Scikit-Flow オープンソース プロジェクトです。このプロジェクトは後に Tensorflow プロジェクトに統合され、現在の TF Learn モジュールになりました。

TF Learn が線形回帰を実装する例を見てみましょう。

  1. "" " 線形回帰の例 " ""  
  2. __future__からabsolute_import、dividion、print_function をインポートします 
  3. tflearnをインポートする 
  4. # 回帰データ 
  5. X = [3.3,4.4,5.5,6.71,6.93,4.168,9.779,6.182,7.59,2.167,7.042,10.791,5.313,7.997,5.654,9.27,3.1]  
  6. Y = [1.7,2.76,2.09,3.19,1.694,1.573,3.366,2.596,2.53,1.221,2.827,3.465,1.65,2.904,2.42,2.94,1.3]  
  7. # 線形回帰グラフ 
  8. input_ = tflearn.input_data(shape=[なし])  
  9. 線形 = tflearn.single_unit(input_)  
  10. 回帰 = tflearn.regression(linear, 最適化 = 'sgd' , 損失 = 'mean_square' ,  
  11. メトリック= 'R2' 、学習率=0.01)  
  12. m = tflearn.DNN(回帰)  
  13. m.fit(X, Y, n_epoch=1000, show_metric= True 、 snapshot_epoch= False )  
  14. print( "\n回帰結果: " )  
  15. 印刷( "Y = " + str(m.get_weights(linear.W)) +  
  16. "*X + " + str(m.get_weights(linear.b)))  
  17.  
  18. print( "\nx = 3.2、3.3、3.4 のテスト予測:" )  
  19. 印刷(m.predict([3.2, 3.3, 3.4]))

TF Learn は Scikit-Learn の簡潔なプログラミング スタイルを継承しており、従来の機械学習手法を扱う際に非常に便利であることがわかります。 TF Learn が CNN (MNIST データセット) を実装する例を見てみましょう。

  1. "" " MNIST データセット分類タスク用の畳み込みニューラル ネットワーク  
  2. 参考文献:  
  3. Y. LeCun、L. Bottou、Y. Bengio P. Haffner。「勾配ベースの 
  4. 文書認識への学習の応用 IEEE議事録、  
  5. 86(11):2278-2324、1998年11月。  
  6. リンク:  
  7. [MNIST データセット] http://yann.lecun.com/exdb/mnist/  
  8. 「」 「  
  9.  
  10. __future__から、 dividion、print_function、absolute_import をインポートします  
  11. tflearnをインポートする 
  12. tflearn.layers.coreからinput_data、dropout、fully_connected をインポートします 
  13. tflearn.layers.convからconv_2d、max_pool_2d をインポートします 
  14. tflearn.layers.normalizationからlocal_response_normalization をインポートします 
  15. tflearn.layers.estimatorから回帰をインポートする 
  16.  
  17. # データの読み込み前処理 
  18. tflearn.datasets.mnistをmnistとしてインポートする 
  19. X、Y、testX、testY = mnist.load_data(one_hot= True )  
  20. X = X.reshape([-1, 28, 28, 1])  
  21. testX = testX.reshape([-1, 28, 28, 1])  
  22. # 畳み込みネットワークの構築 
  23. ネットワーク = input_data(shape=[なし、28、28、1]、名前= 'input' )  
  24. ネットワーク = conv_2d(ネットワーク、32、3、アクティベーション = 'relu' 、レギュラライザー = "L2" )  
  25. ネットワーク = max_pool_2d(ネットワーク、2)  
  26. ネットワーク = local_response_normalization(ネットワーク)  
  27. ネットワーク = conv_2d(ネットワーク、64、3、アクティベーション = 'relu' 、レギュラライザー = "L2" )  
  28. ネットワーク = max_pool_2d(ネットワーク、2)  
  29. ネットワーク = local_response_normalization(ネットワーク)  
  30. ネットワーク = 完全接続(ネットワーク、128、アクティベーション = 'tanh' )  
  31. ネットワーク = ドロップアウト(ネットワーク、0.8)  
  32. ネットワーク = 完全接続(ネットワーク、256、アクティベーション = 'tanh' )  
  33. ネットワーク = ドロップアウト(ネットワーク、0.8)  
  34. ネットワーク = 完全接続(ネットワーク、10、アクティベーション = 'softmax' )
  35. ネットワーク = 回帰(ネットワーク、オプティマイザー= 'adam' 、学習率=0.01、  
  36. 損失 = 'categorical_crossentropy' 名前= 'target' )  
  37.  
  38. # トレーニング 
  39. モデル = tflearn.DNN(ネットワーク、tensorboard_verbose=0)  
  40. モデル.fit({ '入力' :X}, { 'ターゲット' :Y}, n_epoch=20,  
  41. 検証セット=({ '入力' :テストX},{ 'ターゲット' :テストY}),  
  42. snapshot_step=100、show_metric= True 、run_id= 'convnet_mnist' )

ご覧のとおり、TF Learn に基づくディープラーニング コードも非常に簡潔です。

TF Learn は、TensorFlow 用の高レベルの Scikit-Learn のようなラッパーであり、ネイティブの TensorFlow および Scikit-Learn の代替手段を提供します。 Scikit-Learn に精通していて、長い TensorFlow コードにうんざりしているユーザーにとって、これはまさに朗報です。また、機械学習やデータマイニングの実践者にとっても、注意深く研究して習得する価値があります。

[[242643]]

恒昌立通のビッグデータ部門責任者兼シニアアーキテクトの王昊氏は、ユタ大学で学士号/修士号を取得し、国際経済貿易大学で実務MBAを取得しています。 Baidu、Sina、NetEase、Doubanなどの企業で長年にわたり研究開発と技術管理に携わっており、機械学習、ビッグデータ、推奨システム、ソーシャルネットワーク分析などの技術に長けています。 TVCGやASONAMなどの国際会議やジャーナルに8本の論文を発表している。私の学部論文は 2008 IEEE SMI *** 論文賞を受賞しました。

[51CTO オリジナル記事、パートナーサイトに転載する場合は、元の著者とソースを 51CTO.com として明記してください]

<<:  本当に良いものです!機械学習技術と市場の最強評価ガイド

>>:  自動運転車の運転分類と必要な処理能力

ブログ    
ブログ    

推薦する

...

...

制御可能な人工知能には未来がある

8月29日、2019年世界人工知能会議が上海で開幕した。世界各国の著名なテクノロジー企業や学界、産業...

...

...

2Dを3Dにするには、たった2枚の写真だけが必要です。このAIは、ろうそくを吹き消すプロセスを想像することができます。第一著者と第二著者はともに中国人です。

廃棄フィルム2枚がパチンと貼り合わされました!見逃した素晴らしい瞬間をすぐに蘇らせることができ、効果...

...

F#の並列ソートアルゴリズムは実装が簡単

F# の並列ソート アルゴリズムで最も一般的な方法の 1 つは、まず処理するデータを複数の部分に分割...

Appleは開発者がアプリのコードを書くのに役立つXcodeのアップデート版を開発中だ

2月18日、海外メディアの報道によると、AppleはXcodeプログラミングソフトウェアの新しい生成...

自動運転におけるディープラーニングベースの予測と計画の融合手法のレビュー

この記事は、Heart of Autonomous Driving の公開アカウントから許可を得て転...

...

...

Baidu が公式発表: 自動運転車は 2018 年に量産開始予定!

たった今、百度が公式発表しました。自動運転車は2018年に量産される予定です。 Subversion...

サイバー犯罪者はAIを利用してマルウェア攻撃ソフトウェアにサンドボックスを作成

2020 年に世界中の企業の 42% がサイバー攻撃を受けたことをご存知ですか? サイバー犯罪者が...