import tensorflow.keras as ks
def scope_error_test():
input_holder = tf.placeholder(dtype=tf.float32,
shape=(None, 368, 368, 3),
name='input')
with tf.variable_scope("scope_1"):
with tf.variable_scope("scope_2"):
conv1 = ks.layers.Conv2D(kernel_size=7,
filters=64,
strides=2,
padding='same',
activation=tf.nn.relu,
name='conv1')(input_holder)
pool1 = ks.layers.MaxPool2D(pool_size=3, padding='same',
strides=2,
name='pool1')(inputs=conv1)
print(pool1.get_shape().as_list())
with tf.Session() as sess:
scope_error_test()
sess.run(tf.global_variables_initializer())
print(tf.global_variables())
with tf.variable_scope('', reuse=True):
for variable in tf.global_variables():
var_name = variable.name.split(':')[0]
var_tf = tf.get_variable(var_name)
В этом примере кода я хочу понять, почему я получаю эту ошибку:
ValueError: Переменная scope_1 / scope_2 / conv1 / kernel не существует или не была создана с помощью tf.get_variable (). Вы имели в виду установить reuse = tf.AUTO_REUSE в VarScope?
Примечание:
Я использовал tensorflow.contrib.layers
вместо tensorflow.keras.layers
, и он работал правильно!
Может быть ошибка!?
Я пробовал тензор потока 1.9.0 и тензор потока 1.12.0