【问题标题】:Making my data fit Keras Sequential Models and Dense Layers and produce output使我的数据适合 Keras 序列模型和密集层并产生输出
【发布时间】:2017-02-24 23:55:40
【问题描述】:

我有这样的结构化数据。

faults.head()

Fault   DEALER  FAILMODE    FAILCODEMODE    DAYS UNTIL FAILURE  TERRITORY CODE  DESIGN PHASE CODE   PLANT ID CODE
0   CAMPAIGN/TRP    31057   CAMPAIGN    BNRBC1  283.0   102 62  82
1   INTERMITTENT PROBL  24126   SPECIAL (NO FAILURE)    XXIPNF  126.0   102 62  82
2   DSID #DSBCG2058 TAG #362783 EXHAUST SYSTEM. U...    0   CLOGGED, PLUGGED WITH FOREIGN MATERIAL, DIRT/D...   USDVDR  118.0   102 62  82
3   INTERMITTENT PROBL  20943   SPECIAL (NO FAILURE)    XXIPNF  97.0    102 62  82
4   CAMPAIGN    19134   CAMPAIGN    USSCR1  315.0   102 62  82

我正在尝试预测 FAILMODE 类。 FAILMODE 中只有 122 个唯一值。这些是我的课。

基于行中的所有其他数据,我希望有一个单热矩阵,甚至类本身是我的测试集计算的产物。到目前为止,这是我的代码-

from keras.models import Sequential
from keras.layers import Dense
Using Theano backend.

faults_testing = faults[:14843]
faults_training = faults[14844:]

model = Sequential()
model.add(Dense(len(faults.FAILMODE.unique()) + 20, input_dim=len(faults_training), init='uniform', activation='relu'))
model.add(Dense(len(faults_training), init='uniform', activation='relu'))
model.add(Dense(len(faults.FAILMODE.unique()), init='uniform', activation='sigmoid'))

model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])

这里是教程所说的地方-

model.fit(X, Y, nb_epoch=len(faults_training), batch_size=10)

我不知道 X 或 Y 是什么所以我只是尝试了以下-

model.fit(faults_training['FAILMODE'], faults_testing['FAILMODE'], nb_epoch=len(faults_training), batch_size=10)

导致了这个错误-

ValueError                                Traceback (most recent call last)
<ipython-input-54-e8765933cfb9> in <module>()
----> 1 model.fit(faults_training['FAILMODE'], faults_testing['FAILMODE'], nb_epoch=len(faults_training), batch_size=10)

ValueError: Error when checking model input: expected dense_input_1 to have shape (None, 34631) but got array with shape (34631L, 1L)

请认真回答。谢谢!

【问题讨论】:

    标签: python theano keras


    【解决方案1】:

    常规神经网络(包括 Keras Sequential 模型)仅接受数据 (X) 的浮点数和标签/类 (Y) 的 int 或 one-hot-encoding。因此,您需要转换数据集以符合要求。所以你可能想做的事:

    1. 将所有分类(字符串)值(例如 CAMPAIGN/TRP、BNRBC1、XXIPNF)映射到浮点数(如果您可以对数据进行规范化会更好)
    2. 将所有数据列(不包括标签列)放入X中
    3. 将标签列(仅应为 1 列)放入 Y 内,并使用 to_categorical 转换为 one-hot-encoding 例如Y = to_categorical(Y)
    4. 使用train_test_splitX_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.33)等函数拆分训练和测试数据
    5. 使用model.fit(X_train, Y_train, nb_epoch=100, batch_size=10) 训练模型。稍后根据您对训练速度和准确性的期望调整nb_epochbatch_size
    6. 使用scores = model.evaluate(self, X_test, Y_test, batch_size=10) 评估准确性

    您也可以查看这篇文章了解如何将分类数据转换为数字http://fastml.com/converting-categorical-data-into-numbers-with-pandas-and-scikit-learn/

    【讨论】:

    • 我正在尝试您所说的,这似乎是正确的方法,但现在当我执行train_test_split(X, Y, test_size=0.33 时,我得到了ValueError: Found input variables with inconsistent numbers of samples: [49475, 6035950]。当我做Y = to_categorical(Y) 时,len(Y) 现在是 6035950,而拆分前应该是 49745。我做错了什么?
    • 您能向我们展示您用于将数据帧转换为 X 和 Y 的代码吗?
    猜你喜欢
    • 2019-08-10
    • 2021-10-02
    • 1970-01-01
    • 2021-05-07
    • 2018-03-16
    • 2021-12-26
    • 2020-08-17
    • 2023-03-06
    • 1970-01-01
    相关资源
    最近更新 更多