将我的代码从 TF1 调整为 TF2.6 我遇到了麻烦。我正在尝试向 inception resnet 添加一些自定义层,保存模型,然后加载并运行它。
from tensorflow.keras.layers import Dense
from tensorflow.keras.models import Model
from tensorflow.keras.applications.inception_resnet_v2 import InceptionResNetV2
from tensorflow.keras.layers import Dense, GlobalAveragePooling2D
import tensorflow as tf
import numpy as np
from PIL import Image
export_path = "./save_test"
# Get model without top and add two layers
base_model = InceptionResNetV2(weights='imagenet', input_tensor=None, include_top=False)
out = base_model.output
out = GlobalAveragePooling2D()(out)
predictions = Dense(7, activation='softmax', name="output")(out)
# Make new model using inputs from base model and custom outputs
model = Model(inputs=base_model.input, …Run Code Online (Sandbox Code Playgroud) 我有一个基于TensorFlow的神经网络和一组变量.
培训功能如下:
def train(load = True, step)
"""
Defining the neural network is skipped here
"""
train_step = tf.train.AdamOptimizer(1e-4).minimize(mse)
# Saver
saver = tf.train.Saver()
if not load:
# Initalizing variables
sess.run(tf.initialize_all_variables())
else:
saver.restore(sess, 'Variables/map.ckpt')
print 'Model Restored!'
# Perform stochastic gradient descent
for i in xrange(step):
train_step.run(feed_dict = {x: train, y_: label})
# Save model
save_path = saver.save(sess, 'Variables/map.ckpt')
print 'Model saved in file: ', save_path
print 'Training Done!'
Run Code Online (Sandbox Code Playgroud)
我正在调用这样的训练函数:
# First train
train(False, 1)
# Following train
for i …Run Code Online (Sandbox Code Playgroud) 我想做的是同时运行多个预先训练好的Tensorflow网.因为每个网络中的一些变量的名称可以是相同的,所以常见的解决方案是在创建网络时使用名称范围.但问题是我训练了这些模型并将训练过的变量保存在几个检查点文件中.在创建网络时使用名称范围后,我无法从检查点文件加载变量.
例如,我训练了一个AlexNet,我想比较两组变量,一组来自纪元10(保存在文件epoch_10.ckpt中),另一组来自纪元50(保存在文件epoch_50中). CKPT).因为这两者是完全相同的网,所以内部变量的名称是相同的.我可以使用创建两个网
with tf.name_scope("net1"):
net1 = CreateAlexNet()
with tf.name_scope("net2"):
net2 = CreateAlexNet()
Run Code Online (Sandbox Code Playgroud)
但是,我无法从.ckpt文件加载训练过的变量,因为当我训练这个网时,我没有使用名称范围.即使我在训练网络时可以将名称范围设置为"net1",这也可以防止我加载net2的变量.
我试过了:
with tf.name_scope("net1"):
mySaver.restore(sess, 'epoch_10.ckpt')
with tf.name_scope("net2"):
mySaver.restore(sess, 'epoch_50.ckpt')
Run Code Online (Sandbox Code Playgroud)
这不起作用.
解决这个问题的最佳方法是什么?