首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Keras的数据整形不能使用K-Fold验证

Keras的数据整形不能使用K-Fold验证
EN

Stack Overflow用户
提问于 2020-07-24 00:22:58
回答 2查看 75关注 0票数 2

我有一个数据集,我正在为Keras网络整形,如下所示:

代码语言:javascript
复制
scaler.fit(X)
X_Scaled = pd.DataFrame(scaler.transform(X.values), columns=X.columns, index=X.index)
X_Scaled.info()

X_data = X_Scaled.values
X_data = X_data.reshape((X_data.shape[0],X_data.shape[1],1))

y = to_categorical(y)

整形的结果是这个y.shape = (13609, 5)X_data.shape = (13609, 61, 1)

然后,我尝试在数据集上使用KFold验证,并将Keras神经网络封装到以下循环中:

代码语言:javascript
复制
from sklearn.model_selection import KFold
num_folds = 10
kfold = KFold(n_splits=num_folds, shuffle=True)

acc_per_fold = []
loss_per_fold = []

fold_no = 1
for train, test in kfold.split(X_data, y):
    model = models.Sequential()
    model.add(Dense(128, activation='tanh' ,input_dim = 61))
    model.add(layers.Dropout(0.3))
    model.add(Dense(128, activation='relu', kernel_regularizer = keras.regularizers.l1(0.001)))
    model.add(Dense(62, activation='relu', kernel_regularizer = keras.regularizers.l2(0.001)))
    model.add(layers.Dropout(0.35))
    model.add(Dense(32, activation='relu', kernel_regularizer = keras.regularizers.l1(0.001) ))
    model.add(Dense(5, activation='softmax'))
    
    model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['acc'])
    history = model.fit(X_data[train], y[train], epochs=175,  batch_size=64, validation_split = 0.15, shuffle = True, verbose=2)
   
    #Generate generalization metrics
    scores = model.evaluate(X_data[test], y[test], verbose=0)

这个网络在没有KFold验证的情况下作为独立的网络在循环之外工作得很好,但不是在这个循环内。

我得到的错误是这样的

代码语言:javascript
复制
ValueError: Error when checking input: expected dense_66_input to have 2 dimensions, but got array with shape (12248, 61, 1)

但我不明白这两个维度是在哪里发生的。

我怀疑我错误地使用了Kfold for循环,但我找不到原因。有人能对此提出一些建议吗?谢谢

EN

回答 2

Stack Overflow用户

发布于 2020-07-27 19:08:34

正如您所提到的:X_data.shape = (13609, 61, 1),这意味着X_data有3个维度,但密集层只需要2个维度。

票数 0
EN

Stack Overflow用户

发布于 2020-07-28 17:42:29

你的训练x数据有3个维度,但你的网络需要2个维度(input_dim = 61)。通过以下方式删除第三个dimensios:

代码语言:javascript
复制
X_data=np.squeeze(X_data)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63058816

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档