開発者は、機械学習を始めたい場合は、まずアルゴリズムの仕組みを学ぶ必要があるとよく言います。私の経験はそうでないことを示しています。全体像、つまりアプリケーションがどのように機能するかを見ることができるはずです。これを理解すると、深く掘り下げて、アルゴリズムの内部動作を調べるのがはるかに簡単になります。それでは、どのようにして直感を開発し、機械学習の全体像を理解するのでしょうか?これを行う良い方法は、機械学習モデルを作成することです。これらのすべてのアルゴリズムを最初から作成する方法がまだわからないと仮定すると、これらのすべてのアルゴリズムが既に実装されているライブラリを使用する必要があります。そのライブラリはTensorFlowです。この記事では、テキストをカテゴリに分類するための機械学習モデルを作成します。次のトピックについて説明します。TensorFlowの仕組み機械学習モデルとはニューラルネットワークとはニューラルネットワークの学習方法データを操作してニューラルネットワークの入力に渡す方法モデルを実行して予測結果を取得する方法おそらく多くの新しいことを学ぶでしょうから、始めましょう!TensorFlowTensorFlowは、Googleが最初に作成した機械学習用のオープンソースライブラリです。ライブラリの名前は、ライブラリの操作方法を理解するのに役立ちます。テンソルは、グラフのノードを流れる多次元配列です。tf.GraphTensorFlowのすべての計算は、データフローグラフとして表されます。このグラフには2つの要素があります。計算の単位を表すtf.Operationのセットデータの単位を表すtf.Tensorのセットこれがすべてどのように機能するかを確認するには、このデータフローグラフを作成します。[1,1,1]を定義します。グラフはtf.Tensorと連携してデータの単位を表すため、定数テンソルを作成します。tf.constant([1,1,1])次に、オペレーションユニットを定義します。tf.add(x、y)すべてのグラフ要素があります。次に、グラフを作成する必要があります。tf.add(x、y)これがTensorFlowワークフローの仕組みです。最初にグラフを作成してから初めて計算を実行できます(実際に操作でグラフノードを「実行」)。グラフを実行するには、tf.Sessionを作成する必要があります。tf.Sessiontf.Sessionオブジェクトは、Operationオブジェクトが実行される環境をカプセル化し、Tensorオブジェクトが評価されます(ドキュメントから)。そのためには、セッションで使用されるグラフを定義する必要があります。tf.add(x、y)操作を実行するには、メソッドtf.Session.run()を使用します。このメソッドは、必要なグラフフラグメントを実行してすべてのOperationオブジェクトを実行し、引数フェッチで渡されたすべてのTensorを評価することにより、TensorFlow計算の1つの「ステップ」を実行します。7]予測モデルTensorFlowの仕組みがわかったので、予測モデルの作成方法を学習する必要があります。機械学習アルゴリズム+データ=予測モデルモデルを構築するプロセスは次のとおりです。ご覧のとおり、モデルはデータで「トレーニング」された機械学習アルゴリズムで構成されています。モデルを取得すると、次のような結果が得られます。作成するモデルの目標は、テキストをカテゴリに分類することです。次のように定義します。入力:テキスト、結果:カテゴリすべてのテキストにラベルが付けられたトレーニングデータセットがあります(すべてのテキストには、どのカテゴリに属する​​かを示すラベルがあります)。機械学習では、この種のタスクは教師あり学習と呼ばれます。「正しい答えを知っています。このアルゴリズムは、トレーニングデータを繰り返し予測し、教師によって修正されます。」—ジェイソンブラウンリーデータをカテゴリに分類するため、分類タスクでもあります。モデルを作成するには、ニューラルネットワークを使用します。ニューラルネットワークニューラルネットワークは計算モデルです(数学言語と数学概念を使用してシステムを記述する方法)。これらのシステムは、明示的にプログラムされるのではなく、自己学習およびトレーニングされます。ニューラルネットワークは、中枢神経系に触発されています。それらには、ニューロンに似たノードが接続されています。パーセプトロンは、最初のニューラルネットワークアルゴリズムでした。この記事では、パーセプトロンの内部の働きを非常によく説明しています(「人工ニューロンの内部」アニメーションは素晴らしいです)。ニューラルネットワークの仕組みを理解するために、実際にTensorFlowを使用してニューラルネットワークアーキテクチャを構築します。Damienによって使用されました。ニューラルネットワークアーキテクチャニューラルネットワークには2つの隠れ層があります(ネットワークが持つ隠れ層の数を選択する必要がありますが、これはアーキテクチャ設計の一部です)。各非表示レイヤーの役割は、入力を出力レイヤーが使用できるものに変換することです。非表示レイヤー1また、1番目の非表示レイヤーに含めるノードの数を定義する必要があります。これらのノードは、フィーチャまたはニューロンとも呼ばれ、上の図では各円で表されています。入力レイヤーでは、すべてのノードがデータセットの単語に対応します(これがどのように機能するかは後で確認します)。ここで説明したように、各ノード(ニューロン)には重みが乗算されます。すべてのノードには重み値があり、トレーニングフェーズ中に、ニューラルネットワークは正しい出力を生成するためにこれらの値を調整します(これについては後で説明します)。各入力ノードに重みを掛けるだけでなく、ネットワークはバイアス(ニューラルネットワークにおけるバイアスの役割)も追加します。入力に重みを乗算し、値をバイアスに加算した後のアーキテクチャでは、データもアクティベーション関数を通過します。このアクティベーション関数は、各ノードの最終出力を定義します。類推:各ノードがランプであると想像してください。ランプが点灯するかどうかは、アクティベーション関数によってわかります。アクティベーション関数には多くの種類があります。修正された線形ユニット(ReLu)を使用します。この関数は次のように定義されます。非表示レイヤー22番目の隠れ層は、1番目の隠れ層とまったく同じことを行いますが、2番目の隠れ層の入力は1番目の隠れ層の出力になります。最後に、最後の層である出力層に到達しました。ワンホットエンコーディングを使用して、このレイヤーの結果を取得します。このエンコードでは、1ビットのみの値が1で、他のすべてのビットの値はゼロです。|したがって、出力ノードの数は、入力データセットのクラスの数です。出力レイヤーの値にも重みが乗算され、バイアスも追加されますが、アクティブ化関数は異なります。各テキストにカテゴリのラベルを付けたい場合、これらのカテゴリは相互に排他的です(テキストは同時に2つのカテゴリに属しません)。これを考慮するには、ReLuアクティベーション関数を使用する代わりに、Softmax関数を使用します。この関数は、各単位の出力を0〜1の値に変換し、すべての単位の合計が1に等しくなるようにします。これにより、出力は各カテゴリの各テキストの確率を示します。|これで、ニューラルネットワークのデータフローグラフができました。これまで見てきたすべてをコードに変換すると、結果は次のようになります。']out_layer_additionを返す(出力層のアクティベーション機能のコードについては後で説明します。前に見たように、ネットワークのトレーニング中に重み値が更新されます。TensorFlow環境でこれがどのように発生するかを見てみましょう。tf.Variable重みとバイアスは変数(tf.Variable)に保存されます。これらの変数は、run()の呼び出し間でグラフの状態を維持します。機械学習では、通常、正規分布を介して重みとバイアス値を開始します。'out':tf.Variable(tf.random_normal([n_classes]))}ネットワークを初めて実行するとき(つまり、重み値は正規分布によって定義された値です):入力値:x重み:wバイアス:b出力値:z期待値:期待ネットワークが学習しているかどうかを知るには、出力値(z)を期待値(予想)と比較する必要があります。この差(損失)をどのように計算しますか?それを行うには多くの方法があります。分類タスクを使用しているため、損失の最良の尺度はクロスエントロピー誤差です。McCaffreyは、これがこの種のタスクに最適な方法である理由について素晴らしい説明を書きました。TensorFlowでは、tf.nn.softmax_cross_entropy_with_logits()メソッド(ここではsoftmaxアクティベーション関数)を使用してクロスエントロピーエラーを計算し、平均エラー(tf.reduce_mean())を計算します。tf.reduce_mean(entropy_loss)出力エラー(取得した値と正しい値の差)を最小限に抑えるために、重みとバイアスの最適な値を見つけたいと思います。これを行うには、勾配降下法を使用します。勾配降下を計算するアルゴリズムも多数あります。適応モーメント推定(Adam)を使用します。TensorFlowでこのアルゴリズムを使用するには、learning_rate値を渡す必要があります。これにより、値の増分ステップが決定され、最適な重み値が見つかります。メソッドtf.train.AdamOptimizer(learning_rate).minimize(loss)は、2つのことを行う構文糖衣です。compute_gradients(loss、)apply_gradients()このメソッドはすべてのtf.Variablesを新しい値で更新するため、変数のリストを渡す必要はありません。これでネットワークをトレーニングするコードができました。使用するデータセットには英語のテキストが多数含まれているため、このデータを操作してニューラルネットワークに渡す必要があります。そのためには、次の2つのことを行います。単語ごとにインデックスを作成する各テキストのマトリックスを作成します。テキストに単語が含まれている場合は値は1、そうでない場合は0です。このプロセスを理解するためのコードを見てみましょう。0.]ラベル(テキストのカテゴリ)でも同じようになりますが、ここではワンホットエンコードを使用します。1.]グラフを実行して結果を取得するここで最も重要なのは、モデルから結果を取得することです。入力データセットを詳しく見てみましょう。データセット20のトピックに関する18.000の投稿を含むデータセットである20のニュースグループを使用します。このデータセットを読み込むには、scikit-learnライブラリを使用します。comp.graphics、sci.space、rec.sport.baseballの3つのカテゴリのみを使用します。scikit-learnには、トレーニング用とテスト用の2つのサブセットがあります。モデルの作成中に選択を妨げる可能性があるため、テストデータを確認しないことをお勧めします。この特定のテストデータを予測するモデルを作成するのではなく、適切に一般化したモデルを作成します。これは、データセットをロードする方法です。categories)モデルのトレーニングニューラルネットワークの用語では、1つのエポック=すべてのトレーニング例の1つのフォワードパス(出力値の取得)と1つのバックワードパス(重みの更新)です。None)この記事の最初のデータフローグラフでは、合計演算を使用しましたが、実行するもののリストを渡すこともできます。このニューラルネットワークの実行では、損失の計算と最適化の2つのステップを通過します。feed_dictパラメーターは、各実行ステップのデータを渡す場所です。このデータを渡すには、tf.placeholdersを定義する必要があります(feed_dictにフィードするため)。TensorFlowのドキュメントにあるように:「プレースホルダーは、フィードのターゲットとしてのみ機能します。初期化されておらず、データも含まれていません。」—ソースしたがって、次のようにプレースホルダーを定義します。"output")トレーニングデータをバッチに分けます。[None、...])を使用してプレースホルダーを作成することにより、可変バッチディメンションを指定できます。形状のNone要素は、可変サイズのディメンションに対応しています。」—ソースモデルのテスト中に辞書に大きなバッチを入力します。そのため、可変バッチディメンションを定義する必要があります。get_batches()関数は、バッチのサイズを含むテキストの数を提供します。これで、モデルを実行できます。{input_tensor:batch_x、output_tensor:batch_y})これで、訓練されたモデルができました。テストするには、グラフ要素も作成する必要があります。精度:0.75以上です!ニューラルネットワークを使用してテキストをカテゴリに分類するモデルを作成しました。おめでとうございます!最終コードが記載されたノートブックをここで見ることができます。ヒント:定義した値を変更して、変更がトレーニング時間とモデルの精度にどのように影響するかを確認します。質問や提案はありますか?コメントに残してください。ああ、読んでくれてありがとう!この記事は役に立ちましたか?毎月、詳細な記事を書くように最善を尽くしています。新しい記事を公開するときにメールを受け取ることができます。クリックして友達と共有すると、とても意味があります。データサイエンスと機械学習の詳細については、こちらをご覧ください。dupliceopportunita.com。