def setUp(self): self.log_dir = tempfile.mkdtemp() # We use numpy.random to generate audio. We seed to avoid non-determinism # in this test. numpy.random.seed(42) # Create audio summaries for run foo. ops.reset_default_graph() sess = tf.Session() placeholder = array_ops.placeholder(dtypes.float32) summary_lib.audio(name="baz", tensor=placeholder, sample_rate=44100) merged_summary_op = summary_lib.merge_all() foo_directory = os.path.join(self.log_dir, "foo") writer = FileWriter(foo_directory) writer.add_graph(sess.graph) for step in xrange(2): # The floats (sample data) range from -1 to 1. writer.add_summary(sess.run(merged_summary_op, feed_dict={ placeholder: numpy.random.rand(42, 22050) * 2 - 1 }), global_step=step) writer.close() # Create audio summaries for run bar. ops.reset_default_graph() sess = tf.Session() placeholder = array_ops.placeholder(dtypes.float32) summary_lib.audio(name="quux", tensor=placeholder, sample_rate=44100) merged_summary_op = summary_lib.merge_all() bar_directory = os.path.join(self.log_dir, "bar") writer = summary_lib.FileWriter(bar_directory) writer.add_graph(sess.graph) for step in xrange(2): # The floats (sample data) range from -1 to 1. writer.add_summary(sess.run(merged_summary_op, feed_dict={ placeholder: numpy.random.rand(42, 11025) * 2 - 1 }), global_step=step) writer.close() # Start a server with the plugin. multiplexer = event_multiplexer.EventMultiplexer({ "foo": foo_directory, "bar": bar_directory, }) context = base_plugin.TBContext( logdir=self.log_dir, multiplexer=multiplexer) self.plugin = audio_plugin.AudioPlugin(context) wsgi_app = application.TensorBoardWSGIApp( self.log_dir, [self.plugin], multiplexer, reload_interval=0) self.server = werkzeug_test.Client(wsgi_app, wrappers.BaseResponse)
def test_audio(self): op = summary_lib.audio('white_noise', random_uniform(shape=[1, 44100], minval=-1.0, maxval=1.0), sample_rate=44100) value = self._value_from_op(op) assert value.HasField('audio'), value self._assert_noop(value)
def testAudioSummary(self): with self.cached_session() as s: i = array_ops.ones((5, 3, 4)) with ops.name_scope('outer'): aud = summary_lib.audio('inner', i, 0.2, max_outputs=3) summary_str = s.run(aud) summary = summary_pb2.Summary() summary.ParseFromString(summary_str) values = summary.value self.assertEqual(len(values), 3) tags = sorted(v.tag for v in values) expected = sorted('outer/inner/audio/{}'.format(i) for i in xrange(3)) self.assertEqual(tags, expected)
def testAudioSummary(self): with self.cached_session() as s: i = array_ops.ones((5, 3, 4)) with ops.name_scope('outer'): aud = summary_lib.audio('inner', i, 0.2, max_outputs=3) summary_str = s.run(aud) summary = summary_pb2.Summary() summary.ParseFromString(summary_str) values = summary.value self.assertEqual(len(values), 3) tags = sorted(v.tag for v in values) expected = sorted('outer/inner/audio/{}'.format(i) for i in xrange(3)) self.assertEqual(tags, expected)
def test_audio_summary_v2(self): """Tests audio v2 invocation.""" with test.mock.patch.object( summary_v2, 'audio', autospec=True) as mock_audio_v2: with summary_ops_v2.create_summary_file_writer( self.get_temp_dir()).as_default(step=10): i = array_ops.ones((5, 3, 4)) with ops.name_scope_v2('dolphin'): tensor = summary_lib.audio('wave', i, 0.2, max_outputs=3) # Returns empty string. self.assertEqual(tensor.numpy(), b'') self.assertEqual(tensor.dtype, dtypes.string) mock_audio_v2.assert_called_once_with( 'dolphin/wave', data=i, sample_rate=0.2, step=10, max_outputs=3)
def test_audio_summary_v2__2d_tensor(self): """Tests audio v2 invocation with 2-D tensor input.""" with test.mock.patch.object( summary_v2, 'audio', autospec=True) as mock_audio_v2: with summary_ops_v2.create_summary_file_writer( self.get_temp_dir()).as_default(step=11): input_2d = array_ops.ones((5, 3)) tensor = summary_lib.audio('wave', input_2d, 0.2, max_outputs=3) # Returns empty string. self.assertEqual(tensor.numpy(), b'') self.assertEqual(tensor.dtype, dtypes.string) mock_audio_v2.assert_called_once_with( 'wave', data=test.mock.ANY, sample_rate=0.2, step=11, max_outputs=3) input_3d = array_ops.ones((5, 3, 1)) # 3-D input tensor self.assertAllEqual(mock_audio_v2.call_args[1]['data'], input_3d)
def testAudioSummary(self): np.random.seed(7) for channels in (1, 2, 5, 8): with self.test_session(graph=ops.Graph()) as sess: num_frames = 7 shape = (4, num_frames, channels) # Generate random audio in the range [-1.0, 1.0). const = 2.0 * np.random.random(shape) - 1.0 # Summarize sample_rate = 8000 summ = summary.audio( "snd", const, max_outputs=3, sample_rate=sample_rate) value = sess.run(summ) self.assertEqual([], summ.get_shape()) audio_summ = self._AsSummary(value) # Check the rest of the proto self._CheckProto(audio_summ, sample_rate, channels, num_frames)
def testAudioSummary(self): np.random.seed(7) for channels in (1, 2, 5, 8): with self.session(graph=ops.Graph()) as sess: num_frames = 7 shape = (4, num_frames, channels) # Generate random audio in the range [-1.0, 1.0). const = 2.0 * np.random.random(shape) - 1.0 # Summarize sample_rate = 8000 summ = summary.audio( "snd", const, max_outputs=3, sample_rate=sample_rate) value = sess.run(summ) self.assertEqual([], summ.get_shape()) audio_summ = self._AsSummary(value) # Check the rest of the proto self._CheckProto(audio_summ, sample_rate, channels, num_frames)
def testAudioSummaryWithInvalidSampleRate(self): with self.assertRaises(errors.InvalidArgumentError): invalid_sample_rate = [22000.0, 22000.0] self.evaluate(summary_lib.audio('', [[1.0]], invalid_sample_rate))