Примечания к изучению TensorFlow Java API

Google TensorFlow глубокое обучение Java
Примечания к изучению TensorFlow Java API

Я написал предыдущую статью о построении Java-среды TensorFlow.Построение окружения под TensorFlow Java+eclipse, взгляните на простое объяснение и работу TensorFlow Java API сегодня.

Что такое ТензорФлоу

Открытый исходный код Google, это библиотека глубокого обучения, Это набор программной библиотеки (software library) и прикладного интерфейса (API), который использует графику потока данных (data flow graphics) для вычисления данных, и на основе этого плюс другие функциональные библиотеки и средства разработки становятся набором машинного обучения, Особенно фреймворк для разработки приложений для глубокого обучения (deep learning). --------------- Директор департамента развития технологий Google по Большому Китаю Билл Луан (Bill Luan)

Он поддерживает алгоритмы CNN, RNN и LSTM и в настоящее время является самой популярной моделью глубокой нейронной сети в области изображений, НЛП (нейролингвистика).

Преимущества ТензорФлоу

Основанный на Python, он быстрый и читабельный.

Работает более плавно в системах с несколькими графическими процессорами.

Эффективность компиляции кода высокая.

Сообщество растет очень быстро и активно.

Возможность создания визуализаций, показывающих топологию и производительность сети

Как работает TensorFlow

TensorFlow использует графы потоков данных для выполнения числовых вычислений.

Edge: используется для передачи между узлами многомерных массивов, а именно тензоров (tensor)

Узел: представляет оператор математической операции, представленный операцией, называемой op

TensorFlow Java API

public class HelloTF {
	public static void main(String[] args) throws Exception {
		try (Graph g = new Graph(); Session s = new Session(g)) {
			// 使用占位符构造一个图,添加两个浮点型的张量
			Output x = g.opBuilder("Placeholder", "x").setAttr("dtype", DataType.FLOAT).build().output(0);//创建一个OP
			Output y = g.opBuilder("Placeholder", "y").setAttr("dtype", DataType.FLOAT).build().output(0);
			Output z = g.opBuilder("Add", "z").addInput(x).addInput(y).build().output(0);
			System.out.println( " z= " + z);
			// 多次执行,每次使用不同的x和y值
			float[] X = new float[] { 1, 2, 3 };
			float[] Y = new float[] { 4, 5, 6 };
			for (int i = 0; i < X.length; i++) {
				try (Tensor tx = Tensor.create(X[i]);
						Tensor ty = Tensor.create(Y[i]);
						Tensor tz = s.runner().feed("x", tx).feed("y", ty).fetch("z").run().get(0)) {
					System.out.println(X[i] + " + " + Y[i] + " = " + tz.floatValue());
				}
			}
		}
     
		Graph graph = new Graph();       
		Tensor tensor = Tensor.create(2);
		Tensor tensor2 = tensor.create(3);
		Output output = graph.opBuilder("Const", "mx").setAttr("dtype", tensor.dataType()).setAttr("value", tensor).build().output(0);
		Output output2 = graph.opBuilder("Const", "my").setAttr("dtype", tensor2.dataType()).setAttr("value", tensor2).build().output(0);
		Output output3 =graph.opBuilder("Sub", "mz").addInput(output).addInput(output2).build().output(0);
		Session session = new Session(graph);	
		Tensor ttt=  session.runner().fetch("mz").run().get(0);
		System.out.println(ttt.intValue());
		Tensor t= session.runner().feed("mx", tensor).feed("my", tensor2).fetch("mz").run().get(0);
		System.out.println(t.intValue());
		session.close();
		tensor.close();
		tensor2.close();
		graph.close();
	}
}
 z= <Add 'z:0' shape=<unknown> dtype=FLOAT>
1.0 + 4.0 = 5.0
2.0 + 5.0 = 7.0
3.0 + 6.0 = 9.0
-1
-1