Pythonを使用したディープラーニング:ディープラーニングの初心者向けガイド



この記事では、Pythonを使用したディープラーニングの包括的で詳細な知識と、Pythonが日常生活でどれほど役立つかについて説明します。

2018-19年の最もホットなトピックの1つであり、正当な理由があります。機械やコンピュータプログラムが実際に人間に取って代わる時が来た業界では、非常に多くの進歩がありました。この Pythonによるディープラーニング この記事は、ディープラーニングとは何か、そしてこの移行がどのように可能になったのかを理解するのに役立ちます。この記事では、次のトピックについて説明します。

データサイエンスとそのコンポーネント

ええと、データサイエンスは何年も前から存在しているものです。 データサイエンス さまざまな手法とアルゴリズムを使用してデータから知識を抽出することです。





AIタイムライン-Pythonによるディープラーニング-Edureka

機械が人間の行動を模倣できるようにする技術です。 AIの背後にある考え方は、かなりシンプルでありながら魅力的です。それは、自分で意思決定を行うことができるインテリジェントなマシンを作ることです。何年もの間、コンピューターは人間の脳の力に匹敵することは決してないと考えられていました。



さて、当時は十分なデータと計算能力がありませんでしたが、今では ビッグデータ GPUの登場により、人工知能が可能になりました。

は、統計的手法を使用してマシンを経験に基づいて改善できるようにするAI技術のサブセットです。



ディープラーニング はMLのサブセットであり、多層ニューラルネットワークの計算を実行可能にします。ニューラルネットワークを使用して、人間のような意思決定をシミュレートします。

ディープラーニングの必要性

人工知能へのステップは機械学習です。機械学習はAIのサブセットであり、機械にデータへのアクセスを許可し、自分で学習して探索するように任せるべきであるという考えに基づいています。大規模なデータセットからのパターンの抽出を扱います。大きなデータセットの処理は問題ではありませんでした。

  • 機械学習アルゴリズム 高次元データを処理できません –入力と出力が多数ある場合:数千の次元を丸めます。このようなタイプのデータの処理と処理は非常に複雑になり、リソースを使い果たします。これは、 次元の呪い。

  • 直面した別の課題は、 抽出する特徴 。これは、結果を予測する上でも、より高い精度を達成する上でも重要な役割を果たします。したがって、特徴抽出なしで、 アルゴリズムの有効性はプログラマーの洞察力に大きく依存するため、プログラマーにとっての課題は大きくなります。

さて、ここでディープラーニングが助けになりました。ディープラーニングは 高次元データを処理できる また、 適切な機能に焦点を当てる そのままで。

ディープラーニングとは何ですか?

ディープラーニングは機械学習のサブセットであり、同様の機械学習アルゴリズムを使用してトレーニングを行います 前者が目標を達成できなかった場合に、より高い精度を達成するために。基本的に、 ディープラーニングは私たちの脳の機能を模倣しています つまり、経験から学びます。

値による受け渡しと参照による受け渡しjava

あなたが知っているように、私たちの脳は 数十億のニューロン それは私たちが素晴らしいことをすることを可能にします。小さな子供の脳でさえ、スーパーコンピューターを使っても解決するのが非常に難しい複雑な問題を解決することができます。では、どうすればプログラムで同じ機能を実現できるでしょうか。さて、これは私たちが理解しているところです 人工ニューロン(パーセプトロン) そして 人工ニューラルネットワーク。

パーセプトロンと人工ニューラルネットワーク

ディープラーニングは、脳細胞またはニューロンと呼ばれる脳の基本単位を研究します。ここで、生物学的ニューロンの機能と、知覚または人工ニューロンでこの機能をどのように模倣するかを理解しましょう。

  • 樹状突起: 他のニューロンから信号を受信します
  • 細胞体: すべての入力を合計します
  • アクソン: 他のセルに信号を送信するために使用されます

人工ニューロンまたは パーセプトロン 二項分類に使用される線形モデルです。これは、それぞれに特定の重みが与えられた一連の入力を持つニューロンをモデル化します。ニューロンはこれらの関数を計算します 加重 入力して出力します。

