Beispiel #1
0
  def __init__(self,
               images=None,
               actions=None,
               states=None,
               sequence_length=None,
               reuse_scope=None,
               prefix=None):

    if sequence_length is None:
      sequence_length = FLAGS.sequence_length

    if prefix is None:
        prefix = tf.placeholder(tf.string, [])
    self.prefix = prefix
    self.iter_num = tf.placeholder(tf.float32, [])
    summaries = []

    # Split into timesteps.
    actions = tf.split(axis=1, num_or_size_splits=int(actions.get_shape()[1]), value=actions)
    actions = [tf.squeeze(act) for act in actions]
    states = tf.split(axis=1, num_or_size_splits=int(states.get_shape()[1]), value=states)
    states = [tf.squeeze(st) for st in states]
    images = tf.split(axis=1, num_or_size_splits=int(images.get_shape()[1]), value=images)
    images = [tf.squeeze(img) for img in images]

    if reuse_scope is None:
      gen_images, gen_states = construct_model(
          images,
          actions,
          states,
          iter_num=self.iter_num,
          k=FLAGS.schedsamp_k,
          use_state=FLAGS.use_state,
          num_masks=FLAGS.num_masks,
          cdna=FLAGS.model == 'CDNA',
          dna=FLAGS.model == 'DNA',
          stp=FLAGS.model == 'STP',
          context_frames=FLAGS.context_frames)
    else:  # If it's a validation or test model.
      with tf.variable_scope(reuse_scope, reuse=True):
        gen_images, gen_states = construct_model(
            images,
            actions,
            states,
            iter_num=self.iter_num,
            k=FLAGS.schedsamp_k,
            use_state=FLAGS.use_state,
            num_masks=FLAGS.num_masks,
            cdna=FLAGS.model == 'CDNA',
            dna=FLAGS.model == 'DNA',
            stp=FLAGS.model == 'STP',
            context_frames=FLAGS.context_frames)

    # L2 loss, PSNR for eval.
    loss, psnr_all = 0.0, 0.0
    for i, x, gx in zip(
        range(len(gen_images)), images[FLAGS.context_frames:],
        gen_images[FLAGS.context_frames - 1:]):
      recon_cost = mean_squared_error(x, gx)
      psnr_i = peak_signal_to_noise_ratio(x, gx)
      psnr_all += psnr_i
      summaries.append(
          tf.summary.scalar(prefix + '_recon_cost' + str(i), recon_cost))
      summaries.append(tf.summary.scalar(prefix + '_psnr' + str(i), psnr_i))
      loss += recon_cost

    for i, state, gen_state in zip(
        range(len(gen_states)), states[FLAGS.context_frames:],
        gen_states[FLAGS.context_frames - 1:]):
      state_cost = mean_squared_error(state, gen_state) * 1e-4
      summaries.append(
          tf.summary.scalar(prefix + '_state_cost' + str(i), state_cost))
      loss += state_cost
    summaries.append(tf.summary.scalar(prefix + '_psnr_all', psnr_all))
    self.psnr_all = psnr_all

    self.loss = loss = loss / np.float32(len(images) - FLAGS.context_frames)

    summaries.append(tf.summary.scalar(prefix + '_loss', loss))

    self.lr = tf.placeholder_with_default(FLAGS.learning_rate, ())

    self.train_op = tf.train.AdamOptimizer(self.lr).minimize(loss)
    self.summ_op = tf.summary.merge(summaries)
    def __init__(self,
                 images=None,
                 actions=None,
                 states=None,
                 sequence_length=None,
                 reuse_scope=None,
                 prefix=None):

        if sequence_length is None:
            sequence_length = FLAGS.sequence_length

        if prefix is None:
            prefix = tf.placeholder(tf.string, [])
        self.prefix = prefix
        self.iter_num = tf.placeholder(tf.float32, [])
        summaries = []

        # Split into timesteps.
        #分为多个时间步
        actions = tf.split(axis=1,
                           num_or_size_splits=int(actions.get_shape()[1]),
                           value=actions)
        actions = [tf.squeeze(act) for act in actions]
        states = tf.split(axis=1,
                          num_or_size_splits=int(states.get_shape()[1]),
                          value=states)
        states = [tf.squeeze(st) for st in states]
        images = tf.split(axis=1,
                          num_or_size_splits=int(images.get_shape()[1]),
                          value=images)
        images = [tf.squeeze(img) for img in images]
        self.images = images
        if reuse_scope is None:
            gen_images, gen_states = construct_model(
                images,
                actions,
                states,
                iter_num=self.iter_num,
                k=FLAGS.schedsamp_k,
                use_state=FLAGS.use_state,
                num_masks=FLAGS.num_masks,
                cdna=FLAGS.model == 'CDNA',
                dna=FLAGS.model == 'DNA',
                stp=FLAGS.model == 'STP',
                context_frames=FLAGS.context_frames)
        else:  # If it's a validation or test model. 如果是一个验证或者测试模型

            with tf.variable_scope(reuse_scope, reuse=True):
                gen_images, gen_states = construct_model(
                    images,
                    actions,
                    states,
                    iter_num=self.iter_num,
                    k=FLAGS.schedsamp_k,
                    use_state=FLAGS.use_state,
                    num_masks=FLAGS.num_masks,
                    cdna=FLAGS.model == 'CDNA',
                    dna=FLAGS.model == 'DNA',
                    stp=FLAGS.model == 'STP',
                    context_frames=FLAGS.context_frames)
        self.gen_images = gen_images
        # L2 loss, PSNR for eval. L2损失PSNR为评估值
        loss, psnr_all = 0.0, 0.0
        for i, x, gx in zip(range(len(gen_images)),
                            images[FLAGS.context_frames:],
                            gen_images[FLAGS.context_frames - 1:]):
            recon_cost = mean_squared_error(x, gx)
            psnr_i = peak_signal_to_noise_ratio(x, gx)
            psnr_all += psnr_i
            summaries.append(
                tf.summary.scalar(prefix + '_recon_cost' + str(i), recon_cost))
            summaries.append(
                tf.summary.scalar(prefix + '_psnr' + str(i), psnr_i))
            loss += recon_cost

        for i, state, gen_state in zip(range(len(gen_states)),
                                       states[FLAGS.context_frames:],
                                       gen_states[FLAGS.context_frames - 1:]):
            state_cost = mean_squared_error(state, gen_state) * 1e-4
            summaries.append(
                tf.summary.scalar(prefix + '_state_cost' + str(i), state_cost))
            loss += state_cost
        summaries.append(tf.summary.scalar(prefix + '_psnr_all', psnr_all))
        self.psnr_all = psnr_all

        self.loss = loss = loss / np.float32(
            len(images) - FLAGS.context_frames)

        summaries.append(tf.summary.scalar(prefix + '_loss', loss))

        self.lr = tf.placeholder_with_default(FLAGS.learning_rate, ())

        self.train_op = tf.train.AdamOptimizer(self.lr).minimize(loss)
        self.summ_op = tf.summary.merge(summaries)
