まず、ニューラルネットワークアルゴリズムは、あなたが知っている必要がありCNN(製品のボリュームニューラルネットワーク)上で、実際に知識ポイントの多くの組み合わせです:
ここで私は前にまとめた2つの知識ポイント(機械学習ベースのアンドリュー・ウさん)があります
コスト関数:
コスト関数の
コスト関数(費用関数)で定義されているセット全体トレーニングすべて、上のサンプルの平均誤差、すなわち、平均損失関数。
私のブログの特定の理解を参照してください。
https://blog.csdn.net/qq_40594554/article/details/97389489
勾配降下:
勾配降下は、一般的に単変量勾配降下を説明するが、一般的に、多変量勾配降下法で使用されます
単変量勾配降下我々は最小二乗法を理解することができ、多変量勾配降下は、あなたが私のブログを見ることができる詳細に説明進化した知識に基づいています。
https://blog.csdn.net/qq_40594554/article/details/97391667
ここでは、上記の知識の基礎を持って、製品のボリュームニューラルネットワーク内の神経回路網の深さを理解します:
あなたは、私がこれら二つのニューラルネットワーク関連の知識を理解して見ることができます
ニューラルネットワーク:https://blog.csdn.net/qq_40594554/article/details/97399935
ニューラルネットワークの取得:https://blog.csdn.net/qq_40594554/article/details/97617154
ニューラルネットワーク・プロセスは、実質的に次のように:
例えば:私たちは3件のデータがあります。このニューラルネットワークにX1、X2、X3、我々の入力を、我々は、我々は、出力層の中間層、L3のための入力層L1、L2を呼び出します
私たちの簡単な言葉では説明した:すなわち、私たちの入力層L1の3つのデータで、3つのニューラルユニットA1、A2、A3、X1、X2、X3は異なる重量値A1を占める前記,, X1、X2、X3でそして、異なる重みの所持でA2、X1、X2、X3は、A3で異なる重みを占めます
コスト関数の最適解、すなわち最適ウェイト、A2、A1結論、A3の値、及びA1、A2、A3および神経細胞のL3を介して、重量計算された出力によって、どのそれは非常に理解していない場合、あなたは上記の私のブログを参照してくださいすることができ、最も簡単なニューラルネットワークの一つです。
今、私は一般的なニューラルネットワークを達成tensorflow:つまり、中間層のいくつかの層によって重量を決定します。
黒のクリップに似て上記の計算に関連するニューロンは、計算は、我々は非常に大きい結果は、一般的なコンピューティングニューロンの伝統的なニューラルネットワーク・コンピューティングでは、知っている最後ではないので、従来のニューラルネットワークは満たすことができないことを示しています、発生しやすい計算集約が、低精度の可能性なので、そこにある製品ロールのニューラルネットワークは!
上の図は、我々は非常に重みを計算する必要があり、我々はオーバーフィッティングを防止するために、データのサイズに基づいて確立される必要があり、あまりフィット我々のモデルを構築し、学習サンプルの多くを必要とします。
このように、CNNアルゴリズム受容野と共有重みはパラメータの数を減らすに示すように(これが何を意味するかBaiduのを理解することができます)、ニューラルネットワークを訓練する必要があります。
実際には、製品のボリュームニューラルネットワークは、理解しやすいです。
彼の最も単純な関連手順: - 細胞層 - 層累積体積 - 巻層製品細胞層の完全接続層-....-
プロット巻か層:コンボリューションカーネルのステップに従って畳み込みカーネルを介してデータ、ステップ走査による工程、得られた新たな特徴マップ
プール層:図は、派生核スキャンコンボリューションによって特徴づけられるが、プールのために、プーリング層は、実際には、図の機能を強化する手段です。
コンボリューション層(あなたは畳み込みカーネルで何Baiduのできることを示唆しています):
(一般に最大プールし、プールした平均値で使用される)細胞層:
実際には、主に取得し、上記の手段により、機能を向上させます
完全接続層として、すなわち、結果をプールすることにより、励起関数によって、望ましくない特性図、及び出力を除外する。
私はここで手書き数字認識のソースを与えます:
インポート TF AS tensorflow #9.50 から tensorflow.examples.tutorials.mnist インポートINPUT_DATA #1 負荷データが設定されます MNISTは= input_data.read_data_sets(" MNNIST_data "、one_hot = TRUE) #ダウンロードオンラインデータセット #印刷(MNIST) #各バッチ倍の大きさ、各ニューラルネットワークの訓練に100枚の絵に入れて。 = 100のBATCH_SIZEの#は、バッチの総数を計算する n_bach = mnist.train.num_examples BATCH_SIZE // #//割り切れる #は重みを初期化DEF :weight_variable(形状) inital = tf.truncated_normal(形状、STDDEV = 0.1 ) リターン tf.Variable(inital) #の初期オフセット値 DEF bias_variable(形状): 初期 = tf.constant(0.1、形状= 形状) を返すtf.Variable(初期) #畳み込み層 DEFのconv2d(X、Wは): 戻り TF .nn.conv2d(X、Wは、ストライド= [1,1,1,1]、パディング= ' SAME ' ) #1 このライブラリの使用、tf.nn.conv2d #プールされた層の DEFのmax_pool_2(X): 戻り TF .nn.max_pool(X、ksize = [1,2,2,1]、ストライド= [1,2,2,1]、パディング= ' SAME ' ) #2プレースホルダ定義 X = tf.placeholder(TFを。 float32、[なし]、784])#784 Y = tf.placeholder(tf.float32、[なし]、[10]) #0-9,10番号 #[BATCH、in_height、in_width、in_channels]変換4Dベクトルxの形式を変更 x_image = tf.reshape (X、[ - 1,28,28,1 ]) #第一層畳み込み重みを初期化してオフセット値を W_conv1 weight_variable =([5,5,1,32]) #* 5の試料を用いウィンドウは、32は畳み込みカーネル面から引き出された前記 b_conv1 bias_variable =([32]) #の核バイアスの各畳み込み #重みベクトルx_imageと入り組ん、プラスオフセット値、及びその後活性化関数はrelu適用 h_conv1 = tf.nn.relu(conv2d(x_image、W_conv1)+ b_conv1) h_pool1 = max_pool_2(h_conv1)位ためプーリング最高 位第二の畳み込み層重量及びオフセット値の値を初期化 W_conv2 = weight_variable([5,5,32,64]) #平面から32個の畳み込みカーネル抽出機能、サンプリング・ウィンドウを* 5を用い b_conv2 bias_variable =([64])は#各畳み込みカーネルのオフセット値 #ベクトルがx_imageと右畳み込みプラスオフセット値は、次いで、活性化関数にrelu適用 h_conv2 = tf.nn.relu(conv2d(h_pool1、W_conv2)+ b_conv2) h_pool2 = max_pool_2(h_conv2) #ためのプーリングマックス #を右最初完全な接続の値を初期化 W_fcl weight_variable =(7×7×64,1024]) #7 * 7 * 64ニューロン、完全に接続されたニューラル層1024 b_fcl bias_variable =([1024]) #1024、ノード #プールに2次元のフラット一次元の出力層 h_pool2_flat = tf.reshape(h_pool2、[ - 1,7 * 64 7 ]) #の出力最初のフルシーク接続 h_fcl = tf.nn.relu(tf.matmul( h_pool2_flat、W_fcl)+ b_fcl) #1 keep_prob出力確率ニューロンを表します = keep_prob tf.placeholder(tf.float32) h_fcl_drop = tf.nn.dropout(h_fcl、keep_prob) #の第二完全接続層の初期化 W_fc2 weight_variable =([1024,10 ]) b_fc2 = bias_variable([10 ]) #の計算出力 予測= tf.nn.softmax(tf.matmul(h_fcl_drop、W_fc2)+ b_fc2) #のクロスエントロピコスト関数 cross_entropy = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(= Yラベル、logits = 予測)) #Adamoptimizerに使用最適化 train_step tf.train.AdamOptimizer =(4-1E ).minimize(cross_entropy) #のストアブールリストにおける結果 correct_prediction = tf.equal(tf.argmax(予測、 1)、tf.argmax(Y、1)) #ARGMAX場所次元テンソルの最大リターン #精度求め 精度= tf.reduce_mean(tf.cast(correct_prediction、tf.float32)) セッション数AS tf.Session()を持つ: sess.runを(tf.global_variables_initializer()) #全てのトレーニング画像21回 のためのエポックでのレンジ(21 ): #は一度、それは、トレーニングセットの最初のサイクルのすべての画像である ため BATCH にレンジ(n_bach): #は100枚の絵、_xsに保存された画像データ、ラベルを取得YSの中に格納されている batch_xs、batchys = mnist.train.next_batch(BATCH_SIZE) sess.run(train_step、feed_dict = {X:batch_xs、Y:batchys、keep_prob:0.7 }) #のテストセット、データのデータセット内のパス ACC = sess.run(精度、feed_dict = {X:mnist.test.images、Y:mnist.test.labels、keep_prob:1.0 }) プリント(" 第" + STR(エポック)+ " 准确率:" + STR (ACC))
それは最初に簡単で、高い正解率を描くことができます。
私はあなたがプロセスCNNアルゴリズムを理解することができます願っています。また、上記の私の以前のブログ記事、あなたが見ることができます。