n個の入力を受け取ります(各機能に対応)。次に、それらの入力を合計し、変換を適用して、出力を生成します。 2つの機能があります。

  • 合計
  • 変換(アクティベーション)

重みは、特定の入力の有効性を示します。 入力の重みが大きいほど、ニューラルネットワークへの影響が大きくなります 。一方、 バイアス追加パラメータ パーセプトロンでは、ニューロンへの入力の加重和とともに出力を調整するために使用されます。これは、特定のデータに最適な方法でモデルを支援します。

活性化関数 入力を出力に変換します。しきい値を使用して出力を生成します。次のように、活性化関数として使用される多くの関数があります。

  • 線形またはアイデンティティ
  • ユニットまたはバイナリステップ
  • シグモイドまたはロジスティック
  • タン
  • ReLU
  • Softmax

上手。パーセプトロンが問題を解決すると思うなら、あなたは間違っています。 2つの大きな問題がありました:

  • 単層パーセプトロン 非線形分離可能データポイントを分類できません
  • 複雑な問題、これには 多くのパラメータ 単層パーセプトロンでは解決できません。

ここでの例と、マーケティングチームによる決定を下すために必要なパラメータの複雑さを考慮してください。

1つのニューロンは、それほど多くの入力を取り込むことができないため、この問題を解決するために複数のニューロンが使用されます。ニューラルネットワークは本当にただの さまざまな方法で接続されたパーセプトロンの構成 さまざまな活性化関数を操作します。

  • 入力ノード 外界からネットワークに情報を提供し、まとめて「入力層」と呼ばれます。
  • 隠れノード 計算を実行し、入力ノードから出力ノードに情報を転送します。非表示ノードのコレクションは「非表示レイヤー」を形成します。
  • 出力ノード まとめて「出力層」と呼ばれ、ネットワークから外部への情報の計算と転送を担当します。

パーセプトロンの動作、関連するさまざまなパラメーター、ニューラルネットワークのさまざまなレイヤーについて理解できたので、Pythonブログを使用してこのディープラーニングを続け、ディープラーニングのいくつかの優れたアプリケーションを見てみましょう。

ディープラーニングのアプリケーション

業界にはディープラーニングのさまざまなアプリケーションがあります。ここでは、日常のタスクに存在する重要なアプリケーションをいくつか紹介します。

  • 音声認識

  • 機械翻訳

  • 顔認識と自動タグ付け

  • バーチャルパーソナルアシスタント

  • 自動運転車

  • チャットボット

ディープラーニングにPythonを使用する理由

  • は、独自の属性を持つそのようなツールの1つです。 汎用プログラミング言語 あるように 使いやすい 分析的および定量的コンピューティングに関しては。
  • とても わかりやすい
  • Pythonは 動的に型付け
  • 巨大
  • 次のようなさまざまな目的のための幅広いライブラリ Numpy、Seaborn、Matplotlib、Pandas、Scikit-learn

理論はこれで十分です。小さいながらもエキサイティングな例を使用して、Pythonでディープラーニングを開始する方法を見てみましょう。

Pythonによるディープラーニング:パーセプトロンの例

さて、皆さんは「 または」 ゲート。出力は 1 入力のいずれかが 1。

したがって、パーセプトロンは、ORゲートの入力セットを2つのクラスに分割するセパレータまたは決定線として使用できます。

クラス1: 決定線の下にある0として出力を持つ入力。
クラス2: 決定線または区切り文字の上にある1として出力を持つ入力。

これまで、線形パーセプトロンを使用して入力データセットを2つのクラスに分類できることを理解していました。しかし、実際にはどのようにデータを分類するのでしょうか。

数学的には、パーセプトロンは、重み、入力、およびバイアスの方程式のように考えることができます。

ステップ1:必要なすべてのライブラリをインポートする

ここでは、1つのライブラリのみをインポートします。 TensorFlow

tensorflowをtfとしてインポートします

ステップ2:入力と出力のベクトル変数を定義する

次に、パーセプトロンの入力、出力、バイアスを格納するための変数を作成する必要があります。

train_in = [[0,0,1]、[0,1,1]、[1,0,1]、[1,1,1]] train_out = [[0]、[1]、[1]、 [1]]

