Keras pretrained Inception V3 모델을 사용할 것입니다. 사전 처리 후 이미지 모양은 224 x 224 x 3입니다. 그러나 Keras Inception V3 모델에 대한 입력은 (?, 3,?,?)이며, 이는 일괄 처리 크기가 채널로 이어지는 것입니다. 그래서 나는 배열 모양을 바꿨다. 그러나 이것은 모든 일을 매우 느리게 만들고 기억을 자극합니다. 왜 그런지 모르겠습니다.numpy : 이미지 모양을 224 x 224 x 3에서 3 x 224 x 224로 변경하는 가장 빠른 방법
참고 : 이미지 모양이 224, 224, 3 인 경우 간단한 CNN에서 제대로 작동합니다. 그러나 3, 224, 224에 간단한 CNN을 먹이면 상황이 매우 느려지고 메모리 오버플로가 발생합니다. '0 INPUT_1'형상 = (?? 3) DTYPE = float32
tf.Tensor
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
이 입력 텐서 형상이다
이
내 코드
추가 정보 :
모델 -
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'))
발전기 기능 - 당신이 이것에 대한 .transpose
을 사용할 수 있습니다
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
이것은'transpose' 문제처럼 보이는이 아니라'reshape' 하나를 --Quoted. '3'은 채널을 계속 나타내며 '224,224'는 이미지 모양을 나타냅니다. – hpaulj
나는 문제를 해결하지 못했습니다. 나는 여기에 더 많은 정보를 추가했다. – sjishan
문제는 백엔드입니다. 이 모델을 올바르게 사용하려면 설명서를 읽어야합니다. – Nain