def testScopeRestore(self): c1 = conv.Conv2D(16, 8, 4, name='conv_2d_0', padding=conv.VALID, initializers={ 'w': initializers.restore_initializer( _checkpoint(), 'w', scope='agent/conv_net_2d/conv_2d_0'), 'b': initializers.restore_initializer( _checkpoint(), 'b', scope='agent/conv_net_2d/conv_2d_0') }) inputs = tf.constant(1 / 255.0, shape=[1, 86, 86, 3]) outputs = c1(inputs) init = tf.global_variables_initializer() tf.get_default_graph().finalize() with self.test_session() as session: session.run(init) o = session.run(outputs) self.assertAllClose(np.linalg.norm(o), _ONE_CONV_LAYER, atol=_TOLERANCE)
def testFromDifferentScope(self): sub = functools.partial(re.sub, r'^[^/]+/', 'agent/') restore_initializers = { 'w': initializers.restore_initializer(_checkpoint(), 'w', sub), 'b': initializers.restore_initializer(_checkpoint(), 'b', sub) } with tf.variable_scope('some_random_scope'): c = convnet.ConvNet2D(output_channels=(16, 32), kernel_shapes=(8, 4), strides=(4, 2), paddings=[conv.VALID], activation=tf.nn.relu, activate_final=True, initializers=restore_initializers) inputs = tf.constant(1 / 255.0, shape=[1, 86, 86, 3]) outputs = c(inputs) init = tf.global_variables_initializer() tf.get_default_graph().finalize() with self.test_session() as session: session.run(init) o = session.run(outputs) self.assertAllClose(np.linalg.norm(o), _TWO_CONV_LAYERS_RELU, atol=_TOLERANCE)
def testFromDifferentScope(self): sub = functools.partial(re.sub, r'^[^/]+/', 'agent/') restore_initializers = { 'w': initializers.restore_initializer(_checkpoint(), 'w', sub), 'b': initializers.restore_initializer(_checkpoint(), 'b', sub) } with tf.variable_scope('some_random_scope'): c = convnet.ConvNet2D( output_channels=(16, 32), kernel_shapes=(8, 4), strides=(4, 2), paddings=[conv.VALID], activation=tf.nn.relu, activate_final=True, initializers=restore_initializers) inputs = tf.constant(1 / 255.0, shape=[1, 86, 86, 3]) outputs = c(inputs) init = tf.global_variables_initializer() tf.get_default_graph().finalize() with self.test_session() as session: session.run(init) o = session.run(outputs) self.assertAllClose( np.linalg.norm(o), _TWO_CONV_LAYERS_RELU, atol=_TOLERANCE)
def testMoreMultipleRestore(self): restore_initializers = { 'w': initializers.restore_initializer(_checkpoint(), 'w'), 'b': initializers.restore_initializer(_checkpoint(), 'b') } with tf.variable_scope('agent'): c = convnet.ConvNet2D(output_channels=(16, 32), kernel_shapes=(8, 4), strides=(4, 2), paddings=[conv.VALID], activation=tf.nn.relu, activate_final=True, initializers=restore_initializers) inputs = tf.constant(1 / 255.0, shape=[1, 86, 86, 3]) outputs = c(inputs) init = tf.global_variables_initializer() tf.get_default_graph().finalize() with self.test_session() as session: session.run(init) o = session.run(outputs) self.assertAllClose(np.linalg.norm(o), _TWO_CONV_LAYERS_RELU, atol=_TOLERANCE)
def testScopeRestore(self): c1 = conv.Conv2D( 16, 8, 4, name='conv_2d_0', padding=conv.VALID, initializers={ 'w': initializers.restore_initializer( _checkpoint(), 'w', scope='agent/conv_net_2d/conv_2d_0'), 'b': initializers.restore_initializer( _checkpoint(), 'b', scope='agent/conv_net_2d/conv_2d_0') }) inputs = tf.constant(1 / 255.0, shape=[1, 86, 86, 3]) outputs = c1(inputs) init = tf.global_variables_initializer() tf.get_default_graph().finalize() with self.test_session() as session: session.run(init) o = session.run(outputs) self.assertAllClose(np.linalg.norm(o), _ONE_CONV_LAYER, atol=_TOLERANCE)
def testMoreMultipleRestore(self): restore_initializers = { 'w': initializers.restore_initializer(_checkpoint(), 'w'), 'b': initializers.restore_initializer(_checkpoint(), 'b') } with tf.variable_scope('agent'): c = convnet.ConvNet2D( output_channels=(16, 32), kernel_shapes=(8, 4), strides=(4, 2), paddings=[conv.VALID], activation=tf.nn.relu, activate_final=True, initializers=restore_initializers) inputs = tf.constant(1 / 255.0, shape=[1, 86, 86, 3]) outputs = c(inputs) init = tf.global_variables_initializer() tf.get_default_graph().finalize() with self.test_session() as session: session.run(init) o = session.run(outputs) self.assertAllClose( np.linalg.norm(o), _TWO_CONV_LAYERS_RELU, atol=_TOLERANCE)
def testTopLevelVariable(self): save_path = os.path.join(self.get_temp_dir(), 'toplevel_variable') g1 = tf.Graph() g2 = tf.Graph() with g1.as_default(): var1 = tf.get_variable('var1', shape=[], initializer=tf.constant_initializer(42)) with g2.as_default(): var2 = tf.get_variable( 'var2', shape=[], initializer=initializers.restore_initializer( save_path, 'var1')) with self.test_session(graph=g1) as session: tf.global_variables_initializer().run() save = tf.train.Saver([var1]) save.save(session, save_path) with self.test_session(graph=g2) as session: tf.global_variables_initializer().run() v2 = session.run(var2) self.assertAllEqual(v2, 42)
def testPartitionedVariable(self): save_path = os.path.join(self.get_temp_dir(), 'partitioned_variable') var_name = 'my_partitioned_var' g1 = tf.Graph() with g1.as_default(): def initializer1(shape, dtype, partition_info): _ = partition_info # Not used for creation. return tf.constant(True, dtype, shape) partitioned_var1 = tf.create_partitioned_variables( [1 << 3, 10], [4, 1], initializer1, dtype=tf.bool, name=var_name) with self.test_session(graph=g1) as session: with tf.device('/cpu:0'): tf.global_variables_initializer().run() pv1 = session.run(partitioned_var1) save = tf.train.Saver(partitioned_var1) save.save(session, save_path) g2 = tf.Graph() with g2.as_default(): initializer2 = initializers.restore_initializer(save_path, var_name, '') partitioned_var2 = tf.create_partitioned_variables( [1 << 3, 10], [4, 1], initializer2, dtype=tf.bool, name=var_name) with self.test_session(graph=g2) as session: tf.global_variables_initializer().run() pv2 = session.run(partitioned_var2) self.assertAllEqual(pv1, pv2)
def testMultipleRestore(self): g = tf.Graph() restore_initializers = { 'w': initializers.restore_initializer(_checkpoint(), 'w'), 'b': initializers.restore_initializer(_checkpoint(), 'b') } with g.as_default(): with tf.variable_scope('agent/conv_net_2d'): c1 = conv.Conv2D(16, 8, 4, name='conv_2d_0', padding=conv.VALID, initializers=restore_initializers) c2 = conv.Conv2D(32, 4, 2, name='conv_2d_1', padding=conv.VALID, initializers=restore_initializers) inputs = tf.constant(1 / 255.0, shape=[1, 86, 86, 3]) intermediate_1 = c1(inputs) intermediate_2 = c2(tf.nn.relu(intermediate_1)) outputs = tf.nn.relu(intermediate_2) init = tf.global_variables_initializer() tf.get_default_graph().finalize() with self.test_session() as session: session.run(init) i1, i2, o = session.run( [intermediate_1, intermediate_2, outputs]) self.assertAllClose(np.linalg.norm(i1), _ONE_CONV_LAYER, rtol=0.001, atol=0.001) self.assertAllClose(np.linalg.norm(i2), _TWO_CONV_LAYERS, rtol=0.001, atol=0.001) self.assertAllClose(np.linalg.norm(o), _TWO_CONV_LAYERS_RELU, rtol=0.001, atol=0.001)
def testSimpleRestore(self): with tf.variable_scope('agent/conv_net_2d/conv_2d_0'): bias = tf.get_variable( 'b', shape=[16], initializer=initializers.restore_initializer(_checkpoint(), 'b')) with self.test_session() as session: session.run(tf.global_variables_initializer()) b = session.run(bias) self.assertAllClose(np.linalg.norm(b), 3.9685926, atol=_TOLERANCE)
def testMultipleRestore(self): g = tf.Graph() restore_initializers = { 'w': initializers.restore_initializer(_checkpoint(), 'w'), 'b': initializers.restore_initializer(_checkpoint(), 'b') } with g.as_default(): with tf.variable_scope('agent/conv_net_2d'): c1 = conv.Conv2D( 16, 8, 4, name='conv_2d_0', padding=conv.VALID, initializers=restore_initializers) c2 = conv.Conv2D( 32, 4, 2, name='conv_2d_1', padding=conv.VALID, initializers=restore_initializers) inputs = tf.constant(1 / 255.0, shape=[1, 86, 86, 3]) intermediate_1 = c1(inputs) intermediate_2 = c2(tf.nn.relu(intermediate_1)) outputs = tf.nn.relu(intermediate_2) init = tf.global_variables_initializer() tf.get_default_graph().finalize() with self.test_session() as session: session.run(init) i1, i2, o = session.run([intermediate_1, intermediate_2, outputs]) self.assertAllClose(np.linalg.norm(i1), _ONE_CONV_LAYER, atol=_TOLERANCE) self.assertAllClose(np.linalg.norm(i2), _TWO_CONV_LAYERS, atol=_TOLERANCE) self.assertAllClose( np.linalg.norm(o), _TWO_CONV_LAYERS_RELU, atol=_TOLERANCE)
def testTopLevelVariable(self): save_path = os.path.join(self.get_temp_dir(), 'toplevel_variable') g1 = tf.Graph() g2 = tf.Graph() with g1.as_default(): var1 = tf.get_variable( 'var1', shape=[], initializer=tf.constant_initializer(42)) with g2.as_default(): var2 = tf.get_variable( 'var2', shape=[], initializer=initializers.restore_initializer(save_path, 'var1')) with self.test_session(graph=g1) as session: tf.global_variables_initializer().run() save = tf.train.Saver([var1]) save.save(session, save_path) with self.test_session(graph=g2) as session: tf.global_variables_initializer().run() v2 = session.run(var2) self.assertAllEqual(v2, 42)