ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python – Keras – 自动编码器精度为零

2019-08-23 16:55:14  阅读:317  来源: 互联网

标签:autoencoder python tensorflow keras deep-learning


我正在尝试使用autoencoder和Keras检测欺诈.我将以下代码编写为Notebook

import numpy as np # linear algebra
import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)
from sklearn.preprocessing import StandardScaler
from keras.layers import Input, Dense
from keras.models import Model
import matplotlib.pyplot as plt

data = pd.read_csv('../input/creditcard.csv')
data['normAmount'] = StandardScaler().fit_transform(data['Amount'].values.reshape(-1, 1))
data = data.drop(['Time','Amount'],axis=1)

data = data[data.Class != 1]
X = data.loc[:, data.columns != 'Class']

encodingDim = 7
inputShape = X.shape[1]
inputData = Input(shape=(inputShape,))

X = X.as_matrix()

encoded = Dense(encodingDim, activation='relu')(inputData)
decoded = Dense(inputShape, activation='sigmoid')(encoded)
autoencoder = Model(inputData, decoded)
encoder = Model(inputData, encoded)
encodedInput = Input(shape=(encodingDim,))
decoderLayer = autoencoder.layers[-1]
decoder = Model(encodedInput, decoderLayer(encodedInput))

autoencoder.summary()

autoencoder.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
history = autoencoder.fit(X, X,
                epochs=10,
                batch_size=256,
                validation_split=0.33)

print(history.history.keys())
# summarize history for accuracy
plt.plot(history.history['acc'])
plt.plot(history.history['val_acc'])
plt.title('model accuracy')
plt.ylabel('accuracy')
plt.xlabel('epoch')
plt.legend(['train', 'test'], loc='upper left')
plt.show()
# summarize history for loss
plt.plot(history.history['loss'])
plt.plot(history.history['val_loss'])
plt.title('model loss')
plt.ylabel('loss')
plt.xlabel('epoch')
plt.legend(['train', 'test'], loc='upper left')
plt.show()

我可能错过了一些东西,我的准确性被困在0而我的测试损失低于我的火车损失.

任何洞察力都会被暗示

解决方法:

自动编码器的准确性几乎没有意义,特别是在欺诈检测算法上.我的意思是回归任务的准确性没有明确定义.例如,准确地说0.1与0.11相同.对于keras算法,它不是.如果你想看看你的算法复制数据的程度,我建议你查看MSE或数据本身.许多自动编码器使用MSE作为其丢失功能.

您应该监控的指标是良好示例的培训损失与欺诈性示例的验证损失.在那里,您可以轻松地看到您是否能够比欺诈性的实例更贴近您的实际示例以及您的算法在实践中的表现如何.

我不会做的另一个设计选择是自动编码器. ReLU适用于更深层次的模型,因为它在消除消失/爆炸梯度方面具有简单性和有效性.然而,这两个问题都是自动编码器中的非因素,并且自动编码器中的数据损失也是如此.我建议使用tanh作为中间激活函数.

标签:autoencoder,python,tensorflow,keras,deep-learning
来源: https://codeday.me/bug/20190823/1699458.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有