首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要帮助将DCGAN转换为Java for Tensorflow for Java

需要帮助将DCGAN转换为Java for Tensorflow for Java
EN

Stack Overflow用户
提问于 2020-01-14 05:37:09
回答 1查看 89关注 0票数 0

我试图让DCGAN(深层卷积生成对抗性网络)与tensorflow for Java一起工作。

我将必要的代码添加到DCGAN的model.py中,如下所示,以输出一个图,供以后在tensorflow for Java中使用。

代码语言:javascript
复制
//at the beginning to define where the model will be saved
    #
    self.load_dir = load_dir
    self.models_dir = models_dir

    graph = tf.Graph()
    self.graph = graph

    self.graph.as_default()
    #
代码语言:javascript
复制
//near the end where the session is ran in order to build and save the model to be used in tensorflow for java. A model is saved every 200 samples as defined by DCGAN’s default settings.
    #
    steps = "training_steps-" + "{:08d}".format(step)
    set_models_dir = os.path.join(self.models_dir, steps)
    builder = tf.saved_model.builder.SavedModelBuilder(set_models_dir)
    self.builder = builder
    self.builder.add_meta_graph_and_variables(self.sess, [tf.saved_model.tag_constants.SERVING])
    self.builder.save()
    #

上面的代码输出由以下Java代码加载的图形

代码语言:javascript
复制
package Main;

import java.awt.image.BufferedImage;
import java.io.File;
import java.util.Random;

import javax.imageio.ImageIO;

import org.tensorflow.Tensor;

public class DCGAN {
    public static void main(String[] args) throws Exception {
        String model_dir = "E:\\AgentWeb\\mnist-steps\\training_steps-00050000";
        //SavedModelBundle model = SavedModelBundle.load(model_dir , "serve");
        //Session sess = model.session();

        Random rand = new Random();
        int sample_num = 64;
        int z_dim = 100;
        float [][] gen_random = new float [64][100];
        for(int i = 0 ; i < sample_num ; i++) {
            for(int j = 0 ; j < z_dim ; j++) {
                gen_random[i][j] = (float)rand.nextGaussian();
            }
        }
        Tensor <Float> sample_z = Tensor.<Float>create(gen_random, Float.class);


        Tensor <Float> sample_inputs = Tensor.<Float>create(placeholder, Float.class);
// placeholder is the tensor which I want to create after solving the problem below.

        //Tensor result = sess.runner().fetch("t_vars").feed("z", sample_z).feed("inputs", sample_inputs).run().get(3);
    }
}

(我在调试时留下了一些注释)

使用这种方法,我不得不将python代码翻译成Java,以便在tensorflow for Java中使用。在DCGAN的model.py中,图像被处理,有以下代码。

代码语言:javascript
复制
          get_image(sample_file,
                    input_height=self.input_height,
                    input_width=self.input_width,
                    resize_height=self.output_height,
                    resize_width=self.output_width,
                    crop=self.crop,
                    grayscale=self.grayscale) for sample_file in sample_files]

在get_iamge中调用saved_utils.py,如下所示

代码语言:javascript
复制
def get_image(image_path, input_height, input_width,
              resize_height=64, resize_width=64,
              crop=True, grayscale=False):
  image = imread(image_path, grayscale)
  return transform(image, input_height, input_width,
                   resize_height, resize_width, crop)

然后调用一个名为imread的方法,如下所示

代码语言:javascript
复制
def imread(path, grayscale = False):
  if (grayscale):
    return scipy.misc.imread(path, flatten = True).astype(np.float)
  else:
    # Reference: https://github.com/carpedm20/DCGAN-tensorflow/issues/162#issuecomment-315519747
    img_bgr = cv2.imread(path)
    # Reference: https://stackoverflow.com/a/15074748/
    img_rgb = img_bgr[..., ::-1]
    return img_rgb.astype(np.float)

我的问题是,我不确定img_rgb = img_bgr[..., ::-1]部件做什么,以及如何翻译它,以便在tensorflow.java中的tensorflow.java文件中使用。

我熟悉python切片数组的方式,但我不熟悉在其中使用的三个点。我确实在那里读到了对stackoverflow问题的引用,它提到了它类似于img[:, :, ::-1]。但我不太清楚它到底在做什么。

任何帮助都是非常感谢的,并感谢您花时间阅读这篇长篇文章。

EN

回答 1

Stack Overflow用户

发布于 2020-01-16 18:50:25

imreadget_image基本上是: 1)读取图像2)将其从BGR转换为RGB 3)将其转换为浮动图像

您可以通过使用成像库(如JMagick或AWT )或使用TensorFlow来实现这一点。

如果使用TensorFlow,则可以在急切模式下或通过构建和运行一个小图来运行此预处理。例如,给定tf一个org.tensorflow.op.Ops实例

  • tf.image.decode*可以读取图像的内容(您知道要知道图像的类型,但是要选择正确的操作)。
  • tf.reverse可以反转通道维度中的值(RGB到BGR)
  • tf.dtypes.cast可以将图像转换为浮动
  • tf.image.resizeBilinear可以重绘你的图像
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59728029

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档