交叉熵损失函数
交叉熵刻画的是实际输出(概率)与期望输出(概率)的距离,也就是交叉熵的值越小,两个概率分布就越接近。
假设概率分布p为期望输出,概率分布q为实际输出,H(p,q)为交叉熵,则: H ( p , q ) = − ∑ x p ( x ) l o g q ( x ) H(p, q) = -\displaystyle\sum_{x}p(x)log\,q(x) H(p,q)=−x∑p(x)logq(x)
keras交叉熵
在keras里,使用 binary_ crossentropy
来计算二元交叉熵。
代码:
import tensorflow as tf
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
data = pd.read_csv("credit-a.csv", header=None)
data.iloc[:, -1].value_counts()
X = data.iloc[:, :-1]
y = data.iloc[:, -1].replace(-1, 0)
model = tf.keras.Sequential()
model.add(tf.keras.layers.Dense(4, input_shape=(15,), activation='relu')) # 隐藏层
model.add(tf.keras.layers.Dense(4, activation='relu')) # 隐藏层
model.add(tf.keras.layers.Dense(1, activation='sigmoid')) # 输出层
model.summary()
model.compile(optimizer='adam',
loss='binary_crossentropy',
metrics=['acc'])
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'))
Output:
损失函数图像:
![](https://i-blog.csdnimg.cn/blog_migrate/9aa2a8eeaf561bdc59a70ba45bc3984c.png)
准确率图像:
![](https://i-blog.csdnimg.cn/blog_migrate/9dcead5d4e821400ec36961ac5d6cb76.png)