Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Keras-自动编码器精度保持在零位_Python_Tensorflow_Deep Learning_Keras_Autoencoder - Fatal编程技术网

Python Keras-自动编码器精度保持在零位

Python Keras-自动编码器精度保持在零位,python,tensorflow,deep-learning,keras,autoencoder,Python,Tensorflow,Deep Learning,Keras,Autoencoder,我正在尝试使用自动编码器和Keras检测欺诈。我编写了以下代码作为示例: 我可能遗漏了什么,我的准确度停留在0,我的测试损失低于我的火车损失 任何洞察都会被低估自动编码器的准确性几乎没有意义,尤其是在欺诈检测算法上。我的意思是,在回归任务中,准确度并没有得到很好的定义。例如,说0.1与0.11相同是否准确。对于keras算法来说,情况并非如此。如果您想了解算法复制数据的效果,我建议您查看MSE或数据本身。许多自动编码器使用MSE作为其损失函数 您应该监控的指标是良好示例的培训损失与欺诈示例的验证

我正在尝试使用自动编码器和Keras检测欺诈。我编写了以下代码作为示例:

我可能遗漏了什么,我的准确度停留在0,我的测试损失低于我的火车损失


任何洞察都会被低估

自动编码器的准确性几乎没有意义,尤其是在欺诈检测算法上。我的意思是,在回归任务中,准确度并没有得到很好的定义。例如,说0.1与0.11相同是否准确。对于keras算法来说,情况并非如此。如果您想了解算法复制数据的效果,我建议您查看MSE或数据本身。许多自动编码器使用MSE作为其损失函数

您应该监控的指标是良好示例的培训损失与欺诈示例的验证损失。在那里,你可以很容易地看到你是否能比欺诈的例子更接近真实的例子,以及你的算法在实践中的表现如何


另一个我不会做的设计选择是自动编码器中的relu。ReLU可以很好地处理更深层的模型,因为它在消除消失/爆炸梯度方面简单有效。然而,这两个问题在autoencoder中都是非因素,数据丢失会对autoencoder造成伤害。我建议使用tanh作为中间激活函数。

自动编码器通常进行回归,在回归问题上使用精度是没有意义的。使用tanh代替relu的想法有任何参考(书籍或论文)?相反。在ReLU加入deep NN之前,TanH是事实上的标准。经典的AE只是MLP,并不是很深,对于他们来说,TanH在经验上最适合我()。但差别并没有那么大。对于当前具有卷积架构的深度AE,请改用ReLUs。@Thomaspinez您好,您何时称之为深度?有多少神经元和层?@thomaspinez一个人可以容忍的合理MSE值是多少?谢谢你的工作。
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()