Какой тип данных для передачи в модели Keras, чтобы соответствовать? - PullRequest
0 голосов
/ 23 апреля 2019

Я слежу за https://www.tensorflow.org/tutorials/keras/basic_classification, чтобы решить задачу Kaggle.

Однако я не понимаю, какие данные мне следует вводить в функцию подбора.

Я разделил тренировочный набор данных на X_train, y_train, X_test и y_test.X_train имеет форму (13125, 32, 32, 3).

model = keras.Sequential([
    keras.layers.Flatten(input_shape=(32, 32, 3)),
    keras.layers.Dense(128, activation=tf.nn.relu),
    keras.layers.Dense(10, activation=tf.nn.softmax)
])

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

model.fit(X_train, y_train, epochs=5)

Я получил сообщение об ошибке:

Ошибка при проверке цели модели: список массивов Numpy, передаваемых вашей модели, не соответствует размеру, ожидаемому моделью.Ожидается увидеть 1 массив (ов), но вместо этого получен следующий список из 13125 массивов:

ОБНОВЛЕНИЕ:

# TensorFlow and tf.keras
import tensorflow as tf
from tensorflow import keras

# Helper libraries
import numpy as np
import matplotlib.pyplot as plt

model = keras.Sequential([
    keras.layers.Flatten(input_shape=(32,32,3)),
    keras.layers.Dense(128, activation=tf.nn.relu),
    keras.layers.Dense(10, activation=tf.nn.softmax)
])

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


X_train_stack = np.vstack(X_train)
model.fit(X_train_stack, y_train, epochs=5)

Я получил ошибку:

Ошибка при проверке ввода: ожидалось, что flatten_7_input будет иметь 4 измерения, но получит массив с формой (420000, 32, 3)

#read in training set
train_img = []
train_lb = []
for i in range(len(cactus_label)):
    row = cactus_label.iloc[i]
    fileName = row['id']
    train_lb.append(row['has_cactus'])
    path = "../input/train/train/{}".format(fileName)
    im = mpimg.imread(path)
    train_img.append(im)

X_train, X_test, y_train, y_test = train_test_split(train_img, train_lb) 
X_train = np.array(X_train)
X_test = np.array(X_test)

1 Ответ

1 голос
/ 23 апреля 2019

Вам нужно передать массив numpy, но вместо этого вы передаете список массивов numpy.Используйте np.stack() для создания одного массива numpy из списка массивов numpy:

X_train = np.stack(X_train, axis=0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...