第IV章深い学習ニューラルネットワークの学習入門

免責事項:すべての世界のプロレタリアートに属しているすべてのhttps://blog.csdn.net/qq_41776781/article/details/87885038

はじめに:私たちは、ニューラルネットワークに関連するパラメータを設定について話したとき、第三章では、それはデータがフロントニューラルネットワーク、情報のカテゴリの最終的な出力を介して伝播することができます。しかし、どのように我々は我々の出力クラス情報が正しいことを知っていますか?または私は情報格差を是正し、どのくらい?そして、私は我々のモデルを調整した後、ギャップをW(重量)に対応して伝える方法を知っている、とのパラメータB(オフセット)?この章では、主にこれらの三つのことであるについて話しています。

この章では、その本質の勾配は、この章の懸念にも前に、2つの問題に伝播ニューラルネットワークのチューニングパラメータの方向を勾配方向を使用することで説明したが、今ではめったに役に立たないので、比較的遅い速度を算出する方法。第三の問題は、次の章に進みます。

 

最初の二つの質問に対する解決策は以下のとおりです。

平均二乗誤差:  E = 1/2 \和(Y_ {K} -T_ {K})^ {2}  私たちは、一般的にクロスエントロピーを使用し、深さの研究で、その上に見て

# 当然神经网络的目标是使均方误差最小化 越小表示我预测的精确
import numpy as np
y =[0.1, 0.1, 0.2, 0.3, 0.2, 0.1]
t =[0,   0,    0,   1,   0,   0 ]

def mean_squared_error(y,t):
    return 0.5 * np.sum((y-t)**2)

result = mean_squared_error(np.array(y),np.array(t))
print(result)

# mean_squared_error 的结果是 0.3

 

 

クロスエントロピー誤差:  E =  -  \ sum_ {K} ^ {N}(T_ {K} * logY_ {K})      式1    

場合tf.nn.softmax_cross_entropy_with_logits()関数は、最適化されたソフトマックスを説明するために使用され、nは出力に属する唯一のプロパティ:1の結果に適用されます

最初のオペレーティングソフトマックスtensorflow定義クロスエントロピーはソフトマックス関数logist後の予測データを取得するために元のデータに意味します

次いでlogist予測データとタグデータ要求は、式1クロスエントロピー誤差に応じて

次のように検証コードは次のとおりです。

import numpy as np
import tensorflow as tf

# 直接定义softmax激活函数
def softmax(x):
    c = np.max(x)
    exp = np.exp(x-c)
    sum_exp = np.sum(exp)
    class_y = exp / sum_exp
    return class_y

Raw_data = np.array([1, 1, 6, 2])
label = np.array([0, 0, 1, 0])

my_softmax = softmax(Raw_data)
print("原始数据经过softmax之后输出的结果是:", my_softmax)

# 定义交叉熵函数
def cross_entropy_error(t,y):
    delta = 1e-7
    return -np.sum(t*np.log(y+delta))

# 将得到的softmax和label交叉熵计算 交叉熵之后前者表示对应的标签 后者表示对应的softmax输出的数据
my_cross_entropy_error = cross_entropy_error(label, my_softmax)
print("the result of my_cross_entropy_error difined by myself is: ", my_cross_entropy_error)



Raw_data = tf.convert_to_tensor(Raw_data,dtype=tf.float64)
tf_result = tf.nn.softmax_cross_entropy_with_logits(labels=label,logits=Raw_data)
sess = tf.Session()
print("the result of softmax_cross_entropy_with_logits difined by tensorflow is: ", sess.run(tf_result))

結果:実験結果からは、2つの理由のため、両者間に僅かな隙間を見ることができます。しかし、原則的には、あまりにも真剣に理解することはできません

最初は、次のとおりです。ソフトマックス関数は、私はナンデータを防ぐために、プログラムを使用しました

第二は、ゼロデルタ= 1E-7による除算の使用を防止します 

'''
原始数据经过softmax之后输出的结果是: [0.00653034 0.00653034 0.96918803 0.0177513 ]
the result of my_cross_entropy_error difined by myself is:  0.03129654045830098
the result of softmax_cross_entropy_with_logits difined by tensorflow is:  0.03129664363744888
'''
tf.nn.sigmoid_cross_entropy_with_logits()関数が説明され、1に印加される:Nプロパティの出力結果の場合、任意に属することができ

まず、シグモイド関数を介して生データを算出するステップ

次いで、クロスエントロピー関数されたデータは、(クロスエントロピーは、上記で定義と矛盾クロスエントロピがあります)

# 定义tf.nn.sigmoid_cross_entropy_with_logits()
import numpy as np
import tensorflow as tf

# 直接定义sigmoid激活函数
def sigmoid(x):
    return 1/(1 + np.exp(-x))

Raw_data = np.array([1, 1, 6, 2])
label = np.array([0, 0, 1, 0])

my_sigmoid = sigmoid(Raw_data)
print("原始数据经过softmax之后输出的结果是:", my_sigmoid)

# 定义交叉熵函数
def cross_entropy_error(y,t):

    return -y * np.log(t) - (1 - y) * np.log(1 - t)

# 将得到的softmax和label交叉熵计算 交叉熵之后前者表示对应的标签 后者表示对应的softmax输出的数据
my_cross_entropy_error = cross_entropy_error(label, my_sigmoid)
print("the result of my_cross_entropy_error difined by myself is: ", my_cross_entropy_error)

Raw_data = tf.convert_to_tensor(Raw_data,dtype=tf.float64)
label = tf.convert_to_tensor(label,dtype=tf.float64)

tf_result = tf.nn.sigmoid_cross_entropy_with_logits(labels=label,logits=Raw_data)
sess = tf.Session()
print("the result of sigmoid_cross_entropy_with_logits difined by tensorflow is: ", sess.run(tf_result))

結果:によって検証二つの同一

'''
原始数据经过softmax之后输出的结果是: [0.73105858 0.73105858 0.99752738 0.88079708]
the result of my_cross_entropy_error difined by myself is:  [1.31326169 1.31326169 0.00247569 2.12692801]
the result of sigmoid_cross_entropy_with_logits difined by tensorflow is:  [1.31326169 1.31326169 0.00247569 2.12692801]
'''

この章の終わりOK。

おすすめ

転載: blog.csdn.net/qq_41776781/article/details/87885038