gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 18:51:36 25 4
gpt4 key购买 nike

我正在尝试获取DCGAN (深度卷积生成对抗网络)与 tensorflow for Java 一起使用.

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

//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()
#
//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 代码加载的图表

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 以在 Java 的 tensorflow 中使用的特定部分。在处理图像的 DCGAN 的 model.py 中,有以下代码。

          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]

它在saved_utils.py中调用get_iamge,如下

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 的方法,如下所示

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 中的 Java 文件中使用。

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

感谢您的帮助,并感谢您花时间阅读这篇长文。

最佳答案

imreadget_image 的基本作用是1)读取图像2)将其从BGR转换为RGB3)将其转换为 float 4)重新缩放图像

您可以在 Java 中使用成像库(例如 JMagick 或 AWT)或使用 TensorFlow 来执行此操作。

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

  • tf.image.decode* 可以读取图像的内容(您知道图像的类型,但可以选择正确的操作)。
  • tf.reverse 可以反转 channel 维度中的值(RGB 到 BGR)
  • tf.dtypes.cast 可以将图像转换为 float
  • tf.image.resizeBilinear 可以重新缩放图像

关于java - 需要帮助将 DCGAN 转换为 Java for Tensorflow for Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59728029/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com