Создание и объединение слоев в Resnet - PullRequest
0 голосов
/ 16 января 2020

Я работаю с набором данных изображений

Сначала я изменил размеры всех изображений

im_size1 = 128
im_size2 = 128
i = 0 
for f, breed in tqdm(df_train.values):
    if type(cv2.imread('train/{}.jpeg'.format(f)))==type(None):
        continue
    else:
        img = cv2.imread('train/{}.jpeg'.format(f))
        label = one_hot_labels[i]
        x_train.append(cv2.resize(img, (im_size1, imt_size2)))
        y_train.append(label)
        i += 1
np.save('x_train2',x_train)
np.save('y_train2',y_train)
print('Done')

Во втором прогоне я передал гистограмму градиента. Примечание: модель была одинаковой в обоих случаях. Пробежал по разным проектам, получил разные результаты

i = 0 
for f, breed in tqdm(df_train.values):
    if type(cv2.imread('train/{}.jpeg'.format(f)))==type(None):
        continue
    else:
        img = cv2.imread('train/{}.jpeg'.format(f))
        label = one_hot_labels[i]
        resizedImage = cv2.resize(img, (im_size1, im_size2))
        hog_vec, hog_vis = feature.hog(resizedImage, visualize=True)
        resizedImageVec = cv2.resize(hog_vec, (im_size1, im_size2))
        x_train.append(resizedImageVec)
        #np.concatenate(x_train, hog_vec[:])

        y_train.append(label)
        i += 1
np.save('x_train2hog',x_train)
np.save('y_train2hog',y_train)
print('Done')

Затем настроил модель так:

base_model = ResNet50(weights = None, include_top=False, input_shape=(im_size1, im_size2, 3))

# Add a new top layer
x = base_model.output
x = Flatten()(x)
x = Dropout(0.2)(x)
x = Dense(32, activation='relu')(x)
x = Dense(16, activation='relu')(x)
predictions = Dense(num_class, activation='softmax')(x)

# This is the model we will train
model = Model(inputs=base_model.input, outputs=predictions)

# First: train only the top layers (which were randomly initialized)
#for layer in base_model.layers:
#    layer.trainable = False

model.compile(loss='categorical_crossentropy', 
              optimizer='rmsprop', 
              metrics=['accuracy'])

callbacks_list = [keras.callbacks.EarlyStopping(monitor='val_acc', verbose=1)]
model.summary()

Теперь мой профессор спросил меня об этом.

"Тренируй последний слой используя изображения, затем обучите последний слой, используя элементы (различное представление изображений). Объедините эти два слоя, а затем обучите еще один слой. "

Пожалуйста, объясните мне, как я могу выполнить sh это

1 Ответ

0 голосов
/ 16 января 2020

Посмотрите на Объединение слоев из Keras API

keras.layers.Concatenate(axis=-1)

и функциональную версию:

keras.layers.concatenate(inputs, axis=-1)

...