ステップ3:重み変数を定義する

ここでは、重みに対して形状3×1のテンソル変数を定義し、最初にいくつかのランダムな値を割り当てます。

w = tf.Variable(tf.random_normal([3、1]、seed = 15))

ステップ4:入力と出力のプレースホルダーを定義する

実行時に外部入力を受け入れることができるように、プレースホルダーを定義する必要があります。

x = tf.placeholder(tf.float32、[None、3])y = tf.placeholder(tf.float32、[None、1])

ステップ5:出力と活性化関数を計算する

前に説明したように、パーセプトロンが受け取った入力は、最初にそれぞれの重みで乗算され、次に、これらすべての重み付き入力が合計されます。この合計値は、最終結果を取得するためにアクティベーションに送られます。

出力= tf.nn.relu(tf.matmul(x、w))

注:この場合、私は使用しました relu 私の活性化関数として。必要に応じて、任意のアクティベーション機能を自由に使用できます。

ステップ6:コストまたはエラーを計算する

コスト=平均二乗誤差を計算する必要があります。これは、パーセプトロン出力と目的の出力の差の2乗に他なりません。

損失= tf.reduce_sum(tf.square(output --y))

ステップ7:エラーを最小限に抑える

パーセプトロンの目標は、損失またはコストまたはエラーを最小限に抑えることです。そこで、ここでは最急降下法オプティマイザーを使用します。

オプティマイザー= tf.train.GradientDescentOptimizer(0.01)トレイン=オプティマイザー.minimize(loss)

ステップ8:すべての変数を初期化します

変数はでのみ定義されます tf.Variable。 したがって、定義された変数を初期化する必要があります。

init = tf.global_variables_initializer()sess = tf.Session()sess.run(init)

ステップ9:反復でパーセプトロンをトレーニングする

パーセプトロンをトレーニングする必要があります。つまり、エラーや損失を最小限に抑えるために、連続する反復で重みとバイアスの値を更新する必要があります。ここでは、パーセプトロンを100エポックでトレーニングします。

for i in range(100):sess.run(train、{x:train_in、y:train_out})cost = sess.run(loss、feed_dict = {x:train_in、y:train_out})print( 'Epoch-- '、i、'-損失-'、コスト)

ステップ10:出力

……

……

あなたがここで見ることができるように、損失はで始まりました 2.07 そしてで終わった 0.27

Pythonを使用したディープラーニング:ディープニューラルネットワークの作成

これで、パーセプトロンが正常に作成され、ORゲート用にトレーニングされました。この記事を続けて、入力レイヤー、非表示レイヤー、出力レイヤーを作成する独自のニューラルネットワークを最初から作成する方法を見てみましょう。

MNISTデータセットを使用します。 MNISTデータセットは 60,000トレーニング サンプルと 10,000回のテスト 手書きの数字画像のサンプル。画像のサイズは 28×28ピクセル と出力は間にあることができます 0-9

ここでのタスクは、画像に存在する数字を正確に識別できるモデルをトレーニングすることです。

まず、以下のインポートを使用して、Python3からPython2.6以降に印刷機能を導入します。 __future__ステートメントは、言語に関する基本的なことを変更するため、ファイルの先頭近くに配置する必要があります。したがって、コンパイラーは最初からそれらについて知る必要があります。

from __future__ import print_function

以下は、すべてのステップでコメント付きのコードです

