Tensorflow——Fetch和Feed操作

本文介绍了TensorFlow中的Fetch和Feed操作。Fetch操作允许在 sess.run() 中同时运行多个操作并获取多个输出结果。而Feed操作则通过占位符在运行时传递操作的参数值,通常在定义会话后使用feed_dict来指定参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、Fetch操作

Tensorflow中的Fetch操作是指:定义会话,调用op实现相应功能时,Fetch操作可以sess.run()多个op(同时run多个op),将多个op组成数组(或者说列表),传入run中可以得到多个op的输出结果。

实例展示

  • 定义一些常量和op
import tensorflow as tf
#Fetch的作用:会话里执行多个op,得到它运行后的结果
input1 = tf.constant(3.0)
input2 = tf.constant(2.0)
input3 = tf.constant(5.0)
add = tf.add(input2,input3)
mul = tf.multiply(input1, add)
  • 实现Fetch操作
with tf.Session() as sess:
    #会话中执行多个op,这里的op是mul和add
    result = sess.run([mul,add])
    print(result)
  • 结果

 

二、Feed操作(以后会经常用到)

Feed的字面意思是喂,流入。在tensorflow中,先声明一个或者几个t

### 使用 TensorFlow Java 实现人脸识别 #### 安装与配置环境 为了使用 TensorFlow Java 开发人脸识别应用,需先完成必要的软件安装配置工作。确保已正确设置好开发环境,包括但不限于 JDK 的安装以及 Maven 或 Gradle 等构建工具的准备[^1]。 #### 配置依赖项 在 `pom.xml` 文件中加入如下依赖来引入 TensorFlow 库: ```xml <dependency> <groupId>org.tensorflow</groupId> <artifactId>tensorflow</artifactId> <version>2.9.0</version> </dependency> ``` #### 加载预训练模型并初始化会话 下面是一个简单的例子,展示了如何加载预先训练好的 FaceNet 模型来进行人脸特征向量提取: ```java import org.tensorflow.Graph; import org.tensorflow.Session; import org.tensorflow.Tensor; public class FaceRecognition { private static final String MODEL_PATH = "file:///path/to/frozen_facenet.pb"; public Tensor<?> loadModel() throws Exception { try (Graph graph = new Graph()) { byte[] graphDef = Files.readAllBytes(Paths.get(MODEL_PATH)); graph.importGraphDef(graphDef); Session session = new Session(graph); return session.runner() .feed("input", Tensor.create(imageData)) .fetch("embeddings") .run().get(0); // 获取嵌入层输出作为面部特征表示 } } } ``` 此段代码读取了一个冻结后的 FaceNet 模型文件,并创建一个新的计算图实例用于执行推理操作。接着定义输入节点名称 `"input"` 及输出节点名称 `"embeddings"` 来指定要运行的操作路径[^4]。 #### 处理图像数据 对于每一幅待识别人像图片,在调用上述函数之前应当将其转换成适合喂给神经网络的形式——即标准化尺寸、调整通道顺序等预处理步骤之后再传入到 `loadModel()` 方法中的 `imageData` 参数里去。 #### 特征比较逻辑 当获取到了两张或多张面孔对应的特征向量后,则可以采用欧氏距离度量方式判断它们之间的相似程度;如果两者间差距小于设定阈值则认为是同一个人物对象。 ```java double distance = EuclideanDistance(embeddingVectorA, embeddingVectorB); if(distance < THRESHOLD){ System.out.println("Matched!"); } else{ System.out.println("Not Matched."); } private double EuclideanDistance(float[] vecA, float[] vecB) { double sumSquareDiff = 0d; for(int i=0; i<vecA.length && i<vecB.length ;i++){ sumSquareDiff += Math.pow((vecA[i]-vecB[i]), 2); } return Math.sqrt(sumSquareDiff); } ``` 这段代码实现了两个浮点数数组间的欧式距离计算功能,可用于评估两个人脸特征向量之间差异大小从而决定是否匹配成功[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值