tensorflow 邏輯回歸與交叉熵

2021-10-03 00:04:34 字數 2470 閱讀 9616

線性回歸**的是乙個連續值, 邏輯回歸給出的」是」和「否」的回答

邏輯回歸

sigmoid函式是乙個概率分布函式, 給定某個輸入,它將輸出為乙個概率值

多層感知器一層一層的往下對映,sigmoid->(-1,1)值

邏輯回歸損失函式

1.平方差所懲罰的是與損失為同一數量級的情形

(1)mse刻畫它的損失非常不恰當,因為它的概率值是在(-1,1),比如真實值是1,區分貓和狗,它的概率是1表示一條狗,而神經網路給出的結果是0.3,,這個時候如果我們用均方差來刻畫它們的損失,就是1-0.3來刻畫這個損失是0.7,使用平方差的損失一般是損失與原有的資料集同乙個數量集的情形,假如我們的數量值取值特別的龐大,然後我們的損失值是乙個很小的值,,這時候使用的平方差刻畫的損失就非常的小,不利於我們的訓練,訓練的次數就非常非常的慢,但他不是並不能訓練,它是可以用平方差訓練來刻畫損失的,但最好使用交叉熵

2.對於分類問題,我們最好的使用交叉熵損失函式會更有效

3.交叉熵會輸出乙個更大的「損失」

交叉熵損失函式

交叉熵刻畫的是實際輸出(概率)與期望輸出(概率)的距 離,也就是交叉熵的值越小,兩個概率分布就越接近。

假設 概率分布p為期望輸出,概率分布q為實際輸出,h(p,q)為交 叉熵,則:

交叉熵放大了概率分布的損失

在keras裡,我們使用binary_crossentropy來計算二元交叉熵

demo展示

import pandas as pd

# import numpy as np

import tensorflow as tf

import matplotlib.pyplot as plt

# 庫引用時如果沒有被呼叫,是不能成功執行程式的,可以暫時注釋掉

data = pd.read_csv('./credit-a.csv', header=none) # 第一行沒寫引數,這樣它就把第一行作為資料

data.head()

# print(data)

data.iloc[:, -1].value_counts() # 取最後一列

# print(c)

x = data.iloc[:, :-1] # iloc第乙個引數表示取所有行,第二個參數列取最後一列之前的,這些都作為我們的資料

y = data.iloc[:, -1].replace(1, 0) # 把-1替換成0,使其只有1和0,來辨別為欺詐資料和非欺詐資料

model = tf.keras.sequential() # 順序模型

model.add(tf.keras.layers.dense(4, input_shape=(15,), activation='relu')) # 新增第一次隱藏層,設定4個單元數,資料的形狀為前15行,然後relu啟用

model.add(tf.keras.layers.dense(4, activation='relu')) # 新增第二層隱藏層,其他的就不用填了,它會自動判斷

model.add(tf.keras.layers.dense(1, activation='sigmoid')) # 這個sigmoid他有兩個隱藏層+乙個輸出層

model.summary()

# 編譯配置

model.compile(optimizer='adam',

loss='binary_crossentropy', # 二元概率,計算交叉熵

metrics=['acc'] # 在執行過程中,計算它的正確率情況,它是個list

)# 訓練過程

history = model.fit(x, y, epochs=100)

history.history.keys() # 字典

plt.plot(history.epoch, history.history.get('loss'))

plt.plot(history.epoch, history.history.get('acc'))

plt.show()

cross_entropy.py 交叉熵 引數執行結果 

訓練執行:

影象:

Tensorflow實現邏輯回歸

import tensorflow as tf 匯入mnist資料集 from tensorflow.examples.tutorials.mnist import input data mnist input data.read data sets temp data one hot true 定...

使用tensorflow書寫邏輯回歸

mnist 讀取訓練集 mnist.train.images mnist.train.labels 讀取訓練集的長度 mnist.train.num examples 函式 tf.placeholder 必須指定資料型別,shape可以不指定,這樣就可以使用多種shape了 tf.variable ...

Tensorflow的邏輯回歸例子,詳解

這裡做了一些修改,並加入了b值,使邏輯回歸的元素完整,取得了更好的擬合效果。邏輯回歸損失函式推導過程如下 本例構造了乙個三層網路,輸入 2cell 隱藏 10cell 輸出 1cell 我對本例的理解檢視和傳統神經網路的圖形表達,均手工畫在下面,個人認為,理解了結構之後的檢視,更利於今後的深入研究和...