#MNISTデータをtensorflow.examples.tutorials.mnistからインポートしますimport input_data mnist = input_data.read_data_sets( '/ tmp / data /'、one_hot = True)import tensorflow as tf import matplotlib.pyplot as plt#パラメーターlearning_rate = 0.001 training_epochs = 15 batch_size = 100 display_step = 1#ネットワークパラメーターn_hidden_​​1 = 256#第1層の特徴数n_hidden_​​2 = 256#第2層の特徴数n_input = 784#MNISTデータ入力(img形状:28 * 28)n_classes = 10#MNIST合計クラス( 0〜9桁)#tfグラフ入力x = tf.placeholder( 'float'、[None、n_input])y = tf.placeholder( 'float'、[None、n_classes])#モデルを作成def Multimedia_perceptron(x、weights 、バイアス):#RELUアクティベーションを使用した非表示レイヤーlayer_1 = tf.add(tf.matmul(x、weights ['h1'])、bias ['b1'])layer_1 = tf.nn.relu(layer_1)#非表示レイヤーRELUアクティベーションありlayer_2 = tf.add(tf.matmul(layer_1、weights ['h2'])、bias ['b2'])layer_2 = tf.nn.relu(layer_2)#線形アクティベーション付きの出力レイヤーout_layer = tf。 matmul(レイヤー_2、weights ['out'])+ bias ['out'] return out_layer#レイヤーの重みとバイアスの重みを格納= {'h1':tf.Variable(tf.random_normal([n_input、n_hidden_​​1]))、 'h2' :tf.Variable(tf.random_normal([n_hidden_​​1、n_hidden_​​2]))、 'out':tf.Variable(tf.random_normal([n_hidden_​​2、n_classes]))}バイアス= {'b1':tf.Variable(tf。 random_normal([n_hidden_​​1]))、 'b2':tf.Variable(tf.random_normal([n_hidden_​​2]))、 'out':tf.Variable(tf.random_normal([n_classes]))}#モデルを構築するpred = multiple_perceptron (x、重み、バイアス)#損失とオプティマイザーのコストを定義= tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits = pred、labels = y))optimizer = tf.train.AdamOptimizer(learning_rate = Learning_rate).minimize(cost) #変数の初期化init = tf.global_variables_initializer()#コスト履歴と精度履歴を格納するための空のリストを作成cost_history = [] Accuracy_history = []#tf.Session()をsessとしてグラフを起動します:sess.run(init )#範囲内のエポックのトレーニングサイクル(training_epochs): avg_cost =0。total_batch= int(mnist.train.num_examples / batch_size)#range(total_batch)内のiのすべてのバッチをループします:batch_x、batch_y = mnist.train.next_batch(batch_size)#最適化操作(backprop)とコストを実行しますop(損失値を取得するため)_、c = sess.run([optimizer、cost]、feed_dict = {x:batch_x、y:batch_y})#平均損失を計算するavg_cost + = c / total_batch#エポックステップごとにログを表示する場合epoch%display_step == 0:correct_prediction = tf.equal(tf.argmax(pred、1)、tf.argmax(y、1))#精度の計算精度= tf.reduce_mean(tf.cast(correct_prediction、 'float') )acu_temp = Accuracy.eval({x:mnist.test.images、y:mnist.test.labels})#リストに精度を追加しますaccuracy_history.append(acu_temp)#コスト履歴を追加しますcost_history.append(avg_cost)print ( 'Epoch:'、 '%04d'%(epoch + 1)、 '-cost ='、 '{:. 9f}'。format(avg_cost)、 '-Accuracy ='、acu_temp)print( 'Optimization Finished! ')#コスト履歴をプロットplt.plot(cost_history)plt.show()#精度履歴をプロットplt.plot(accuracy _history)plt.show()#テストモデルcorrect_prediction = tf.equal(tf.argmax(pred、1)、tf.argmax(y、1))#精度の計算精度= tf.reduce_mean(tf.cast(correct_prediction、 ' float '))print(' Accuracy: '、accuracy.eval({x:mnist.test.images、y:mnist.test.labels}))

出力:

javascriptとjqueryの違い

これで、このPythonによるディープラーニングの記事は終わりです。ディープラーニングのさまざまなコンポーネント、そのすべての始まり、Pythonを使用して簡単なパーセプトロンとディープニューラルネットワークを作成する方法について理解していただければ幸いです。

エドゥレカの 業界の要件と要求に従って、業界の専門家によってキュレーションされます。 SoftMax関数、オートエンコーダニューラルネットワーク、制限付きボルツマンマシン(RBM)などの概念を習得し、KerasやTFLearnなどのライブラリを操作します。このコースは、リアルタイムのケーススタディを使用して業界の専門家によって特別にキュレーションされています。

質問がありますか? 「Pythonを使用したディープラーニング」のコメントセクションにその旨を記載してください。折り返しご連絡いたします。