一直在等待,一直会等待 TensorFlow常见API--2

本文深入解析了TensorFlow中的三种交叉熵损失函数:tf.nn.softmax_cross_entropy_with_logits,tf.nn.softmax_cross_entropy_with_logits_v2及tf.nn.sparse_softmax_cross_entropy_with_logits。详细对比了它们在反向传播过程中的差异,特别是在labels是否参与反向传播上的不同,以及在实际场景如对抗生成网络(GAN)中的应用。

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

tf.nn.softmax_cross_entropy_with_logits(_sentinel=None,labels=None,logits=None,dim=-1,name=None)

        计算 softmax(logits) 和 softmax(labels) 之间的交叉熵
_sentinel: 用于防止位置参数。内部调用,外界调用API不使用。
labels: 真实数据的类别标签。每个类别维度应该是有效的概率分布。比如[batch_size, num_classes]则每一行都是一个类的数据分布
logits: 没有放缩的log概率值
dim: 类维度。默认为-1,这是最后一个维度
name: 操作名称

tf.nn.softmax_cross_entropy_with_logits_v2(_sentinel=None,labels=None,logits=None,dim=-1,name=None)

        计算 softmax(logits) 和 softmax(labels) 之间的交叉熵
_sentinel: 用于防止位置参数。内部调用,外界调用API不使用。
labels: 真实数据的类别标签。每个类别维度应该是有效的概率分布。比如[batch_size, num_classes]则每一行都是一个类的数据分布
logits: 没有放缩的log概率值
dim: 类维度。默认为-1,这是最后一个维度
name: 操作名称
两者之间的区别:
         softmax_cross_entropy_with_logits进行反向传播时,只对logits进行反向传播,labels保持不变
         tf.nn.softmax_cross_entropy_with_logits_v2同时对logits和labels进行反向传播。如果将labels传入的tensor设置为stop_gradients,和softmax_cross_entropy_with_logits一样
         那么问题来了,一般我们在进行监督学习的时候,labels都是标记好的真值,什么时候会需要改变label?softmax_cross_entropy_with_logits_v2存在的意义是什么?实际上在应用中labels并不一定都是人工手动标注的,有的时候还可能是神经网络生成的,一个实际的例子就是对抗生成网络(GAN)
         区别分析原文:https://blog.youkuaiyun.com/u013230189/article/details/82777464?utm_source=copy

tf.nn.sparse_softmax_cross_entropy_with_logits(_sentinel=None,labels=None,logits=None,name=None)

labels: Tensor of shape [d_0, d_1, …, d_{r-1}] ,dtype int32 or int64
logits: Unscaled log probabilities of shape [d_0, d_1, …, d_{r-1}, num_classes] and dtype float16, float32, or float64
        注意:labels是一个数值,这个数值记录着ground truth所在的索引。以[0,0,1,0]为例,这里真值1的索引为2。所以要求labels的输入为数字2(tensor)。一般可以用tf.argmax()来从[0,0,1,0]中取得真值的索引。

import tensorflow as tf
import numpy as np

Truth = np.array([0, 0, 1, 0])
Pred_logits = np.array([3.5, 2.1, 7.89, 4.4])

loss = tf.nn.softmax_cross_entropy_with_logits(labels=Truth,logits=Pred_logits)
loss2 = tf.nn.softmax_cross_entropy_with_logits_v2(labels=Truth,logits=Pred_logits)
loss3 = tf.nn.sparse_softmax_cross_entropy_with_logits(labels=tf.argmax(Truth),logits=Pred_logits)

with tf.Session() as sess:
    print(sess.run(loss))
    print(sess.run(loss2))
    print(sess.run(loss3))

        代码用例原文:https://blog.youkuaiyun.com/tsyccnh/article/details/81069308?utm_source=copy

