Прогнозирование классов в Keras - IndexError: индекс 196 выходит за пределы оси 0 с размером 196 - PullRequest
0 голосов
/ 20 апреля 2019

Я обучил сверточную нейронную сеть (CNN) с использованием Keras и сохранил модель, чтобы использовать ее для прогнозирования класса некоторых тестовых изображений.

Ввод будет представлять собой комбинацию изображения и некоторых числовых функций (в частности, 12 функций).

У меня есть следующий код для такого теста:

from keras.models import load_model
from keras import optimizers
import cv2
import numpy as np
import pandas as pd
import os

test_directory_edges = '/test'
test_df = pd.read_csv('/test.csv')
test_images_edge = []

df_test = pd.DataFrame(test_df)

# Feature Scaling
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
test_df = sc.fit_transform(test_df)
test_df = sc.transform(test_df)

test_border_irregularity_features = df_test.iloc[:,0:12].values

model = load_model('saved_model.h5')

for root, dirs, files in os.walk(test_directory_edges):
    sortedFiles = sorted(files, key=lambda x:int(x.split('.')[0]))
    for file in sortedFiles[0:]:
        img = cv2.imread(root + '/' + file)
        img = cv2.resize(img,(512,512),interpolation=cv2.INTER_AREA)
        img = img.reshape((-1,512,512,1))
        test_images_edge.append(img)

test_images_edge = np.array(test_images_edge)
test_images_edge = test_images_edge.reshape((-1,512,512,1))

#test_predictions = model.predict([test_images_edge,test_border_irregularity_features.reshape((196,12))])
test_predictions = model.predict([test_images_edge,test_border_irregularity_features])
# round predictions
test_rounded = [round(x[0]) for x in test_predictions]

test_prediction = pd.DataFrame(test_rounded,columns=['predictions']).to_csv('test_prediction.csv')

Когда я запускаю код, я получаю следующее:

IndexError: index 196 is out of bounds for axis 0 with size 196

Что происходит в этой строке:

test_predictions = model.predict([test_images_edge,test_border_irregularity_features])

Есть идеи, как мне решить эту проблему?

Спасибо.

EDIT-1

Это полная трассировка :

File "test_model.py", line 38, in <module>
    test_predictions = model.predict([test_images_edge,test_border_irregularity_features])
  File "/home/me/keras/lib/python2.7/site-packages/keras/engine/training.py", line 1517, in predict
    batch_size=batch_size, verbose=verbose)
  File "/home/me/keras/lib/python2.7/site-packages/keras/engine/training.py", line 1139, in _predict_loop
    ins_batch = _slice_arrays(ins, batch_ids)
  File "/home/me/keras/lib/python2.7/site-packages/keras/engine/training.py", line 402, in _slice_arrays
    return [None if x is None else x[start] for x in arrays]
IndexError: index 196 is out of bounds for axis 0 with size 196

Это модель код:

input_layer_edge = Conv2D(32,(5,5), activation='relu')(image_input_edge)
cov1_edge = Conv2D(24,(5,5),activation='relu',subsample=(2,2))(input_layer_edge)
cov2_edge = Conv2D(36,(5,5),activation='relu',subsample=(2,2))(cov1_edge)
cov3_edge = Conv2D(48,(5,5),activation='relu',subsample=(2,2))(cov2_edge)
cov4_edge = Conv2D(64,(5,5),activation='relu')(cov3_edge)
cov5_edge = Conv2D(64,(3,3),activation='relu')(cov4_edge)
flatten_edge = Flatten()(cov5_edge)

merge = concatenate([flatten_edge,features_input])

d1 = Dense(100, activation='relu')(merge)
out = Dense(1,activation='sigmoid')(d1)

model = Model(inputs=[image_input_edge,features_input], outputs=[out])

1 Ответ

0 голосов
/ 21 апреля 2019

Вероятно, это связано с несоответствием формы между входными массивами. В частности, поскольку ваша модель имеет два входных слоя, два входных массива, подаваемых на модель, должны иметь одинаковое количество выборок. Убедитесь, что это так, распечатав форму двух входных массивов, и убедитесь, что первое число в обоих напечатанных кортежах одинаково:

print(test_images_edge.shape, test_border_irregularity_features.shape)

# alternatively:
assert test_images_edge.shape[0] == test_border_irregularity_features.shape[0], "Different number of samples!"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...