python - 如何加载使用纯张量流训练的 tf.keras 模型
问题描述
我已经用纯张量流训练了一个模型(用 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
我怎样才能摆脱这个错误?
使用 tensorflow 训练模型并使用 frommodel.save()
函数保存模型是不是很糟糕tf.keras
?
如果需要任何其他详细信息,请告诉我。谢谢!
解决方案
推荐阅读
- google-analytics - Google Analytics API 在同一天是否比 GA 网站更新?
- excel - SQL Server数据表更改时刷新excel链接文件
- java - 为什么流平均()方法返回 OptionalDouble 而不是 double?
- permissions - 如何通过 php LDAP 提取域用户在网络上的所有权限
- php - PhpSpreadsheet 中有 setZipClass 的替代品吗?
- java - 为什么 spring-data-jpa 不在 MS SQL 服务器中创建表?
- .net - 与 Angular 中的 ASP.NET MVC 的 UIHint 类似吗?
- locking - Sybase:行内/行外 LOB 如何影响阻塞
- javascript - REST API 决策 - 创建新的 API 或使用现有的
- reactjs - 任何知道在 redux 中发送的最新操作的方法