Wert-Fehler: Eingabe-arrays müssen die gleiche Anzahl von samples, die als Ziel-arrays. Gefunden 1600-Eingang Proben-und 6400-target-Proben
Ich versuche zu tun, eine 8-Klasse Klassifizierung. Hier ist der code:
import keras
import numpy as np
from keras.preprocessing.image import ImageDataGenerator
from keras.models import Sequential
from keras.layers import Dropout, Flatten, Dense
from keras import applications
from keras.optimizers import SGD
from keras import backend as K
K.set_image_dim_ordering('tf')
img_width, img_height = 48,48
top_model_weights_path = 'modelom.h5'
train_data_dir = 'chCdata1/train'
validation_data_dir = 'chCdata1/validation'
nb_train_samples = 6400
nb_validation_samples = 1600
epochs = 50
batch_size = 10
def save_bottlebeck_features():
datagen = ImageDataGenerator(rescale=1. / 255)
model = applications.VGG16(include_top=False, weights='imagenet', input_shape=(48,48,3))
generator = datagen.flow_from_directory(
train_data_dir,
target_size=(img_width, img_height),
batch_size=batch_size,
class_mode='categorical',
shuffle=False)
bottleneck_features_train = model.predict_generator(
generator, nb_train_samples // batch_size)
np.save(open('bottleneck_features_train', 'wb'),bottleneck_features_train)
generator = datagen.flow_from_directory(
validation_data_dir,
target_size=(img_width, img_height),
batch_size=batch_size,
class_mode='categorical',
shuffle=False)
bottleneck_features_validation = model.predict_generator(
generator, nb_validation_samples // batch_size)
np.save(open('bottleneck_features_validation', 'wb'),bottleneck_features_validation)
def train_top_model():
train_data = np.load(open('bottleneck_features_train', 'rb'))
train_labels = np.array([0] * (nb_train_samples // 8) + [1] * (nb_train_samples // 8) + [2] * (nb_train_samples // 8) + [3] * (nb_train_samples // 8) + [4] * (nb_train_samples // 8) + [5] * (nb_train_samples // 8) + [6] * (nb_train_samples // 8) + [7] * (nb_train_samples // 8))
validation_data = np.load(open('bottleneck_features_validation', 'rb'))
validation_labels = np.array([0] * (nb_train_samples // 8) + [1] * (nb_train_samples // 8) + [2] * (nb_train_samples // 8) + [3] * (nb_train_samples // 8) + [4] * (nb_train_samples // 8) + [5] * (nb_train_samples // 8) + [6] * (nb_train_samples // 8) + [7] * (nb_train_samples // 8))
train_labels = keras.utils.to_categorical(train_labels, num_classes = 8)
validation_labels = keras.utils.to_categorical(validation_labels, num_classes = 8)
model = Sequential()
model.add(Flatten(input_shape=train_data.shape[1:]))
model.add(Dense(512, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(8, activation='softmax'))
sgd = SGD(lr=1e-2, decay=0.00371, momentum=0.9, nesterov=False)
model.compile(optimizer=sgd,
loss='categorical_crossentropy', metrics=['accuracy'])
model.fit(train_data, train_labels,
epochs=epochs,
batch_size=batch_size,
validation_data=(validation_data, validation_labels))
model.save_weights(top_model_weights_path)
save_bottlebeck_features()
train_top_model()
Habe ich Hinzugefügt die vollständige Liste der Fehler hier:
Traceback (most recent call last):
File "<ipython-input-14-1d34826b5dd5>", line 1, in <module>
runfile('C:/Users/rajaramans2/codes/untitled15.py', wdir='C:/Users/rajaramans2/codes')
File "C:\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 866, in runfile
execfile(filename, namespace)
File "C:\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 102, in execfile
exec(compile(f.read(), filename, 'exec'), namespace)
File "C:/Users/rajaramans2/codes/untitled15.py", line 71, in <module>
train_top_model()
File "C:/Users/rajaramans2/codes/untitled15.py", line 67, in train_top_model
validation_data=(validation_data, validation_labels))
File "C:\Anaconda3\lib\site-packages\keras\models.py", line 856, in fit
initial_epoch=initial_epoch)
File "C:\Anaconda3\lib\site-packages\keras\engine\training.py", line 1449, in fit
batch_size=batch_size)
File "C:\Anaconda3\lib\site-packages\keras\engine\training.py", line 1317, in _standardize_user_data
_check_array_lengths(x, y, sample_weights)
File "C:\Anaconda3\lib\site-packages\keras\engine\training.py", line 235, 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 1600 input samples and 6400 target samples.
Der "ValueError: Eingabe-arrays müssen die gleiche Anzahl von samples, die als Ziel-arrays. Gefunden 1600 input-Proben und 6400 target-Muster" erscheint. Bitte helfen Sie mit, die Lösung und die notwendigen änderungen am code. Vielen Dank im Voraus.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie es aussieht ist die Anzahl der Beispiele in X_train d.h. train_data nicht übereinstimmen mit der Anzahl der Beispiele in y_train d.h. train_labels. Können überprüfen Sie es? Und in Zukunft bitte fügen Sie den vollständigen Fehler, da hilft es beim Debuggen das Problem.
Sieht aus wie Sie haben 1600 Beispiele für die Ausbildung. Und Ihre 8 Kurse sind nicht getrennt in Proben, Sie haben also ein array mit 8 x 1600 = 6400 Werte.
Dass array muss etwas sein wie (1600,8). Das ist: 1600 Proben mit 8 möglichen Klassen.
Nun müssen Sie wissen, wie Sie Ihre
train_labels
array organisiert ist. Vielleicht eine einfachereshape((1600,8))
ist genug, wenn das Feld richtig bestellt.Wenn nicht, haben Sie, um Sie zu organisieren Sie sich in 1600 Proben von acht labels.