Keras最简单的NN模型:带有索引的training.py中的错误 [英] Keras the simplest NN model: error in training.py with indices

查看:142
本文介绍了Keras最简单的NN模型:带有索引的training.py中的错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I have read this example https://github.com/fchollet/keras/blob/master/examples/mnist_mlp.py and decide to use this idea to my base because this is the simplest NN for Keras.

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

This is my base https://drive.google.com/file/d/0B-B3QUQOzGZ7WVhzQmRsOTB0eFE/view (you can download my csv file, it's only 83Kb )

这是我的根据:

base.shape =(891,23)

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

Out: 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个测试样品

Out: 22 train samples 22 test samples

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

dense_1 (Dense) (None, 40) 880

dropout_1(退出)(无,40)0

dropout_1 (Dropout) (None, 40) 0

dense_2(Dense)(None,2)82

dense_2 (Dense) (None, 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))

回溯(最近通话最近): 在第67行的文件"new.py"中 validation_data =(X_test,y_test))

Traceback (most recent call last): File "new.py", line 67, in validation_data=(X_test, y_test))

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

File "miniconda3/lib/python3.6/site-packages/keras/models.py", line 845, in fit initial_epoch=initial_epoch)

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

File "miniconda3/lib/python3.6/site-packages/keras/engine/training.py", line 1405, in fit batch_size=batch_size)

文件_standardize_user_data中的文件"miniconda3/lib/python3.6/site-packages/keras/engine/training.py",行1295 exception_prefix ='模型输入')

File "miniconda3/lib/python3.6/site-packages/keras/engine/training.py", line 1295, in _standardize_user_data exception_prefix='model input')

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

File "miniconda3/lib/python3.6/site-packages/keras/engine/training.py", line 133, in _standardize_input_data str(array.shape))

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

ValueError: Error when checking model input: expected dense_1_input to have shape (None, 21) but got array with shape (623, 22) [Finished in 5.1s with exit code 1]

如何解决此错误?我试图将输入形状更改为例如(20,)或(22,)等.没有成功.

例如,如果input_shape =(22,)我遇到了错误:在maybe_convert_indices中,文件"miniconda3/lib/python3.6/site-packages/pandas/core/indexing.py"第1873行 提高IndexError(索引越界")

For example, if input_shape=(22,) I have the error: File "miniconda3/lib/python3.6/site-packages/pandas/core/indexing.py", line 1873, in maybe_convert_indices raise IndexError("indices are out-of-bounds")

推荐答案

input_shape应该与数据中的要素数量相同,在您的情况下应为input_shape=(22,).

input_shape should be same as the number of features in your data and that should be input_shape=(22,) in your case.

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

The IndexError is due to some different indexing in pandas dataframe, so convert your dataframe into a numpy matrix using as_matrix():

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

这篇关于Keras最简单的NN模型:带有索引的training.py中的错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