Как загрузить модель tf.keras, которая обучается с чистым тензорным потоком - PullRequest
0 голосов
/ 12 июня 2019

Я обучил модель (которая построена с помощью tf.keras) с чистым тензорным потоком. Я сохранил модель, используя model.save(model_150.h5) (так как это модель keras). Вот моя модель:

conv_1_1 = Conv2D(filters = 64, kernel_size = 3, activation='relu', padding='same')(input_img)
conv_1_1_bn = BatchNormalization()(conv_1_1)
conv_1_1_do = Dropout(droprate)(conv_1_1_bn)

pool_1 = MaxPooling2D(pool_size= 2, strides = 2)(conv_1_1_do)

conv_4_1 = SeparableConv2D(filters = 512, kernel_size = 3, activation='relu', padding='same')(pool_1)
conv_4_1_bn = BatchNormalization()(conv_4_1)
conv_4_1_do = Dropout(droprate)(conv_4_1_bn)

pool_4 = MaxPooling2D(pool_size= 2, strides = 2)(conv_4_1_do)

conv_5_1 = SeparableConv2D(filters = 1024, kernel_size = 3, activation='relu', padding='same')(pool_4)
conv_5_1_bn = BatchNormalization()(conv_5_1)
conv_5_1_do = Dropout(droprate)(conv_5_1_bn)

upconv_1 = upconv_concat(conv_5_1_do, conv_4_1_do, n_filter=512, pool_size=2, stride=2) 

conv_6_1 = SeparableConv2D(filters = 512, kernel_size = 3, activation='relu', padding='same')(upconv_1)
conv_6_1_bn = BatchNormalization()(conv_6_1)
conv_6_1_do = Dropout(droprate)(conv_6_1_bn)


upconv_2 = upconv_concat(conv_6_1_do, conv_1_1_do, n_filter=64, pool_size=2, stride=2) 

conv_9_1 = SeparableConv2D(filters = 64, kernel_size = 3, activation='relu', padding='same')(upconv_2)
conv_9_1_bn = BatchNormalization()(conv_9_1)
conv_9_1_do = Dropout(droprate)(conv_9_1_bn)


ae_output = Conv2D(num_classes, kernel_size=1, strides = (1,1), activation="softmax")(conv_9_1_do)

Я изначально определил модель так:

e_model = Model(input_img, ae_output)

Теперь мне нужно было пройти специальное обучение. Итак, я тренировал модель с чистым тензорным потоком так:

Вот моя функция потерь

def cut_loss(original_image):
    ypred = e_model(original_image)
    ...
    ...
    #do some computations and calculate some custom loss
    ...
    return loss

Вот мой оптимизатор

#optimizer    
opt = tf.train.AdamOptimizer(learning_rate=e_lr).minimize(cut_loss(original_image))

Вот мой тренировочный цикл

with tf.Session() as sess:
    sess.run(tf.global_variable_initializer())
    for epoch in range(num_epochs):
        print("epoch:", epoch)
        count = 0
        batch_start_index = 0
        while (count != num_batches):
            X_train_batch = X_train[batch_start_index : batch_start_index+batch_size] #send a batch of input images of size (batchsize, 224, 224, 1)
            _, train_loss = sess.run([opt,loss], feed_dict={original_image: X_train_batch})
            batch_start_index+=batch_size
            count+=1
        print("Train loss after ", str(epoch), "is", str(train_loss))

После тренировки я сохранил модель и перезапустил свое ядро ​​jupyter. когда я пытался загрузить модель из файла h5, как это

from tensorflow.keras.models import load_model
e_model = load_model('model_150.h5')

Я получаю следующую ошибку:

UserWarning: No training configuration found in save file: the model was *not* compiled. Compile it manually

Как мне избавиться от этой ошибки?

Разве плохо тренировать модель с использованием тензорного потока и сохранять модель с помощью функции model.save() из tf.keras?

Пожалуйста, дайте мне знать, если потребуется дополнительная информация. Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...