Ich werde Keras vortrained Inception V3-Modell verwenden. Nach der Vorverarbeitung ist die Bildform 224 x 224 x 3. Aber die Eingabe in das Keras Inception V3-Modell ist (?, 3,?,?), Dh nach der Stapelgröße kommt der Kanal. Also habe ich Array-Shapes gemacht. Aber das macht die ganze Sache super langsam und verschlingt die Erinnerung, ich bin mir nicht sicher warum.numpy: schnellste Möglichkeit zum Ändern der Bildform von 224 x 224 x 3 auf 3 x 224 x 224
Hinweis: Wenn die Bildform 224, 224, 3 war, funktioniert es gut auf einem einfachen CNN. Aber 3, 224, 224, die dem einfachen CNN zugeführt wurden, machten die Dinge superlangsam und Speicherüberlauf.
Dies ist mein Code:
def get_image_preprocessed(image_name):
im = Image.open(image_name)
im = np.asarray(im)
im = im/float(255)
im = im.reshape(3,224,224) #this changes 224,224,3 to 3,224,224
return im
Dies ist der Eingang Tensor Form
tf.Tensor 'input_1: 0' shape = (? ?, 3,,) dtype = float32
Weitere Informationen:
Artikelnummer-
model = Sequential()
model.add(Conv2D(32, (3, 3), input_shape=(3,224, 224), padding='same', activation='relu', kernel_constraint=maxnorm(3)))
model.add(Dropout(0.2))
model.add(Conv2D(32, (3, 3), activation='relu', padding='same', kernel_constraint=maxnorm(3)))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Flatten())
model.add(Dense(512, activation='relu', kernel_constraint=maxnorm(3)))
model.add(Dropout(0.5))
model.add(Dense(3, activation='softmax'))
Generator Funktion-
def generator(save_dir_path, encoding_list, batch_size, image_size):
# Create empty arrays to contain batch of features and labels#
batch_features = np.zeros((batch_size, 3, image_size, image_size))
batch_labels = np.zeros((batch_size,len(encoding_list)))
image_list= [file for file in os.listdir(save_dir_path) if (file.endswith('.jpeg') or file.endswith('.-'))]
while True:
for i in range(batch_size):
# choose random index in features
image_name= random.choice(image_list)
batch_features[i] = get_image_preprocessed(save_dir_path, image_name)
batch_labels[i] = np.asarray(get_encoding(encoding_list, image_name.split('_')[0]))
yield batch_features, batch_labels
Das sieht wie ein 'transpose' Problem, nicht eine' reshape' ein. Die '3' sollte weiterhin die Kanäle und die' 224,224' die Bildform darstellen. – hpaulj
Ich tat, das Problem wurde nicht gelöst. Ich habe hier mehr Informationen hinzugefügt. – sjishan
Das Problem ist das Backend. Sie müssen die Dokumentation für die korrekte Verwendung dieses Modells lesen. – Nain