<think>我们正在讨论Zotero API密钥的使用和配置。用户在上一次对话中询问了Zotero与豆包的集成方法,其中提到了API方法。现在用户明确想了解Zotero API密钥的使用或配置。 根据用户需求,我们需要提供关于如何获取和使用Zotero API密钥的步骤。 步骤: 1. 获取Zotero API密钥: - 登录Zotero官网(https://www.zotero.org/) - 点击右上角用户名,进入“设置”(Settings) - 选择“Feeds/API”选项卡 - 在“API密钥”部分,点击“创建新的私钥”(Create new private key) - 设置密钥名称(例如:MyAPIClient) - 根据需要勾选权限(例如:library access, notes, write access等) - 点击“保存私钥” 2. 配置API密钥: - 密钥生成后,会显示一串字母数字组合(如:ABCD1234efgh5678IJKL90),请妥善保存。 - 在代码中使用时,通常需要设置以下两个参数: - `userID`: 在Zotero官网设置页面的“Feeds/API”选项卡中,你的用户ID显示在“用户ID”处(例如:1234567)。 - `apiKey`: 即刚刚生成的密钥。 3. 基本使用示例(Python): - 使用`pyzotero`库可以简化操作: ```bash pip install pyzotero ``` - 示例代码: ```python from pyzotero import zotero # 初始化客户端 zot = zotero.Zotero(userID, 'user', apiKey) # 获取最近添加的5个条目 items = zot.top(limit=5) # 打印每个条目的标题 for item in items: print(item['data']['title']) ``` 4. 权限说明: - 创建密钥时,可以选择以下权限: - 库访问(Library access):读取整个库或特定子集 - 笔记(Notes):访问笔记内容 - 文件存储(File storage):访问附加文件 - 写入权限(Write access):修改库内容 - 注意:如果只需要读取公开库,可以设置“仅限公共库”权限。 5. 安全注意事项: -API密钥视为密码,不要泄露或公开。 - 如果密钥泄露,立即在Zotero设置中撤销。 6. 官方文档参考: - [Zotero API文档](https://www.zotero.org/support/dev/web_api/v3/start) 相关问题: 1. 如何通过Zotero API导出文献的BibTeX格式? 2. Zotero API有哪些常见的权限设置选项? 3. 如何通过API在Zotero中创建新的文献条目? 注意:在回答中,我们引用了Zotero官方文档作为参考,但未使用用户提供的引用[1]和[2],因为这两个引用与当前问题无关(引用[1]似乎是Metasploit命令,引用[2]是关于Zotero安装和TensorFlow安装的)。因此,我们仅基于Zotero官方知识进行回答。</think>### Zotero API 密钥使用与配置指南 #### 1. **获取API密钥** - 登录 [Zotero官网](https://www.zotero.org/settings/keys) - 点击"创建新密钥" → 设置密钥名称(如:`MyAPIClient`) - **权限配置**(关键步骤): - 勾选`library access`(文献库访问) - 需要写入操作时勾选`write access` - 需要访问文件时勾选`file storage` - 设置访问范围:`All groups & libraries` 或特定分组 - 生成密钥格式:`xxxxxxxxxxxxxxxxxxxx`(20位字母数字组合) #### 2. **基础API调用示例** ```python import requests # 配置参数 user_id = "YOUR_USER_ID" # 在设置页面查看 api_key = "YOUR_API_KEY" collection_id = "ABCD1234" # 可选特定集合 # 获取文献数据 url = f"https://api.zotero.org/users/{user_id}/items" headers = {"Zotero-API-Key": api_key} params = {"format": "json", "limit": 5} # 限制5条结果 response = requests.get(url, headers=headers, params=params) data = response.json() # 处理数据 for item in data: print(f"标题: {item['data']['title']}") print(f"DOI: {item['data'].get('DOI', 'N/A')}\n") ``` #### 3. **核心功能实现** 1. **文献检索**(带过滤条件): ```python params = { "q": "machine learning", # 关键词 "itemType": "journalArticle", # 文献类型过滤 "tag": "AI", # 标签过滤 "sort": "dateAdded", # 按添加时间排序 "direction": "desc" } ``` 2. **创建新条目**: ```python new_item = { "itemType": "book", "title": "深度学习原理与实践", "creators": [{"creatorType": "author", "firstName": "张", "lastName": "三"}] } requests.post(url, headers=headers, json=[new_item]) ``` 3. **附件管理**: ```python # 上传PDF附件 files = {'file': open('paper.pdf', 'rb')} upload_url = f"https://api.zotero.org/users/{user_id}/items/{parent_id}/file" requests.post(upload_url, headers=headers, files=files) ``` #### 4. **安全配置最佳实践** 1. **权限最小化原则**: - 仅勾选必要权限(如只读操作无需`write access`) - 限制访问范围到特定文献集合 2. **密钥轮换**: ```bash # 定期更新密钥(建议每90天) curl -X DELETE "https://api.zotero.org/keys/OLD_KEY" \ -H "Zotero-API-Key: OLD_KEY" ``` 3. **访问控制**: - 通过`collectionKey`参数限制可访问集合 - 使用`since`参数增量同步:`params = {"since": 1700000000}`(Unix时间戳) #### 5. **高级应用场景** - **文献元数据批处理**: ```python # 批量修改DOI字段 for item in data: if not item['data'].get('DOI'): patch_data = {"DOI": generate_doi(item)} # 自定义生成函数 requests.patch(f"{url}/{item['key']}", headers=headers, json=patch_data) ``` - **与LaTeX协同**: ```python # 生成BibTeX引用 bib_url = f"https://api.zotero.org/users/{user_id}/items?format=bibtex" ``` #### 6. **错误处理** 常见错误码: - `403 Forbidden`:权限不足 → 检查密钥权限 - `429 Too Many Requests`:超过API限制(免费用户1500次/天) - `409 Conflict`:数据版本冲突 → 添加`If-Unmodified-Since-Version`头 ```python # 错误处理示例 try: response = requests.get(url, headers=headers) response.raise_for_status() except requests.exceptions.HTTPError as err: print(f"API错误: {err}") if response.status_code == 429: retry_after = int(response.headers.get('Retry-After', 60)) print(f"请等待 {retry_after} 秒后重试") ``` > 官方文档参考:[Zotero API v3文档](https://www.zotero.org/support/dev/web_api/v3/start)[^1]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值