Keras自动编码器分类

Keras自动编码器分类,keras,classification,autoencoder,Keras,Classification,Autoencoder,我试图找到一个有用的代码,以提高分类使用自动编码器。 我遵循这个例子 但不是针对MNIST数据,我尝试将其用于cifar-10 所以我做了一些改变,但似乎有些不合适。 谁能帮我一下吗? 如果您有另一个可以在不同数据集中运行的示例,这将有所帮助 reduced.fit(X_测试,Y_测试)中的验证未被学习,因此它在.evalute()中给出了wronf精度 总是给予 val_损失:2.3026-val_acc:0.1000 这是代码和错误: rom keras.dataset导入cifar10 从

我试图找到一个有用的代码,以提高分类使用自动编码器。 我遵循这个例子 但不是针对MNIST数据,我尝试将其用于cifar-10

所以我做了一些改变,但似乎有些不合适。 谁能帮我一下吗? 如果您有另一个可以在不同数据集中运行的示例,这将有所帮助

reduced.fit(X_测试,Y_测试)中的验证未被学习,因此它在.evalute()中给出了wronf精度 总是给予 val_损失:2.3026-val_acc:0.1000 这是代码和错误:

rom keras.dataset导入cifar10
从keras.models导入模型
从keras.layers导入输入,密集
从keras.utils导入np_utils
将numpy作为np导入
列车数量=50000
num_测试=10000
高度、宽度、深度=32、32、3#列表图像为28x28
num_classes=10#共有10个类(每个数字1个)
(X_列,y_列),(X_测试,y_测试)=cifar10.负载数据()
X_系列=X_系列。重塑(数量系列,高度*宽度*深度)
X_测试=X_测试。重塑(数量测试,高度*宽度*深度)
X_-train=X_-train.astype('float32')
X_test=X_test.astype('float32')
X_序列/=255#将数据归一化到[0,1]范围
X_测试/=255#将数据归一化到[0,1]范围
Y_train=np_utils.to_category(Y_train,num_classes)#一个热编码标签
Y_test=np_utils.to_category(Y_test,num_classes)#一个热编码标签
输入=输入(形状=(高度*宽度*深度,)
s=高度*宽度*深度
x=密集(s,激活='relu')(输入\u img)
编码=密集(s//2,激活='relu')(x)
编码=密集(s//8,activation='relu')(编码)
y=密集(s//256,激活='relu')(x)
解码=密集(s//8,激活='relu')(y)
解码=密集(s//2,激活='relu')(解码)
z=密集(s,激活='sigmoid')(解码)
模型=模型(输入,z)
model.compile(优化器='adadelta',loss='mse')#报告准确性
模型装配(X_系列,X_系列,
nb_epoch=10,
批次大小=128,
洗牌=正确,
验证数据=(X检验,X检验)
mid=模型(输入值,y)
简化表示法=中期预测(X_检验)
out=密集型(num_类,activation='softmax')(y)
简化=模型(输入、输出)
reduced.compile(loss='classifical_crossentropy',
优化器='adam',
指标=[‘准确度’])
缩小尺寸(X_系列、Y_系列、,
nb_epoch=10,
批次大小=128,
洗牌=正确,
验证数据=(X_检验,Y_检验)
分数=减少。评估(X_测试,Y_测试,详细=0)
打印(“准确度:”,分数[1])
培训50000个样本,验证10000个样本
纪元1/10
50000/50000[================================================]-5s-损失:0.0639-价值损失:0.0633
纪元2/10
50000/50000[======================================================]5s-损失:0.0610-价值损失:0.0568
纪元3/10
50000/50000[================================================]-5s-损失:0.0565-价值损失:0.0558
纪元4/10
50000/50000[================================================]-5s-损失:0.0557-价值损失:0.0545
纪元5/10
50000/50000[================================================]-5s-损失:0.0536-价值损失:0.0518
纪元6/10
50000/50000[=============================================]-5s-损失:0.0502-价值损失:0.0461
纪元7/10
50000/50000[=============================================]-5s-损失:0.0443-价值损失:0.0412
纪元8/10
50000/50000[=============================================]-5s-损失:0.0411-价值损失:0.0397
纪元9/10
50000/50000[======================================================]5s-损失:0.0391-价值损失:0.0371
纪元10/10
50000/50000[================================================]-5s-损失:0.0377-价值损失:0.0403
培训50000个样本,验证10000个样本
纪元1/10
50000/50000[========================================================================3秒-损失:2.3605-会计科目:0.0977-价值损失:2.3026-价值会计科目:0.1000
纪元2/10
50000/50000[========================================================================3秒-损失:2.3027-会计科目:0.0952-价值损失:2.3026-价值会计科目:0.1000
纪元3/10
50000/50000[========================================================================3秒-损失:2.3027-会计科目:0.0978-价值损失:2.3026-价值会计科目:0.1000
纪元4/10
50000/50000[========================================================================3秒-损失:2.3027-会计科目:0.0980-价值损失:2.3026-价值会计科目:0.1000
纪元5/10
50000/50000[========================================================================3秒-损失:2.3027-会计科目:0.0974-价值损失:2.3026-价值会计科目:0.1000
纪元6/10
50000/50000[=====================================================================3秒-损失:2.3027-附件:0.1000-价值损失:2.3026-价值附件:0.1000
纪元7/10
50000/50000[========================================================================3秒-损失:2.3027-会计科目:0.0992-价值损失:2.3026-价值会计科目:0.1000
纪元8/10
50000/50000[========================================================================3秒-损失:2.3027-会计科目:0.0982-价值损失:2.3026-价值会计科目:0.1000
纪元9/10
50000/50000[========================================================================3秒-损失:2.3027-会计科目:0.0965-价值损失:2.3026-价值会计科目:0.1000
纪元10/10
50000/50000[========================================================================3秒-损失:2.3027-会计科目:0.0978-价值损失:2.3026-价值会计科目:0.1000
9856/10000[============================>.]-预计到达时间:0s('准确度:',0.100000000000001)

您的代码存在多个问题

您的自动编码器未完全训练,如果绘制训练数据,您将看到模型尚未收敛。借

history = model.fit(X_train, X_train,
nb_epoch=10,
batch_size=128,
shuffle=True,
validation_data=(X_test, X_test))
您将在培训期间获得损失值。如果绘制它们,例如在matplotlib中

import matplotlib.pyplot as plt
plt.plot(history.history['loss'])
plt.plot(history.history['val_loss'])
plt.title('model train vs validation loss 1')
plt.ylabel('loss')
plt.xlabel('epoch')
plt.legend(['train', 'validation'], loc='upper right')
plt.show()
你会发现它需要更多的时代来融合

自动编码器架构构建错误,第
y=densite(s//256,activation='relu')(x)
行中存在打字错误,您可能想使用
y=densite(s//256,activation='linear')(encoded)
,因此它使用前一层而不是输入。而且你也不想在潜在空间中使用relu激活,因为它不允许你从彼此之间减去潜在变量,从而使自动编码器的效率大大降低。 通过这些修复,模型解决了我们的问题

为了训练这两个网络,我将历代次数增加到30次,这样可以训练得更好。 在培训结束时,分类模型报告
损失:1.2881-acc:0.5397-val_损失:1.3841-val_acc:0.512