Beispiel #3
0
  def __init__(self,
               images=None,
               actions=None,
               states=None,
               sequence_length=None,
               reuse_scope=None,
               prefix=None):

    if sequence_length is None:
      sequence_length = FLAGS.sequence_length

    if prefix is None:
        prefix = tf.placeholder(tf.string, [])
    self.prefix = prefix
    self.iter_num = tf.placeholder(tf.float32, [])
    summaries = []

    # Split into timesteps.
    actions = tf.split(axis=1, num_or_size_splits=int(actions.get_shape()[1]), value=actions)
    actions = [tf.squeeze(act) for act in actions]
    states = tf.split(axis=1, num_or_size_splits=int(states.get_shape()[1]), value=states)
    states = [tf.squeeze(st) for st in states]
    images = tf.split(axis=1, num_or_size_splits=int(images.get_shape()[1]), value=images)
    images = [tf.squeeze(img) for img in images]

    if reuse_scope is None:
      gen_images, gen_states, latent_loss = construct_model(
          images,
          actions,
          states,
          iter_num=self.iter_num,
          k=FLAGS.schedsamp_k,
          use_state=FLAGS.use_state,
          num_masks=FLAGS.num_masks,
          cdna=FLAGS.model == 'CDNA',
          dna=FLAGS.model == 'DNA',
          stp=FLAGS.model == 'STP',
          context_frames=FLAGS.context_frames)
    else:  # If it's a validation or test model.
      with tf.variable_scope(reuse_scope, reuse=True):
        gen_images, gen_states, latent_loss = construct_model(
            images,
            actions,
            states,
            iter_num=self.iter_num,
            k=FLAGS.schedsamp_k,
            use_state=FLAGS.use_state,
            num_masks=FLAGS.num_masks,
            cdna=FLAGS.model == 'CDNA',
            dna=FLAGS.model == 'DNA',
            stp=FLAGS.model == 'STP',
            context_frames=FLAGS.context_frames)

    # L2 loss, PSNR for eval.
    loss, psnr_all = 0.0, 0.0
    for i, x, gx in zip(
        range(len(gen_images)), images[FLAGS.context_frames:],
        gen_images[FLAGS.context_frames - 1:]):
      recon_cost = mean_squared_error(x, gx)
      psnr_i = peak_signal_to_noise_ratio(x, gx)
      psnr_all += psnr_i
      summaries.append(
          tf.summary.scalar(prefix + '_recon_cost' + str(i), recon_cost))
      summaries.append(tf.summary.scalar(prefix + '_psnr' + str(i), psnr_i))
      loss += recon_cost

    for i, state, gen_state in zip(
        range(len(gen_states)), states[FLAGS.context_frames:],
        gen_states[FLAGS.context_frames - 1:]):
      state_cost = mean_squared_error(state, gen_state) * 1e-4
      summaries.append(
          tf.summary.scalar(prefix + '_state_cost' + str(i), state_cost))
      loss += state_cost
    summaries.append(tf.summary.scalar(prefix + '_psnr_all', psnr_all))
    self.psnr_all = psnr_all

    loss_mse = loss / np.float32(len(images) - FLAGS.context_frames)
    loss = loss_mse
    if FLAGS.stochastic_model:
      values = [0.0, FLAGS.latent_loss_multiplier]
      # KL loss is zero till 3rd stage
      boundaries = [FLAGS.num_iterations_1st_stage + FLAGS.num_iterations_2nd_stage]
      latent_multiplier = tf.train.piecewise_constant(
          tf.cast(self.iter_num, tf.int32),
          boundaries, values)
      loss += latent_multiplier * latent_loss
      summaries.append(tf.summary.scalar(prefix + '_loss_latent', latent_loss))
    
    self.loss = loss

    self.images = images
    self.gen_images = gen_images

    summaries.append(tf.summary.scalar(prefix + '_loss', loss))
    summaries.append(tf.summary.scalar(prefix + '_loss_mse', loss_mse))
    
    summaries.append(tf.summary.image(prefix + '_real', images[-1]))
    summaries.append(tf.summary.image(prefix + '_gen', gen_images[-1]))

    self.lr = tf.placeholder_with_default(FLAGS.learning_rate, ())

    self.train_op = tf.train.AdamOptimizer(self.lr).minimize(loss)
    self.summ_op = tf.summary.merge(summaries)