[51CTO.comより引用] 海外のデータサイエンス市場に詳しい人なら誰でも、2017年に海外のデータサイエンスで最もよく使われている3つのテクノロジーがSpark、Python、MongoDBであることを知っています。 Python といえば、ビッグデータを扱う人なら誰でも Scikit-learn と Pandas をよく知っているでしょう。 [[242642]] Scikit-learn は、最も一般的に使用されている Python 機械学習フレームワークです。大手インターネット企業でアルゴリズムに取り組んでいるエンジニアは、アルゴリズムのスタンドアロン バージョンを実装するときに、多かれ少なかれ Scikit-learn を使用します。 TensorFlowはさらに有名です。ディープラーニングを行う人ならTensorFlowを知らないということはあり得ません。 例を見てみましょう。この例は、従来の機械学習アルゴリズムであるロジスティック回帰の実装です。 ご覧のとおり、この例ではロジスティック回帰の主な機能を完了するために 3 行のコードのみが使用されています。 TensorFlow を使用して同じコードを実装するには何行必要か見てみましょう。次のコードは GitHub からのものです: - '' '
- TensorFlow ライブラリを使用したロジスティック回帰学習アルゴリズムの例。
- この例ではMNISTデータベースを使用しています 手書きの数字
- (http://yann.lecun.com/exdb/mnist/)
- 著者: アイメリック・ダミアン
- プロジェクト: https://github.com/aymericdamien/TensorFlow-Examples/
- '' '
- __future__からprint_function をインポートする
- テンソルフローをtfとしてインポートする
- # MNISTデータをインポートする
- tensorflow.examples.tutorials.mnistからinput_dataをインポートします
- mnist = input_data.read_data_sets( "/tmp/data/" 、 one_hot= True )
-
- # パラメータ
- 学習率 = 0.01
- トレーニングエポック = 25
- バッチサイズ = 100
- 表示ステップ = 1
-
- # tf グラフ入力
- x = tf.placeholder(tf.float32, [None, 784]) #形状 28*28=784のmnist データ画像
- y = tf.placeholder(tf.float32, [None, 10]) # 0~9の数字の認識 => 10クラス
-
- #モデルの重みを設定する
- W = tf.Variable(tf.zeros([784, 10]))
- b = tf.Variable(tf.zeros([10]))
-
- # モデルの構築
- pred = tf.nn.softmax(tf.matmul(x, W) + b) # ソフトマックス
-
- #クロスエントロピーを使用してエラーを最小化する
- コスト = tf.reduce_mean(-tf.reduce_sum(y*tf.log(pred), reduction_indices=1))
- # 勾配降下法
- オプティマイザー = tf.train.GradientDescentOptimizer(learning_rate).minimize(コスト)
-
- # 変数を初期化する(つまり、デフォルト値を割り当てる)
- 初期化 = tf.global_variables_initializer()
-
- # トレーニングを開始
- tf.Session()を sessとして使用:
- # 初期化を実行する
- セッションの実行(初期化)
- # トレーニングサイクル
- 範囲内のエポックの場合(training_epochs):
- 平均コスト = 0。
- total_batch = int (mnist.train.num_examples/batch_size)
- #すべてのバッチをループする
- iが範囲内(total_batch)の場合:
- batch_xs、batch_ys = mnist.train.next_batch(batch_size)
- # 最適化オペレーション(バックプロパゲーション)とコストオペレーション(損失値を取得するため)を実行します
- _, c = sess.run([オプティマイザ, コスト], feed_dict={x: batch_xs,
- y: batch_ys})
- # 平均損失を計算する
- 平均コスト += c / 合計バッチ
- # エポックステップごとにログを表示する
- (エポック+1) % display_step == 0の場合:
- print( "エポック:" , '%04d' % (エポック+1), "コスト=" , "{:.9f}" .format(avg_cost))
-
- print( "最適化が完了しました!" )
-
- # テストモデル
- 正しい予測 = tf.equal(tf.argmax(予測, 1), tf.argmax(y, 1))
- # 精度を計算する
- 精度 = tf.reduce_mean( tf.cast (correct_prediction, tf.float32))
- print( "精度: " , 精度評価({x: mnist.test.images, y: mnist.test.labels}))
比較的単純な機械学習アルゴリズムを Tensorflow を使用して実装するには、多くのスペースが必要です。ただし、Scikit-learn 自体には、Tensorflow ほど豊富なディープラーニング機能はありません。 Scikit-learn で、シンプルさと使いやすさを確保しながら、Tensorflow のようなディープラーニングをサポートする方法はありますか?答えは「はい」です。それが Scikit-Flow オープンソース プロジェクトです。このプロジェクトは後に Tensorflow プロジェクトに統合され、現在の TF Learn モジュールになりました。 TF Learn が線形回帰を実装する例を見てみましょう。 - "" " 線形回帰の例 " ""
- __future__からabsolute_import、dividion、print_function をインポートします
- tflearnをインポートする
- # 回帰データ
- 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]
- 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]
- # 線形回帰グラフ
- input_ = tflearn.input_data(shape=[なし])
- 線形 = tflearn.single_unit(input_)
- 回帰 = tflearn.regression(linear, 最適化 = 'sgd' , 損失 = 'mean_square' ,
- メトリック= 'R2' 、学習率=0.01)
- m = tflearn.DNN(回帰)
- m.fit(X, Y, n_epoch=1000, show_metric= True 、 snapshot_epoch= False )
- print( "\n回帰結果: " )
- 印刷( "Y = " + str(m.get_weights(linear.W)) +
- "*X + " + str(m.get_weights(linear.b)))
-
- print( "\nx = 3.2、3.3、3.4 のテスト予測:" )
- 印刷(m.predict([3.2, 3.3, 3.4]))
TF Learn は Scikit-Learn の簡潔なプログラミング スタイルを継承しており、従来の機械学習手法を扱う際に非常に便利であることがわかります。 TF Learn が CNN (MNIST データセット) を実装する例を見てみましょう。 - "" " MNIST データセット分類タスク用の畳み込みニューラル ネットワーク。
- 参考文献:
- Y. LeCun、L. Bottou、Y. Bengio 、 P. Haffner。「勾配ベースの
- 文書認識への学習の応用」 IEEEの議事録、
- 86(11):2278-2324、1998年11月。
- リンク:
- [MNIST データセット] http://yann.lecun.com/exdb/mnist/
- 「」 「 」
-
- __future__から、 dividion、print_function、absolute_import をインポートします
- tflearnをインポートする
- tflearn.layers.coreからinput_data、dropout、fully_connected をインポートします
- tflearn.layers.convからconv_2d、max_pool_2d をインポートします
- tflearn.layers.normalizationからlocal_response_normalization をインポートします
- tflearn.layers.estimatorから回帰をインポートする
-
- # データの読み込みと前処理
- tflearn.datasets.mnistをmnistとしてインポートする
- X、Y、testX、testY = mnist.load_data(one_hot= True )
- X = X.reshape([-1, 28, 28, 1])
- testX = testX.reshape([-1, 28, 28, 1])
- # 畳み込みネットワークの構築
- ネットワーク = input_data(shape=[なし、28、28、1]、名前= 'input' )
- ネットワーク = conv_2d(ネットワーク、32、3、アクティベーション = 'relu' 、レギュラライザー = "L2" )
- ネットワーク = max_pool_2d(ネットワーク、2)
- ネットワーク = local_response_normalization(ネットワーク)
- ネットワーク = conv_2d(ネットワーク、64、3、アクティベーション = 'relu' 、レギュラライザー = "L2" )
- ネットワーク = max_pool_2d(ネットワーク、2)
- ネットワーク = local_response_normalization(ネットワーク)
- ネットワーク = 完全接続(ネットワーク、128、アクティベーション = 'tanh' )
- ネットワーク = ドロップアウト(ネットワーク、0.8)
- ネットワーク = 完全接続(ネットワーク、256、アクティベーション = 'tanh' )
- ネットワーク = ドロップアウト(ネットワーク、0.8)
- ネットワーク = 完全接続(ネットワーク、10、アクティベーション = 'softmax' )
- ネットワーク = 回帰(ネットワーク、オプティマイザー= 'adam' 、学習率=0.01、
- 損失 = 'categorical_crossentropy' 、名前= 'target' )
-
- # トレーニング
- モデル = tflearn.DNN(ネットワーク、tensorboard_verbose=0)
- モデル.fit({ '入力' :X}, { 'ターゲット' :Y}, n_epoch=20,
- 検証セット=({ '入力' :テストX},{ 'ターゲット' :テストY}),
- 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 として明記してください] |