Я написал предыдущую статью о построении 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