首页 文章

Keras是最简单的NN模型:training.py中带有索引的错误

提问于
浏览
1

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

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

这是我的基础图片:
enter image description here

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(Dropout)(无,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))

回溯(最近一次调用最后一次):文件“new.py”,第67行,在validation_data =(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 ='model input')

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

ValueError:检查模型输入时出错:期望的dense_1_input具有形状(无,21)但是具有形状的数组(623,22)[在5.1s中完成,退出代码为1]

How can I solve this error? I tried to change input shape, for example, to (20,) or to (22,), etc. Without success.

例如,如果input_shape =(22,)我有错误:文件“miniconda3 / lib / python3.6 / site-packages / pandas / core / indexing.py”,第1873行,在maybe_convert_indices中引发IndexError(“索引已经出来” -of界“)

1 回答

  • 3

    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))
    

相关问题