Ошибка значения: входные массивы должны иметь то же количество выборок, что и целевые.Найдено 166 входных образцов и 4 целевых образца - PullRequest
0 голосов
/ 21 декабря 2018

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

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

import tensorflow as tf
import numpy as np
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout, Activation, Flatten
from tensorflow.keras.layers import Conv2D, MaxPooling2D


DIR = '/home/.../'
IMG_H = 256
IMG_W = 256
IMG_CH = 1


loadFile = DIR + 'Img.npz'
X = np.load(loadFile)
trainImgSet = X['trainImgSet']
trainLabelSet = X['trainLabelSet']
testImgSet = X['testImgSet']

print('Shape of trainImgSet: {}'.format(trainImgSet.shape))
print('Shape of trainLabelSet: {}'.format(trainLabelSet))
#print('Shape of testImgSet:{}'.format(testImgSet))


model = tf.keras.Sequential()
model.add(tf.keras.layers.Conv2D(256, (3, 3), input_shape = (IMG_H, IMG_W, IMG_CH)))
model.add(tf.keras.layers.Activation('relu'))
model.add(tf.keras.layers.MaxPooling2D(pool_size=(1, 1)))

model.add(tf.keras.layers.Conv2D(256, (3, 3)))
model.add(tf.keras.layers.Activation('relu'))
model.add(tf.keras.layers.MaxPooling2D(pool_size=(1, 1)))

model.add(tf.keras.layers.Flatten())

model.add(tf.keras.layers.Dense(64))

model.add(tf.keras.layers.Dense(1))
model.add(tf.keras.layers.Activation('sigmoid'))

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

model.summary()

#train the CNN
model.fit(trainImgSet, trainLabelSet, batch_size=10, epochs=5, validation_split=0.1)



Here is the error:
Traceback (most recent call last):
  File "/home/Code/DeepCl.py", line 49, in <module>
    model.fit(trainImgSet, trainLabelSet, batch_size=10, epochs=5, validation_split=0.1)
  File "anaconda3/lib/python3.6/site-packages/tensorflow/python/keras/engine/training.py", line 1536, in fit
    validation_split=validation_split)
  File "/anaconda3/lib/python3.6/site-packages/tensorflow/python/keras/engine/training.py", line 992, in _standardize_user_data
    class_weight, batch_size)
  File "/anaconda3/lib/python3.6/site-packages/tensorflow/python/keras/engine/training.py", line 1169, in _standardize_weights
    training_utils.check_array_lengths(x, y, sample_weights)
  File "/anaconda3/lib/python3.6/site-packages/tensorflow/python/keras/engine/training_utils.py", line 426, in check_array_lengths
    'and ' + str(list(set_y)[0]) + ' target samples.')
ValueError: Input arrays should have the same number of samples as target arrays. Found 166 input samples and 4 target samples.

Ответы [ 2 ]

0 голосов
/ 08 марта 2019

Это случилось со мной, когда я позвонил:

X_train, y_train, X_test, y_test = sklearn.model_selection.train_test_split(...)

вместо

X_train, X_test, y_train, y_test = sklearn.model_selection.train_test_split(...)

(обратите внимание, что 2-я и 3-я переменные накладываются на LHS.)

Это привело к тому, что у меня были данные и метки с неравной длиной:

т.е. len (X_train)! = Len (y_train) и len (X_test)! = Len (y_test).

0 голосов
/ 22 декабря 2018

Здесь

  • Количество обучающих образцов не равно количеству меток.

  • Имеется 144 обучающих образца, но только4 метки для них.

  • Формы данных обучения и тестирования должны иметь одинаковое количество образцов.

  • Пример.тренировочные данные имеют форму ( 100 , 256 , 256 , 1 ).Данные испытаний должны иметь форму ( 100 , 1 ).

...