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

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

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

ブログ    
ブログ    
ブログ    

推薦する

Java ソートアルゴリズムについてどれくらい知っていますか?

今日は、Java のさまざまなソート アルゴリズムについてお話します。以前、上級開発者との面接があり...

製造業における人工知能の8つの応用シナリオ

人工知能の概念は、60年以上前の1950年代に初めて提案されました。しかし、モノのインターネット、ビ...

...

AIの次の目的地:洗練された生活シナリオのインテリジェント時代

[[348783]] Canvaからの画像テクノロジーは生活の中でどのような役割を果たしているのでし...

2024 年の CIO の 14 の優先事項とトレンド

GenAI は 2024 年の最大のテクノロジー トレンドとなり、新しいツールのレビュー、インフラス...

強化学習のフレームワークは AI 開発に新たなアイデアを生み出すでしょうか?

[[256809]]アルゴリズムを理解しておらず、AI機能を備えたアプリを開発したいアプリ開発者の...

2023年の生成AIの包括的なレビュー

2023年には、生成AIが開発者のアプリケーション構築支援において飛躍的な進歩を遂げ、大手ツールベン...

デジタルツインの登場: 医薬品開発における今後の革命

51年前、アポロ13号が宇宙に打ち上げられました。打ち上げ直後、宇宙船は大きな爆発に遭遇した。宇宙船...

...

機械学習が失敗したらどうするか: 計算学習理論

導入顔認識モデルを構築し、検証セットを使用してテスト セットでの実験のパラメータを調整しているとしま...

...

...

ディープラーニングの問題を無視してはいけない。ゲイリー・マーカスはそれに冷水を浴びせる義務がある

ニューヨーク大学の心理学教授であるゲイリー・マーカス氏は、かつてウーバーの人工知能研究所の所長を務め...