【问题标题】:Keras the simplest NN model: error in training.py with indicesKeras 最简单的 NN 模型:training.py 中带有索引的错误
【发布时间】:2017-04-08 12:00:11
【问题描述】:

我已阅读此示例 https://github.com/fchollet/keras/blob/master/examples/mnist_mlp.py 并决定将这个想法用于我的基础,因为这是 Keras 最简单的 NN。

这是我的基地https://drive.google.com/file/d/0B-B3QUQOzGZ7WVhzQmRsOTB0eFE/view (你可以下载我的csv文件,只有83Kb)

这是我的基地图片:

base.shape = (891, 23)

import keras
from keras.datasets import mnist
from keras.models import Sequential
from keras.layers import Dense, Dropout
from keras.optimizers import RMSprop, Adam
import numpy as np
import pandas as pd
from sklearn.cross_validation import train_test_split
from keras.utils.vis_utils import model_to_dot
from IPython.display import SVG
from keras.utils import plot_model

base = pd.read_csv("mt.csv")

import pandas as pd

for col in base:
    if col != "Fare" and col != "Age":
    base[col]=base[col].astype(float)
X_train = base
y_train = base["Survived"]
del X_train["Survived"]

print("X_train=",X_train.shape)
print("y_train=", y_train.shape)

输出: X_train= (891, 22) y_train= (891,)

from sklearn.cross_validation import train_test_split

X_train, X_test , y_train, y_test = train_test_split(X_train, y_train, test_size=0.3, random_state=42)

batch_size = 4
num_classes = 2
epochs = 2

print(X_train.shape[1], 'train samples')
print(X_test.shape[1], 'test samples')

输出: 22个火车样本 22个测试样本

y_train = keras.utils.to_categorical(y_train, num_classes)
y_test = keras.utils.to_categorical(y_test, num_classes)

model = Sequential()
model.add(Dense(40, activation='relu', input_shape=(21,)))
model.add(Dropout(0.2))
#model.add(Dense(20, activation='relu'))
#odel.add(Dropout(0.2))
model.add(Dense(2, activation='sigmoid'))

model.summary()

输出:

图层(类型)输出形状参数

dense_1(密集)(无,40)880


dropout_1(辍学)(无,40)0


dense_2(密集)(无,2)82

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

plot_model(model, to_file='model.png')

SVG(model_to_dot(model).create(prog='dot', format='svg'))

print("X_train.shape=", X_train.shape)
print("X_test=",X_test.shape)

history = model.fit(X_train, y_train,
                batch_size=batch_size,
                epochs=epochs,
                verbose=1,
                validation_data=(X_test, y_test))

Traceback(最近一次调用最后一次): 文件“new.py”,第 67 行,在 验证数据=(X_test, y_test))

文件“miniconda3/lib/python3.6/site-packages/keras/models.py”,第 845 行,适合 initial_epoch=initial_epoch)

文件“miniconda3/lib/python3.6/site-packages/keras/engine/training.py”,第 1405 行,适合 batch_size=batch_size)

文件“miniconda3/lib/python3.6/site-packages/keras/engine/training.py”,第 1295 行,在 _standardize_user_data exception_prefix='模型输入')

文件“miniconda3/lib/python3.6/site-packages/keras/engine/training.py”,第 133 行,在 _standardize_input_data str(array.shape))

ValueError: 检查模型输入时出错:预期 dense_1_input 具有形状 (None, 21) 但得到的数组具有形状 (623, 22) [在 5.1 秒内完成,退出代码为 1]

我该如何解决这个错误?我尝试将输入形状更改为(20,)或(22,)等。没有成功。

例如,如果 input_shape=(22,) 我有错误:文件“miniconda3/lib/python3.6/site-packages/pandas/core/indexing.py”,第 1873 行,in maybe_convert_indices raise IndexError("索引越界")

【问题讨论】:

  • 你能打印y_test的形状吗?
  • y_train.shape (623, 2) y_test.shape (268, 2)
  • 还有X_test 形状?
  • X_test.shape (268, 22) X_train.shape (623, 22)

标签: python tensorflow neural-network keras mnist


【解决方案1】:

input_shape 应与数据中的特征数相同,在您的情况下应为 input_shape=(22,)

IndexError 是由于 pandas 数据框中的一些不同的索引,因此请使用 as_matrix() 将您的数据框转换为 numpy 矩阵:

history = model.fit(X_train.as_matrix(), y_train,
            batch_size=batch_size,
            epochs=epochs,
            verbose=1,
            validation_data=(X_test.as_matrix(), y_test))

【讨论】:

    猜你喜欢
    • 2021-11-20
    • 2020-10-25
    • 1970-01-01
    • 2019-05-28
    • 2022-01-14
    • 1970-01-01
    • 2019-05-03
    • 2016-02-07
    • 1970-01-01
    相关资源
    最近更新 更多