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 として明記してください]

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

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

ブログ    
ブログ    
ブログ    

推薦する

史上最大のチューリングテスト実験が完了! 150万人が1000万回の会話に参加し、相手が人間かAIかを判断した。

史上最大のチューリングテストの予備結果が出ました!今年 4 月中旬、AI 21 Lab は楽しいソー...

ディープラーニングのメリットが終わりを迎える中、AIは再び「死の谷」に直面しているのでしょうか?

[[384224]]大いに期待されているディープラーニングは、人工知能を再び AI の冬に突入させ...

オープンソース「AI史上最も重要な非公開会議」!マスク氏、ザッカーバーグ氏、その他のテクノロジー界の巨人が集まり、AIの将来について議論した

昨日、現地時間午前10時、AI業界のリーダーたちがワシントンに集まり、シューマー上院議員が主催するA...

AI開発シンポジウム:機械学習を農家に役立てる方法について議論

この記事は、公開アカウント「Reading the Core」(ID: AI_Discovery)か...

ディープラーニング思考

[[195107]]機械学習ルーチンほとんどの機械学習アルゴリズム(ディープラーニングを含む)は、実...

「AI+教育」が人気を集めているが、次の巨人は誰になるのか?

人工知能という学問分野が1956年に正式に提唱されて以来、会議やフォーラムでの華やかな「ホットワード...

仕事に同行することから出勤やフィットネスの管理まで、AI はますます多くのことを処理します。

過去2年間、人工知能によって人事部門が消滅するという議論をよく耳にしてきました。しかし、実際には誰も...

...

...

Llama 2を完全に置き換えます!白川2は歴史上最も完全なトレーニングの詳細を明らかにする

この国では、ラマの時代は終わった。 9月6日、百川知能は7Bと13Bのベースとチャットバージョンを含...

...

...

...

あらゆるシーンのあらゆるもの: リアルなオブジェクトの挿入 (さまざまな運転データの合成に役立ちます)

あらゆるシーンのあらゆるもの: フォトリアリスティックなビデオオブジェクト挿入論文リンク: http...

ガートナー:テクノロジープロバイダーの33%が2年以内にAIに100万ドル以上を投資する

ガートナーの新しい調査*によると、人工知能 (AI) 技術計画を持つテクノロジーおよびサービス プロ...