Origin Only IO

本文介绍了C++中模板函数的应用实例,展示了如何通过模板实现不同类型的数据输入输出,并进行了简单的性能优化。
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<cassert>
#include<ctime>
#include<bitset>
#include<queue>
#include<set>
#define inf (1<<30)
#define INF (1ll<<62)
#define prt(x) cout<<#x<<":"<<x<<" "
#define prtn(x) cout<<#x<<":"<<x<<endl
using namespace std;
typedef long long ll;
template<class T>void sc(T &x){
    x=0;char c;int f=1;
    while(c=getchar(),c<48)if(c=='-')f=-1;
    do x=x*10+(c^48);
    while(c=getchar(),c>47);
    x*=f;
}
template<class T>void nt(T x){
    if(!x)return;
    nt(x/10);
    putchar('0'+x%10);
}
template<class T>void pt(T x){
    if(x<0)putchar('-'),x=-x;
    if(!x)putchar('0');
    else nt(x);
}
int main(){
//  freopen("pro.in","r",stdin);
//  freopen("chk.out","w",stdout);

    return 0;
}
### 解决 TensorFlow.js 中因 CORS 策略导致的 'Access to fetch' 被阻止的问题 在使用 TensorFlow.js 时,如果遇到因 CORS(跨域资源共享)策略导致的 `Access to fetch` 被阻止问题,通常是因为浏览器的安全机制阻止了从本地文件系统加载资源。以下是详细分析和解决方案: #### 1. 文件协议 (`file://`) 的限制 当使用 `file://` 协议直接从本地文件系统加载模型文件(如 `model.json`),浏览器会因为安全原因拒绝加载外部资源[^3]。这是因为 `file://` 协议不支持跨域请求,而 TensorFlow.js 在加载模型时需要通过 `fetch` 方法获取远程或本地资源。 #### 2. 使用本地服务器解决 CORS 问题 为了解决这一问题,可以通过以下方法避免 `file://` 协议带来的限制: - **启动本地 HTTP 服务器**:使用工具如 `http-server` 或 `live-server` 启动一个简单的本地服务器,并通过 `http://localhost:8080` 访问页面。 示例命令: ```bash npx http-server . ``` - **确保模型文件路径正确**:将模型文件(如 `model.json` 和相关权重文件)放置在与 HTML 文件相同的目录下,或指定正确的相对路径[^4]。 示例代码: ```javascript const model = await tf.loadLayersModel('http://localhost:8080/model.json'); ``` #### 3. 配置服务器以支持 CORS 如果模型托管在远程服务器上,确保服务器启用了 CORS 支持。可以通过添加以下 HTTP 响应头实现[^5]: ```http Access-Control-Allow-Origin: * ``` #### 4. 使用 Data URL 加载模型 另一种解决方案是将模型文件嵌入到 HTML 文件中,使用 Data URL 格式加载模型。这种方法适用于小型模型,但不推荐用于大型模型[^6]。 示例代码: ```javascript const modelJson = { "format": "layers-model", "generatedBy": "TensorFlow.js Converter v3.9.0", "convertedBy": "TensorFlow.js Converter v3.9.0", "modelTopology": { /* 模型拓扑结构 */ }, "weightsManifest": [ /* 权重清单 */ ] }; const model = await tf.loadLayersModel(tf.io.fromJSON(modelJson)); ``` #### 5. 使用 Blob URL 加载模型 可以将模型文件读取为 Blob 对象,并通过创建 Blob URL 加载模型。这种方法避免了直接从文件系统加载的限制[^7]。 示例代码: ```javascript async function loadModelFromFile(file) { const reader = new FileReader(); return new Promise((resolve, reject) => { reader.onload = async (event) => { try { const modelJson = JSON.parse(event.target.result); const model = await tf.loadLayersModel(tf.io.fromJSON(modelJson)); resolve(model); } catch (error) { reject(error); } }; reader.onerror = (error) => reject(error); reader.readAsText(file); }); } // 使用示例 const fileInput = document.createElement('input'); fileInput.type = 'file'; fileInput.click(); fileInput.onchange = async () => { const model = await loadModelFromFile(fileInput.files[0]); console.log('Model loaded successfully:', model); }; ``` ### 注意事项 - 如果仍然遇到问题,请检查浏览器控制台的日志输出,定位具体的错误信息。 - 在生产环境中,建议将模型文件托管在支持 CORS 的服务器上,并通过 HTTPS 加载资源。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值