From 5d771782b736836f4f3794b9bb190018739c0aec Mon Sep 17 00:00:00 2001 From: PeterJaq Date: Mon, 17 Jun 2019 17:21:31 +0800 Subject: [PATCH 01/34] Create save_load.md --- site/zh-cn/js/guide/save_load.md | 202 +++++++++++++++++++++++++++++++ 1 file changed, 202 insertions(+) create mode 100644 site/zh-cn/js/guide/save_load.md diff --git a/site/zh-cn/js/guide/save_load.md b/site/zh-cn/js/guide/save_load.md new file mode 100644 index 00000000000..18334247866 --- /dev/null +++ b/site/zh-cn/js/guide/save_load.md @@ -0,0 +1,202 @@ +# 保存并加载 tf.Model + +TensorFlow.js提供了保存和加载使用[`Layers`](https://js.tensorflow.org/api/0.14.2/#Models)API创建或从现有TensorFlow模型转换的模型的功能。这些可能是您自己训练过的模型,也可能是别人训练过的模型。使用Layers API的一个主要好处是使用它创建的模型是可序列化的,这就是我们将在本教程中探讨的内容。 + +本教程将会介绍如何在 TensorFlow.js 中保存和加载模型。我们同样可以导入Tensorflow Python模型。 + +以下两个教程介绍了加载这些模型: + +- [导入Keras模型](../tutorials/conversion/import_keras.md) +- [导入Graphdef模型](../tutorials/conversion/import_saved_model.md) + + +## 保存 tf.Model + +[`tf.Model`](https://js.tensorflow.org/api/0.14.2/#class:Model) 和 [`tf.Sequential`](https://js.tensorflow.org/api/0.14.2/#class:Model) +同时提供了函数 [`model.save`](https://js.tensorflow.org/api/0.14.2/#tf.Model.save) 允许你保存一个模型的 +_topology_ 和 _weights_ . + +- Topology: 这是一个描述模型结构的文件(例如 它使用的了哪些operations)。它包含对存储在外部的模型权重的引用。 + +- Weights: 这些是以有效格式存储给定模型权重的二进制文件。它们通常存储在与topology相同的文件夹中。 + +让我们看看保存模型的代码是什么样子的 + +```js +const saveResult = await model.save('localstorage://my-model-1'); +``` + +一些需要注意的地方: + +- `save` 方法采用以 scheme 字符串开头的类 URL 字符串参数(下文简称 scheme)。 在本例中我们使用 localstorage:// scheme 将模型保存到本地存储。 +- `scheme`后是`path`。 在保存到本地存储的情况下,路径只是一个保存的模型的唯一标识的任意字符串。 例如,当您从本地存储加载模型时将会使用它。 +- `save` 方法是异步的。 +- `model.save` 的返回值是一个 JSON 对象,它包含一些可能有用的信息,例如模型的拓扑结构和权重的大小。 +- 用于保存模型的环境不会影响哪些环境可以加载模型。在node.js中保存模型不会阻止在浏览器中加载模型。 + + +下面我们将介绍以下不同方案。 + +### 本地存储 (仅限浏览器) + +**Scheme:** `localstorage://` + +```js +await model.save('localstorage://my-model'); +``` +这将会将一个命名为`my-model`模型保存到浏览器的[本地存储](https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage)。这将在刷新之间持续, 但是,如果空间成为问题,本地存储可以由用户或浏览器本身清除。每个浏览器还为给定域在本地存储中存储的数据量设置了自己的限制。 + +### IndexedDB (仅限浏览器) + +**Scheme:** `indexeddb://` + +```js +await model.save('indexeddb://my-model'); +``` + +这将模型保存到浏览器的[IndexedDB](https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API) 。 + 像本地存储一样,它在刷新之间保持不变,而且对存储对象的大小也有较大的限制。 + +### 文件下载 (仅限浏览器) + +**Scheme:** `downloads://` + +```js +await model.save('downloads://my-model'); +``` +这会让浏览器下载模型文件至用户的机器上,并生成两个文件: + 1. 一个名为 `[my-model].json` 的 JSON 文件,它在 modeloTopology 字段中包含模型的拓扑,在 weightsManifest 字段中包含权重清单。 + 2. 一个二进制文件,其中包含名为 `[my-model].weights.bin` 的权重值。 + +你可以更换`[my-model]`的名称以获得一个不同的文件名。 + +由于`.json`使用相对路径指向 `.bin`。所以两个文件需要被安放在同一个文件夹中。 + +> 注意: 某些浏览器要求用户在同时下载多个文件之前授予权限。 + + + +### HTTP(S) Request + +**Scheme:** `http://` or `https://` + +```js +await model.save('http://model-server.domain/upload') +``` + +这里将会创建一个web请求以保存一个模型在远程服务器上。您应该控制该远程服务器,以便确保它能够处理请求。 +则模型的拓扑和权重将通过[POST](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/POST) 请求发送到指定的 HTTP 服务器。 +POST 请求的 body 具有称为`multipart/form-data`的格式。 + + 1. 一个名为 `model.json` 的 JSON 文件,其中包含拓扑结构和对下面描述的权重文件的引用。 +2. 一个二进制文件,其中包含名为`model.weights.bin`. 的权重值。 + +这个 [api 文档](https://js.tensorflow.org/api/latest/#tf.io.browserHTTPRequest)包含一块 Python 代码片段,演示了如何使用加入了 Keras 和 TensorFlow 的 [flask](http://flask.pocoo.org/) Web 框架来处理来自 save 的请求,并重建 request 的 payload 作为服务器内存中的 Keras Model 对象。 + +通常,您的 HTTP 服务器对请求有特殊约束和要求,例如 HTTP 中的 methods(方法)、headers(头部)和 credentials for authentication(身份验证凭据)。 您可以通过替换 `tf.io.browserHTTPRequest` 调用的 URL 字符串参数来获得 save 函数在上述方面更细粒度的控制。 它是一个更详细的 API ,但它在控制由 save 发起的 HTTP 请求方面提供了更大的灵活性。 + +例如: + +```js +await model.save(tf.io.browserHTTPRequest( + 'http://model-server.domain/upload', + {method: 'PUT', headers: {'header_key_1': 'header_value_1'}})); +``` + + +### 本机文件系统 (仅限于Node.js) + +**Scheme:** `file://` + +```js +await model.save('file:///path/to/my-model'); +``` + +当运行Node.js后我们当然可以直接访问文件系统并且保存模型。这个命令将会保存两个文件在`scheme`之后指定的`path`中。 + + 1. 一个名为 `model.json` 的 JSON 文件,其中包含拓扑结构和对下面描述的权重文件的引用。 +1. 一个二进制文件,其中包含名为`model.weights.bin`. 的权重值。 + +请注意,这两个文件的名称将始终与上面指定的完全相同(该名称内置于函数中)。 + + +## 加载 tf.Model + +给定一个使用上述方法之一保存的模型,我们可以使用 `tf.loadLayersModel`api加载它。 + +让我们看一下加载模型的代码是什么样子的 + +```js +const model = await tf.loadLayersModel('localstorage://my-model-1'); +``` + +一些事情值得注意: +- 类似于`model.save()`, `loadLayersModel`函数使用以 **scheme**开头的类似URL的字符串参数。它描述了我们试图从中加载模型的目标类型。 +- scheme 由**path**指定。在上述例子中路径为`my-model-1`。 +- URL字符串可以被替换为一个符合IOHandler接口的对象。 +- `tf.loadLayersModel()`函数是异步的。 +- `tf.loadLayersModel`返回的值是 `tf.Model` + +下面我们将介绍可用的不同方案。 + + +### Local Storage (Browser only) + +**Scheme:** `localstorage://` + +```js +const model = await tf.loadLayersModel('localstorage://my-model'); +``` + +这将从浏览器的[本地存储](https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage). +加载一个名为`my-model`模型。 + +### IndexedDB (Browser only) + +**Scheme:** `indexeddb://` + +```js +const model = await tf.loadLayersModel('indexeddb://my-model'); +``` +这将从浏览器的[IndexedDB](https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API). +加载一个模型。 + + +### HTTP(S) + +**Scheme:** `http://` or `https://` + +```js +const model = await tf.loadLayersModel('http://model-server.domain/download/model.json'); +``` +这将从HTTP端点加载模型。加载`json` 文件后,函数将请求对应的`json` 文件引用的`.bin`文件。 + +> 注意:这个工具依赖于[`fetch`](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch)方法。如果你的环境没有提供原生的fetch方法,你可以提供全局方法名称[`fetch`](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch)从而满足接口要求或是使用类似于(`node-fetch`)[https://www.npmjs.com/package/node-fetch]的库。 + + +### 本机文件系统 (仅限于Node.js) + +**Scheme:** `file://` + +```js +const model = await tf.loadLayersModel('file://path/to/my-model/model.json'); +``` + +当运行在Node.js上时,我们可以直接访问文件系统并且从那里加载模型。注意,在上面的函数调用中,我们引用model.json文件本身(而在保存时,我们指定一个文件夹)。相应的`.bin`文件需要和`json` 文件在同一个文件夹中。 + +## 使用 IOHandlers 加载模型 + +如果上述方案没有满足你的需求,您可以使用`IOHandler`执行客制化加载行为。Tensorflow.js的`IOHandler`提供了[`tf.io.browserFiles`](https://js.tensorflow.org/api/latest/#io.browserFiles) ,运行浏览器用户在浏览器中上传文件。您可以在 [文档](https://js.tensorflow.org/api/latest/#io.browserFiles)中查看更多信息。 + +# 保存和加载模型使用客制化IOHandlers + +如果上述方案没有满足你的保存和加载模型的需求,你可以通过执行`IOHandler`以执行客制化序列行为。 + +`IOHandler`是一个含有`save` 和 `load`方法的对象。 + +`save`函数接受一个与[ModelArtifacts](https://github.com/tensorflow/tfjs-core/blob/master/src/io/types.ts#L165)接口匹配的参数并且会返回一个解析为[SaveResult](https://github.com/tensorflow/tfjs-core/blob/master/src/io/types.ts#L107)的对象。 + +`load`函数没有接受参数而回返回一个解析为[ModelArtifacts](https://github.com/tensorflow/tfjs-core/blob/master/src/io/types.ts#L165)的对象。这和传递给`save`的相同对象。 + + +查看[BrowserHTTPRequest](https://github.com/tensorflow/tfjs-core/blob/master/src/io/browser_http.ts)获取如何执行IOHandler的例子。 \ No newline at end of file From 0bf501f11bc6ff6b9be0f925bc19d2ff24ede345 Mon Sep 17 00:00:00 2001 From: Jiang anqing Date: Mon, 1 Jul 2019 16:13:50 +0800 Subject: [PATCH 02/34] Update site/zh-cn/js/guide/save_load.md Co-Authored-By: kjlintong <40327910+kjlintong@users.noreply.github.com> --- site/zh-cn/js/guide/save_load.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/site/zh-cn/js/guide/save_load.md b/site/zh-cn/js/guide/save_load.md index 18334247866..5d5af2ba5ab 100644 --- a/site/zh-cn/js/guide/save_load.md +++ b/site/zh-cn/js/guide/save_load.md @@ -2,7 +2,7 @@ TensorFlow.js提供了保存和加载使用[`Layers`](https://js.tensorflow.org/api/0.14.2/#Models)API创建或从现有TensorFlow模型转换的模型的功能。这些可能是您自己训练过的模型,也可能是别人训练过的模型。使用Layers API的一个主要好处是使用它创建的模型是可序列化的,这就是我们将在本教程中探讨的内容。 -本教程将会介绍如何在 TensorFlow.js 中保存和加载模型。我们同样可以导入Tensorflow Python模型。 +本教程将会介绍如何在 TensorFlow.js 中保存和加载模型(可通过JSON文件识别)。我们同样可以导入Tensorflow Python模型。 以下两个教程介绍了加载这些模型: @@ -199,4 +199,4 @@ const model = await tf.loadLayersModel('file://path/to/my-model/model.json'); `load`函数没有接受参数而回返回一个解析为[ModelArtifacts](https://github.com/tensorflow/tfjs-core/blob/master/src/io/types.ts#L165)的对象。这和传递给`save`的相同对象。 -查看[BrowserHTTPRequest](https://github.com/tensorflow/tfjs-core/blob/master/src/io/browser_http.ts)获取如何执行IOHandler的例子。 \ No newline at end of file +查看[BrowserHTTPRequest](https://github.com/tensorflow/tfjs-core/blob/master/src/io/browser_http.ts)获取如何执行IOHandler的例子。 From d624cffa1e9732facc8fc13ba135e6117555ca70 Mon Sep 17 00:00:00 2001 From: Jiang anqing Date: Mon, 1 Jul 2019 16:13:58 +0800 Subject: [PATCH 03/34] Update site/zh-cn/js/guide/save_load.md Co-Authored-By: kjlintong <40327910+kjlintong@users.noreply.github.com> --- site/zh-cn/js/guide/save_load.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/site/zh-cn/js/guide/save_load.md b/site/zh-cn/js/guide/save_load.md index 5d5af2ba5ab..fe6ac7e2f10 100644 --- a/site/zh-cn/js/guide/save_load.md +++ b/site/zh-cn/js/guide/save_load.md @@ -44,7 +44,7 @@ const saveResult = await model.save('localstorage://my-model-1'); ```js await model.save('localstorage://my-model'); ``` -这将会将一个命名为`my-model`模型保存到浏览器的[本地存储](https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage)。这将在刷新之间持续, 但是,如果空间成为问题,本地存储可以由用户或浏览器本身清除。每个浏览器还为给定域在本地存储中存储的数据量设置了自己的限制。 +这将会将一个命名为`my-model`模型保存到浏览器的[本地存储](https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage)。这将持续刷新本地存储, 但是,如果空间成为问题,本地存储可以由用户或浏览器本身清除。每个浏览器还为给定域在本地存储中存储的数据量设置了自己的限制。 ### IndexedDB (仅限浏览器) From 2dcc38c10fc44a53f4e33932702a8a241087ceab Mon Sep 17 00:00:00 2001 From: Jiang anqing Date: Mon, 1 Jul 2019 16:14:08 +0800 Subject: [PATCH 04/34] Update site/zh-cn/js/guide/save_load.md Co-Authored-By: kjlintong <40327910+kjlintong@users.noreply.github.com> --- site/zh-cn/js/guide/save_load.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/site/zh-cn/js/guide/save_load.md b/site/zh-cn/js/guide/save_load.md index fe6ac7e2f10..bcca2580a4d 100644 --- a/site/zh-cn/js/guide/save_load.md +++ b/site/zh-cn/js/guide/save_load.md @@ -1,6 +1,6 @@ # 保存并加载 tf.Model -TensorFlow.js提供了保存和加载使用[`Layers`](https://js.tensorflow.org/api/0.14.2/#Models)API创建或从现有TensorFlow模型转换的模型的功能。这些可能是您自己训练过的模型,也可能是别人训练过的模型。使用Layers API的一个主要好处是使用它创建的模型是可序列化的,这就是我们将在本教程中探讨的内容。 +TensorFlow.js提供了保存和加载模型的功能,这些模型可以是使用[`Layers`](https://js.tensorflow.org/api/0.14.2/#Models)API创建的或从现有TensorFlow模型转换来的。可能是您自己训练过的模型,也可能是别人训练的模型。使用Layers API的一个主要好处是使用它创建的模型是可序列化的,这就是我们将在本教程中探讨的内容。 本教程将会介绍如何在 TensorFlow.js 中保存和加载模型(可通过JSON文件识别)。我们同样可以导入Tensorflow Python模型。 From 2c2e4269bf723e85a1e02249445eb314d036527d Mon Sep 17 00:00:00 2001 From: Jiang anqing Date: Mon, 1 Jul 2019 16:14:15 +0800 Subject: [PATCH 05/34] Update site/zh-cn/js/guide/save_load.md Co-Authored-By: kjlintong <40327910+kjlintong@users.noreply.github.com> --- site/zh-cn/js/guide/save_load.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/site/zh-cn/js/guide/save_load.md b/site/zh-cn/js/guide/save_load.md index bcca2580a4d..bbb9982dd22 100644 --- a/site/zh-cn/js/guide/save_load.md +++ b/site/zh-cn/js/guide/save_load.md @@ -29,7 +29,7 @@ const saveResult = await model.save('localstorage://my-model-1'); 一些需要注意的地方: - `save` 方法采用以 scheme 字符串开头的类 URL 字符串参数(下文简称 scheme)。 在本例中我们使用 localstorage:// scheme 将模型保存到本地存储。 -- `scheme`后是`path`。 在保存到本地存储的情况下,路径只是一个保存的模型的唯一标识的任意字符串。 例如,当您从本地存储加载模型时将会使用它。 +- `scheme`后是`path`。 在上面的例子中,'path' 是 'my-model-1' - `save` 方法是异步的。 - `model.save` 的返回值是一个 JSON 对象,它包含一些可能有用的信息,例如模型的拓扑结构和权重的大小。 - 用于保存模型的环境不会影响哪些环境可以加载模型。在node.js中保存模型不会阻止在浏览器中加载模型。 From 4919530aa0e18016b2a9300d8d7acc7b7b423f02 Mon Sep 17 00:00:00 2001 From: Jiang anqing Date: Mon, 1 Jul 2019 16:14:27 +0800 Subject: [PATCH 06/34] Update site/zh-cn/js/guide/save_load.md Co-Authored-By: kjlintong <40327910+kjlintong@users.noreply.github.com> --- site/zh-cn/js/guide/save_load.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/site/zh-cn/js/guide/save_load.md b/site/zh-cn/js/guide/save_load.md index bbb9982dd22..b25ced66dab 100644 --- a/site/zh-cn/js/guide/save_load.md +++ b/site/zh-cn/js/guide/save_load.md @@ -68,7 +68,7 @@ await model.save('downloads://my-model'); 1. 一个名为 `[my-model].json` 的 JSON 文件,它在 modeloTopology 字段中包含模型的拓扑,在 weightsManifest 字段中包含权重清单。 2. 一个二进制文件,其中包含名为 `[my-model].weights.bin` 的权重值。 -你可以更换`[my-model]`的名称以获得一个不同的文件名。 +你可以更换`[my-model]`的名称以获得一个不同的名称的文件。 由于`.json`使用相对路径指向 `.bin`。所以两个文件需要被安放在同一个文件夹中。 From 7876919f9807197aa5adee6011d5798787bb09a9 Mon Sep 17 00:00:00 2001 From: Jiang anqing Date: Mon, 1 Jul 2019 16:14:36 +0800 Subject: [PATCH 07/34] Update site/zh-cn/js/guide/save_load.md Co-Authored-By: kjlintong <40327910+kjlintong@users.noreply.github.com> --- site/zh-cn/js/guide/save_load.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/site/zh-cn/js/guide/save_load.md b/site/zh-cn/js/guide/save_load.md index b25ced66dab..a5ba34f4595 100644 --- a/site/zh-cn/js/guide/save_load.md +++ b/site/zh-cn/js/guide/save_load.md @@ -28,7 +28,7 @@ const saveResult = await model.save('localstorage://my-model-1'); 一些需要注意的地方: -- `save` 方法采用以 scheme 字符串开头的类 URL 字符串参数(下文简称 scheme)。 在本例中我们使用 localstorage:// scheme 将模型保存到本地存储。 +- `save` 方法采用以 scheme 字符串开头的类 URL 字符串参数(下文简称 scheme)。它描述了我们想保存模型的地址的类型。 在本例中我们使用 localstorage:// scheme 将模型保存到本地存储。 - `scheme`后是`path`。 在上面的例子中,'path' 是 'my-model-1' - `save` 方法是异步的。 - `model.save` 的返回值是一个 JSON 对象,它包含一些可能有用的信息,例如模型的拓扑结构和权重的大小。 From adc051390705598157134a837a6ba47919120b5a Mon Sep 17 00:00:00 2001 From: Jiang anqing Date: Mon, 1 Jul 2019 16:14:43 +0800 Subject: [PATCH 08/34] Update site/zh-cn/js/guide/save_load.md Co-Authored-By: kjlintong <40327910+kjlintong@users.noreply.github.com> --- site/zh-cn/js/guide/save_load.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/site/zh-cn/js/guide/save_load.md b/site/zh-cn/js/guide/save_load.md index a5ba34f4595..8f0d1657f0d 100644 --- a/site/zh-cn/js/guide/save_load.md +++ b/site/zh-cn/js/guide/save_load.md @@ -140,7 +140,7 @@ const model = await tf.loadLayersModel('localstorage://my-model-1'); 下面我们将介绍可用的不同方案。 -### Local Storage (Browser only) +### 本地存储 (仅限浏览器) **Scheme:** `localstorage://` From bfe2fd2755d684e98786054f6302aee33d7cb623 Mon Sep 17 00:00:00 2001 From: Jiang anqing Date: Mon, 1 Jul 2019 16:14:51 +0800 Subject: [PATCH 09/34] Update site/zh-cn/js/guide/save_load.md Co-Authored-By: kjlintong <40327910+kjlintong@users.noreply.github.com> --- site/zh-cn/js/guide/save_load.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/site/zh-cn/js/guide/save_load.md b/site/zh-cn/js/guide/save_load.md index 8f0d1657f0d..c1b5f873def 100644 --- a/site/zh-cn/js/guide/save_load.md +++ b/site/zh-cn/js/guide/save_load.md @@ -151,7 +151,7 @@ const model = await tf.loadLayersModel('localstorage://my-model'); 这将从浏览器的[本地存储](https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage). 加载一个名为`my-model`模型。 -### IndexedDB (Browser only) +### IndexedDB (仅限浏览器) **Scheme:** `indexeddb://` From aff8e3ead26d5ff2c5384d04a9238e71ebe72a4f Mon Sep 17 00:00:00 2001 From: Jiang anqing Date: Mon, 1 Jul 2019 16:14:58 +0800 Subject: [PATCH 10/34] Update site/zh-cn/js/guide/save_load.md Co-Authored-By: kjlintong <40327910+kjlintong@users.noreply.github.com> --- site/zh-cn/js/guide/save_load.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/site/zh-cn/js/guide/save_load.md b/site/zh-cn/js/guide/save_load.md index c1b5f873def..064778c83cf 100644 --- a/site/zh-cn/js/guide/save_load.md +++ b/site/zh-cn/js/guide/save_load.md @@ -93,7 +93,7 @@ POST 请求的 body 具有称为`multipart/form-data`的格式。 这个 [api 文档](https://js.tensorflow.org/api/latest/#tf.io.browserHTTPRequest)包含一块 Python 代码片段,演示了如何使用加入了 Keras 和 TensorFlow 的 [flask](http://flask.pocoo.org/) Web 框架来处理来自 save 的请求,并重建 request 的 payload 作为服务器内存中的 Keras Model 对象。 -通常,您的 HTTP 服务器对请求有特殊约束和要求,例如 HTTP 中的 methods(方法)、headers(头部)和 credentials for authentication(身份验证凭据)。 您可以通过替换 `tf.io.browserHTTPRequest` 调用的 URL 字符串参数来获得 save 函数在上述方面更细粒度的控制。 它是一个更详细的 API ,但它在控制由 save 发起的 HTTP 请求方面提供了更大的灵活性。 +通常,您必须向HTTP服务器传递更多参数或请求标头(例如,用于身份验证,或者如果要指定应保存模型的文件夹)。您可以通过替换URL字符串参数tf.io.browserHTTPRequest来获得对来自 save 函数的请求的这些方面的细粒度控制。此API在控制HTTP请求方面提供了更大的灵活性。 例如: From bb0c82b4da29f09d446d0e32bb236bbbdb7b404a Mon Sep 17 00:00:00 2001 From: Jiang anqing Date: Mon, 1 Jul 2019 16:15:06 +0800 Subject: [PATCH 11/34] Update site/zh-cn/js/guide/save_load.md Co-Authored-By: kjlintong <40327910+kjlintong@users.noreply.github.com> --- site/zh-cn/js/guide/save_load.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/site/zh-cn/js/guide/save_load.md b/site/zh-cn/js/guide/save_load.md index 064778c83cf..2e3aae12808 100644 --- a/site/zh-cn/js/guide/save_load.md +++ b/site/zh-cn/js/guide/save_load.md @@ -86,7 +86,7 @@ await model.save('http://model-server.domain/upload') 这里将会创建一个web请求以保存一个模型在远程服务器上。您应该控制该远程服务器,以便确保它能够处理请求。 则模型的拓扑和权重将通过[POST](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/POST) 请求发送到指定的 HTTP 服务器。 -POST 请求的 body 具有称为`multipart/form-data`的格式。 +POST 请求的 body 遵守称为`multipart/form-data`的格式。它由以下两个文件组成 1. 一个名为 `model.json` 的 JSON 文件,其中包含拓扑结构和对下面描述的权重文件的引用。 2. 一个二进制文件,其中包含名为`model.weights.bin`. 的权重值。 From 03eb627106afc774f14403907044ea594ee7de24 Mon Sep 17 00:00:00 2001 From: Jiang anqing Date: Mon, 1 Jul 2019 16:38:01 +0800 Subject: [PATCH 12/34] Update site/zh-cn/js/guide/save_load.md Co-Authored-By: kjlintong <40327910+kjlintong@users.noreply.github.com> --- site/zh-cn/js/guide/save_load.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/site/zh-cn/js/guide/save_load.md b/site/zh-cn/js/guide/save_load.md index 2e3aae12808..2022ee9eb89 100644 --- a/site/zh-cn/js/guide/save_load.md +++ b/site/zh-cn/js/guide/save_load.md @@ -55,7 +55,7 @@ await model.save('indexeddb://my-model'); ``` 这将模型保存到浏览器的[IndexedDB](https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API) 。 - 像本地存储一样,它在刷新之间保持不变,而且对存储对象的大小也有较大的限制。 + 像本地存储一样,它会持续地刷新,而且对存储对象的大小也有较大的限制。 ### 文件下载 (仅限浏览器) From b1800619ce442f8d9734e1d5adf2eca575a5c1fd Mon Sep 17 00:00:00 2001 From: Jiang anqing Date: Tue, 16 Jul 2019 12:35:48 +0800 Subject: [PATCH 13/34] Update site/zh-cn/js/guide/save_load.md Co-Authored-By: kurileo --- site/zh-cn/js/guide/save_load.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/site/zh-cn/js/guide/save_load.md b/site/zh-cn/js/guide/save_load.md index 2022ee9eb89..1894dc79efb 100644 --- a/site/zh-cn/js/guide/save_load.md +++ b/site/zh-cn/js/guide/save_load.md @@ -13,7 +13,7 @@ TensorFlow.js提供了保存和加载模型的功能,这些模型可以是使 ## 保存 tf.Model [`tf.Model`](https://js.tensorflow.org/api/0.14.2/#class:Model) 和 [`tf.Sequential`](https://js.tensorflow.org/api/0.14.2/#class:Model) -同时提供了函数 [`model.save`](https://js.tensorflow.org/api/0.14.2/#tf.Model.save) 允许你保存一个模型的 +同时提供了函数 [`model.save`](https://js.tensorflow.org/api/0.14.2/#tf.Model.save) 允许您保存一个模型的 _topology_ 和 _weights_ . - Topology: 这是一个描述模型结构的文件(例如 它使用的了哪些operations)。它包含对存储在外部的模型权重的引用。 From 3cab77dc27699fa4947f77ce9f318dc50a066323 Mon Sep 17 00:00:00 2001 From: Jiang anqing Date: Tue, 16 Jul 2019 12:35:55 +0800 Subject: [PATCH 14/34] Update site/zh-cn/js/guide/save_load.md Co-Authored-By: kurileo --- site/zh-cn/js/guide/save_load.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/site/zh-cn/js/guide/save_load.md b/site/zh-cn/js/guide/save_load.md index 1894dc79efb..94028622f98 100644 --- a/site/zh-cn/js/guide/save_load.md +++ b/site/zh-cn/js/guide/save_load.md @@ -18,7 +18,7 @@ _topology_ 和 _weights_ . - Topology: 这是一个描述模型结构的文件(例如 它使用的了哪些operations)。它包含对存储在外部的模型权重的引用。 -- Weights: 这些是以有效格式存储给定模型权重的二进制文件。它们通常存储在与topology相同的文件夹中。 +- 权重(Weights): 这些是以有效格式存储给定模型权重的二进制文件。它们通常存储在与拓扑结构相同的文件夹中。 让我们看看保存模型的代码是什么样子的 From 07d90e4797526062a42dd72b0e119ca3011e0dbd Mon Sep 17 00:00:00 2001 From: Jiang anqing Date: Tue, 16 Jul 2019 12:36:02 +0800 Subject: [PATCH 15/34] Update site/zh-cn/js/guide/save_load.md Co-Authored-By: kurileo --- site/zh-cn/js/guide/save_load.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/site/zh-cn/js/guide/save_load.md b/site/zh-cn/js/guide/save_load.md index 94028622f98..313667de088 100644 --- a/site/zh-cn/js/guide/save_load.md +++ b/site/zh-cn/js/guide/save_load.md @@ -186,7 +186,7 @@ const model = await tf.loadLayersModel('file://path/to/my-model/model.json'); ## 使用 IOHandlers 加载模型 -如果上述方案没有满足你的需求,您可以使用`IOHandler`执行客制化加载行为。Tensorflow.js的`IOHandler`提供了[`tf.io.browserFiles`](https://js.tensorflow.org/api/latest/#io.browserFiles) ,运行浏览器用户在浏览器中上传文件。您可以在 [文档](https://js.tensorflow.org/api/latest/#io.browserFiles)中查看更多信息。 +如果上述方案没有满足您的需求,您可以使用`IOHandler`执行自定义的加载行为。Tensorflow.js的`IOHandler`提供了[`tf.io.browserFiles`](https://js.tensorflow.org/api/latest/#io.browserFiles) ,运行浏览器用户在浏览器中上传文件。您可以在 [文档](https://js.tensorflow.org/api/latest/#io.browserFiles)中查看更多信息。 # 保存和加载模型使用客制化IOHandlers From c83279acfbd07e7085edf72aa10c7cbe7c2e5e30 Mon Sep 17 00:00:00 2001 From: Jiang anqing Date: Tue, 16 Jul 2019 12:36:11 +0800 Subject: [PATCH 16/34] Update site/zh-cn/js/guide/save_load.md Co-Authored-By: kurileo --- site/zh-cn/js/guide/save_load.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/site/zh-cn/js/guide/save_load.md b/site/zh-cn/js/guide/save_load.md index 313667de088..7962ef4ff6f 100644 --- a/site/zh-cn/js/guide/save_load.md +++ b/site/zh-cn/js/guide/save_load.md @@ -188,7 +188,7 @@ const model = await tf.loadLayersModel('file://path/to/my-model/model.json'); 如果上述方案没有满足您的需求,您可以使用`IOHandler`执行自定义的加载行为。Tensorflow.js的`IOHandler`提供了[`tf.io.browserFiles`](https://js.tensorflow.org/api/latest/#io.browserFiles) ,运行浏览器用户在浏览器中上传文件。您可以在 [文档](https://js.tensorflow.org/api/latest/#io.browserFiles)中查看更多信息。 -# 保存和加载模型使用客制化IOHandlers +# 使用自定义的 IOHandlers 保存或加载模型 如果上述方案没有满足你的保存和加载模型的需求,你可以通过执行`IOHandler`以执行客制化序列行为。 From 4b72cd2968f6acee38ae3c0e3fefa648604bddd5 Mon Sep 17 00:00:00 2001 From: Jiang anqing Date: Tue, 16 Jul 2019 12:36:19 +0800 Subject: [PATCH 17/34] Update site/zh-cn/js/guide/save_load.md Co-Authored-By: kurileo --- site/zh-cn/js/guide/save_load.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/site/zh-cn/js/guide/save_load.md b/site/zh-cn/js/guide/save_load.md index 7962ef4ff6f..8f59af1e9d0 100644 --- a/site/zh-cn/js/guide/save_load.md +++ b/site/zh-cn/js/guide/save_load.md @@ -190,7 +190,7 @@ const model = await tf.loadLayersModel('file://path/to/my-model/model.json'); # 使用自定义的 IOHandlers 保存或加载模型 -如果上述方案没有满足你的保存和加载模型的需求,你可以通过执行`IOHandler`以执行客制化序列行为。 +如果上述方案没有满足您的保存和加载模型的需求,您可以通过执行`IOHandler`以执行自定义的序列化行为。 `IOHandler`是一个含有`save` 和 `load`方法的对象。 From e0d101dbd09417624a4b2466773c33ec5c57f521 Mon Sep 17 00:00:00 2001 From: Jiang anqing Date: Tue, 16 Jul 2019 12:36:26 +0800 Subject: [PATCH 18/34] Update site/zh-cn/js/guide/save_load.md Co-Authored-By: kurileo --- site/zh-cn/js/guide/save_load.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/site/zh-cn/js/guide/save_load.md b/site/zh-cn/js/guide/save_load.md index 8f59af1e9d0..7d3e7eacd27 100644 --- a/site/zh-cn/js/guide/save_load.md +++ b/site/zh-cn/js/guide/save_load.md @@ -171,7 +171,7 @@ const model = await tf.loadLayersModel('http://model-server.domain/download/mode ``` 这将从HTTP端点加载模型。加载`json` 文件后,函数将请求对应的`json` 文件引用的`.bin`文件。 -> 注意:这个工具依赖于[`fetch`](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch)方法。如果你的环境没有提供原生的fetch方法,你可以提供全局方法名称[`fetch`](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch)从而满足接口要求或是使用类似于(`node-fetch`)[https://www.npmjs.com/package/node-fetch]的库。 +> 注意:这个工具依赖于[`fetch`](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch)方法。如果您的环境没有提供原生的fetch方法,您可以提供全局方法名称[`fetch`](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch)从而满足接口要求或是使用类似于(`node-fetch`)[https://www.npmjs.com/package/node-fetch]的库。 ### 本机文件系统 (仅限于Node.js) From edf770cc5bb1cc31569fafdaf58af49c933be4bc Mon Sep 17 00:00:00 2001 From: Jiang anqing Date: Tue, 16 Jul 2019 12:36:33 +0800 Subject: [PATCH 19/34] Update site/zh-cn/js/guide/save_load.md Co-Authored-By: kurileo --- site/zh-cn/js/guide/save_load.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/site/zh-cn/js/guide/save_load.md b/site/zh-cn/js/guide/save_load.md index 7d3e7eacd27..477666d81cf 100644 --- a/site/zh-cn/js/guide/save_load.md +++ b/site/zh-cn/js/guide/save_load.md @@ -122,7 +122,7 @@ await model.save('file:///path/to/my-model'); ## 加载 tf.Model -给定一个使用上述方法之一保存的模型,我们可以使用 `tf.loadLayersModel`api加载它。 +给定一个使用上述方法之一保存的模型,我们可以使用 `tf.loadLayersModel` API来加载它。 让我们看一下加载模型的代码是什么样子的 From 8f49a94f6d200f6ec77eaec5847cf8d1e661a05a Mon Sep 17 00:00:00 2001 From: Jiang anqing Date: Tue, 16 Jul 2019 12:36:40 +0800 Subject: [PATCH 20/34] Update site/zh-cn/js/guide/save_load.md Co-Authored-By: kurileo --- site/zh-cn/js/guide/save_load.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/site/zh-cn/js/guide/save_load.md b/site/zh-cn/js/guide/save_load.md index 477666d81cf..127c36b3361 100644 --- a/site/zh-cn/js/guide/save_load.md +++ b/site/zh-cn/js/guide/save_load.md @@ -16,7 +16,7 @@ TensorFlow.js提供了保存和加载模型的功能,这些模型可以是使 同时提供了函数 [`model.save`](https://js.tensorflow.org/api/0.14.2/#tf.Model.save) 允许您保存一个模型的 _topology_ 和 _weights_ . -- Topology: 这是一个描述模型结构的文件(例如 它使用的了哪些operations)。它包含对存储在外部的模型权重的引用。 +- 拓扑结构(Topology): 这是一个描述模型结构的文件(例如它使用的了哪些操作)。它包含对存储在外部的模型权重的引用。 - 权重(Weights): 这些是以有效格式存储给定模型权重的二进制文件。它们通常存储在与拓扑结构相同的文件夹中。 From 18590b9aa8c5da3cec353f79f98c5f7156a1ddf3 Mon Sep 17 00:00:00 2001 From: Jiang anqing Date: Tue, 16 Jul 2019 12:36:48 +0800 Subject: [PATCH 21/34] Update site/zh-cn/js/guide/save_load.md Co-Authored-By: kurileo --- site/zh-cn/js/guide/save_load.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/site/zh-cn/js/guide/save_load.md b/site/zh-cn/js/guide/save_load.md index 127c36b3361..a300cae1f14 100644 --- a/site/zh-cn/js/guide/save_load.md +++ b/site/zh-cn/js/guide/save_load.md @@ -29,7 +29,7 @@ const saveResult = await model.save('localstorage://my-model-1'); 一些需要注意的地方: - `save` 方法采用以 scheme 字符串开头的类 URL 字符串参数(下文简称 scheme)。它描述了我们想保存模型的地址的类型。 在本例中我们使用 localstorage:// scheme 将模型保存到本地存储。 -- `scheme`后是`path`。 在上面的例子中,'path' 是 'my-model-1' +- 在 scheme 之后是 **路径(path)**。 在上面的例子中,路径是'my-model-1'。 - `save` 方法是异步的。 - `model.save` 的返回值是一个 JSON 对象,它包含一些可能有用的信息,例如模型的拓扑结构和权重的大小。 - 用于保存模型的环境不会影响哪些环境可以加载模型。在node.js中保存模型不会阻止在浏览器中加载模型。 From acc1d77a416af3758400e0779124f833f69e5c9e Mon Sep 17 00:00:00 2001 From: Jiang anqing Date: Tue, 16 Jul 2019 12:36:55 +0800 Subject: [PATCH 22/34] Update site/zh-cn/js/guide/save_load.md Co-Authored-By: kurileo --- site/zh-cn/js/guide/save_load.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/site/zh-cn/js/guide/save_load.md b/site/zh-cn/js/guide/save_load.md index a300cae1f14..bd6ebfaa266 100644 --- a/site/zh-cn/js/guide/save_load.md +++ b/site/zh-cn/js/guide/save_load.md @@ -14,7 +14,7 @@ TensorFlow.js提供了保存和加载模型的功能,这些模型可以是使 [`tf.Model`](https://js.tensorflow.org/api/0.14.2/#class:Model) 和 [`tf.Sequential`](https://js.tensorflow.org/api/0.14.2/#class:Model) 同时提供了函数 [`model.save`](https://js.tensorflow.org/api/0.14.2/#tf.Model.save) 允许您保存一个模型的 -_topology_ 和 _weights_ . +_拓扑结构(topology)_ 和 _权重(weights)_ 。 - 拓扑结构(Topology): 这是一个描述模型结构的文件(例如它使用的了哪些操作)。它包含对存储在外部的模型权重的引用。 From 211ab79345424cc51e217cccc5c43b9e5dad5d53 Mon Sep 17 00:00:00 2001 From: Jiang anqing Date: Mon, 12 Aug 2019 21:46:15 +0800 Subject: [PATCH 23/34] Update site/zh-cn/js/guide/save_load.md Co-Authored-By: kurileo --- site/zh-cn/js/guide/save_load.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/site/zh-cn/js/guide/save_load.md b/site/zh-cn/js/guide/save_load.md index bd6ebfaa266..2bb36896123 100644 --- a/site/zh-cn/js/guide/save_load.md +++ b/site/zh-cn/js/guide/save_load.md @@ -32,7 +32,7 @@ const saveResult = await model.save('localstorage://my-model-1'); - 在 scheme 之后是 **路径(path)**。 在上面的例子中,路径是'my-model-1'。 - `save` 方法是异步的。 - `model.save` 的返回值是一个 JSON 对象,它包含一些可能有用的信息,例如模型的拓扑结构和权重的大小。 -- 用于保存模型的环境不会影响哪些环境可以加载模型。在node.js中保存模型不会阻止在浏览器中加载模型。 +- 用于保存模型的环境不会影响那些可以加载模型的环境。在 node.js 中保存模型时并不会阻碍模型在浏览器中被加载。 下面我们将介绍以下不同方案。 From 96e85edf35a0b75ae921e6588d7f551bf4a0f04f Mon Sep 17 00:00:00 2001 From: Jiang anqing Date: Mon, 12 Aug 2019 21:46:28 +0800 Subject: [PATCH 24/34] Update site/zh-cn/js/guide/save_load.md Co-Authored-By: kurileo --- site/zh-cn/js/guide/save_load.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/site/zh-cn/js/guide/save_load.md b/site/zh-cn/js/guide/save_load.md index 2bb36896123..a708436326f 100644 --- a/site/zh-cn/js/guide/save_load.md +++ b/site/zh-cn/js/guide/save_load.md @@ -44,7 +44,7 @@ const saveResult = await model.save('localstorage://my-model-1'); ```js await model.save('localstorage://my-model'); ``` -这将会将一个命名为`my-model`模型保存到浏览器的[本地存储](https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage)。这将持续刷新本地存储, 但是,如果空间成为问题,本地存储可以由用户或浏览器本身清除。每个浏览器还为给定域在本地存储中存储的数据量设置了自己的限制。 +这样可以在浏览器的[本地存储](https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage)中以名称 `my-model` 来保存模型。这样存储能够在浏览器刷新后保持不变,而当存储空间成为问题时,用户或浏览器本身可以清除本地存储。 每个浏览器还可以对给定域在本地的存储空间设定限额。 ### IndexedDB (仅限浏览器) From 72d435aec2e88a150dd178802d4a6f0a9bd41e57 Mon Sep 17 00:00:00 2001 From: Jiang anqing Date: Mon, 12 Aug 2019 21:46:45 +0800 Subject: [PATCH 25/34] Update site/zh-cn/js/guide/save_load.md Co-Authored-By: kurileo --- site/zh-cn/js/guide/save_load.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/site/zh-cn/js/guide/save_load.md b/site/zh-cn/js/guide/save_load.md index a708436326f..29d4f73c21a 100644 --- a/site/zh-cn/js/guide/save_load.md +++ b/site/zh-cn/js/guide/save_load.md @@ -93,7 +93,7 @@ POST 请求的 body 遵守称为`multipart/form-data`的格式。它由以下两 这个 [api 文档](https://js.tensorflow.org/api/latest/#tf.io.browserHTTPRequest)包含一块 Python 代码片段,演示了如何使用加入了 Keras 和 TensorFlow 的 [flask](http://flask.pocoo.org/) Web 框架来处理来自 save 的请求,并重建 request 的 payload 作为服务器内存中的 Keras Model 对象。 -通常,您必须向HTTP服务器传递更多参数或请求标头(例如,用于身份验证,或者如果要指定应保存模型的文件夹)。您可以通过替换URL字符串参数tf.io.browserHTTPRequest来获得对来自 save 函数的请求的这些方面的细粒度控制。此API在控制HTTP请求方面提供了更大的灵活性。 +通常,您必须向 HTTP 服务器传递更多参数或请求头(例如,用于身份验证,或者如果要指定应保存模型的文件夹)。您可以通过替换 `tf.io.browserHTTPRequest` 函数中的 URL字符串参数来获得对来自 `save` 函数的请求在这些方面的细粒度控制。这个API在控制 HTTP 请求方面提供了更大的灵活性。 例如: From 49f815389ef5fd58504d10f1e684ea15b71710f1 Mon Sep 17 00:00:00 2001 From: Jiang anqing Date: Mon, 12 Aug 2019 21:47:10 +0800 Subject: [PATCH 26/34] Update site/zh-cn/js/guide/save_load.md Co-Authored-By: kurileo --- site/zh-cn/js/guide/save_load.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/site/zh-cn/js/guide/save_load.md b/site/zh-cn/js/guide/save_load.md index 29d4f73c21a..e3bc8fa7963 100644 --- a/site/zh-cn/js/guide/save_load.md +++ b/site/zh-cn/js/guide/save_load.md @@ -55,7 +55,7 @@ await model.save('indexeddb://my-model'); ``` 这将模型保存到浏览器的[IndexedDB](https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API) 。 - 像本地存储一样,它会持续地刷新,而且对存储对象的大小也有较大的限制。 +与本地存储一样,它在刷新后仍然存在,同时它往往也对存储的对象的大小有较大的限制。 ### 文件下载 (仅限浏览器) From 0e351f2cc1346bb8a93626cb9c9cc32a201a2db8 Mon Sep 17 00:00:00 2001 From: Jiang anqing Date: Mon, 12 Aug 2019 21:47:30 +0800 Subject: [PATCH 27/34] Update site/zh-cn/js/guide/save_load.md Co-Authored-By: kurileo --- site/zh-cn/js/guide/save_load.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/site/zh-cn/js/guide/save_load.md b/site/zh-cn/js/guide/save_load.md index e3bc8fa7963..246831304ca 100644 --- a/site/zh-cn/js/guide/save_load.md +++ b/site/zh-cn/js/guide/save_load.md @@ -54,7 +54,7 @@ await model.save('localstorage://my-model'); await model.save('indexeddb://my-model'); ``` -这将模型保存到浏览器的[IndexedDB](https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API) 。 +这样会将模型保存到浏览器的[IndexedDB](https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API)存储中。 与本地存储一样,它在刷新后仍然存在,同时它往往也对存储的对象的大小有较大的限制。 ### 文件下载 (仅限浏览器) From 5bf803dd29c6d75a2658349b00f8394c71dc1261 Mon Sep 17 00:00:00 2001 From: Jiang anqing Date: Mon, 12 Aug 2019 21:48:42 +0800 Subject: [PATCH 28/34] Update site/zh-cn/js/guide/save_load.md Co-Authored-By: kurileo --- site/zh-cn/js/guide/save_load.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/site/zh-cn/js/guide/save_load.md b/site/zh-cn/js/guide/save_load.md index 246831304ca..9dc1f825749 100644 --- a/site/zh-cn/js/guide/save_load.md +++ b/site/zh-cn/js/guide/save_load.md @@ -65,7 +65,7 @@ await model.save('indexeddb://my-model'); await model.save('downloads://my-model'); ``` 这会让浏览器下载模型文件至用户的机器上,并生成两个文件: - 1. 一个名为 `[my-model].json` 的 JSON 文件,它在 modeloTopology 字段中包含模型的拓扑,在 weightsManifest 字段中包含权重清单。 + 1. 一个名为 `[my-model].json` 的 JSON 文件,它包含了模型的拓扑结构和下面将要介绍的权重文件的引用。 2. 一个二进制文件,其中包含名为 `[my-model].weights.bin` 的权重值。 你可以更换`[my-model]`的名称以获得一个不同的名称的文件。 From db100016224210051ff2428a5abc304ba2d02abc Mon Sep 17 00:00:00 2001 From: Jiang anqing Date: Mon, 12 Aug 2019 21:48:57 +0800 Subject: [PATCH 29/34] Update site/zh-cn/js/guide/save_load.md Co-Authored-By: kurileo --- site/zh-cn/js/guide/save_load.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/site/zh-cn/js/guide/save_load.md b/site/zh-cn/js/guide/save_load.md index 9dc1f825749..08c3d68e689 100644 --- a/site/zh-cn/js/guide/save_load.md +++ b/site/zh-cn/js/guide/save_load.md @@ -68,7 +68,7 @@ await model.save('downloads://my-model'); 1. 一个名为 `[my-model].json` 的 JSON 文件,它包含了模型的拓扑结构和下面将要介绍的权重文件的引用。 2. 一个二进制文件,其中包含名为 `[my-model].weights.bin` 的权重值。 -你可以更换`[my-model]`的名称以获得一个不同的名称的文件。 +您可以更换 `[my-model]` 的名称以获得一个不同的名称的文件。 由于`.json`使用相对路径指向 `.bin`。所以两个文件需要被安放在同一个文件夹中。 From d41161b8c966f95ccf868815baa537499db6c10e Mon Sep 17 00:00:00 2001 From: Jiang anqing Date: Mon, 12 Aug 2019 21:49:11 +0800 Subject: [PATCH 30/34] Update site/zh-cn/js/guide/save_load.md Co-Authored-By: kurileo --- site/zh-cn/js/guide/save_load.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/site/zh-cn/js/guide/save_load.md b/site/zh-cn/js/guide/save_load.md index 08c3d68e689..ec052249b0a 100644 --- a/site/zh-cn/js/guide/save_load.md +++ b/site/zh-cn/js/guide/save_load.md @@ -70,7 +70,7 @@ await model.save('downloads://my-model'); 您可以更换 `[my-model]` 的名称以获得一个不同的名称的文件。 -由于`.json`使用相对路径指向 `.bin`。所以两个文件需要被安放在同一个文件夹中。 +由于`.json`使用相对路径指向 `.bin`,所以两个文件需要被安放在同一个文件夹中。 > 注意: 某些浏览器要求用户在同时下载多个文件之前授予权限。 From 0aa6bb446887f379bbd797240d96f4c8de3d21f6 Mon Sep 17 00:00:00 2001 From: Jiang anqing Date: Mon, 12 Aug 2019 21:49:39 +0800 Subject: [PATCH 31/34] Update site/zh-cn/js/guide/save_load.md Co-Authored-By: kurileo --- site/zh-cn/js/guide/save_load.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/site/zh-cn/js/guide/save_load.md b/site/zh-cn/js/guide/save_load.md index ec052249b0a..e5755897482 100644 --- a/site/zh-cn/js/guide/save_load.md +++ b/site/zh-cn/js/guide/save_load.md @@ -84,7 +84,7 @@ await model.save('downloads://my-model'); await model.save('http://model-server.domain/upload') ``` -这里将会创建一个web请求以保存一个模型在远程服务器上。您应该控制该远程服务器,以便确保它能够处理请求。 +这将创建一个Web请求,以将模型保存到远程服务器。 您应该控制该远程服务器,以便确保它能够处理该请求。 则模型的拓扑和权重将通过[POST](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/POST) 请求发送到指定的 HTTP 服务器。 POST 请求的 body 遵守称为`multipart/form-data`的格式。它由以下两个文件组成 From d4eb72ee353754e3de56cf6cf351814e968c44ce Mon Sep 17 00:00:00 2001 From: Jiang anqing Date: Mon, 12 Aug 2019 21:50:02 +0800 Subject: [PATCH 32/34] Update site/zh-cn/js/guide/save_load.md Co-Authored-By: kurileo --- site/zh-cn/js/guide/save_load.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/site/zh-cn/js/guide/save_load.md b/site/zh-cn/js/guide/save_load.md index e5755897482..27e236a6655 100644 --- a/site/zh-cn/js/guide/save_load.md +++ b/site/zh-cn/js/guide/save_load.md @@ -85,7 +85,7 @@ await model.save('http://model-server.domain/upload') ``` 这将创建一个Web请求,以将模型保存到远程服务器。 您应该控制该远程服务器,以便确保它能够处理该请求。 -则模型的拓扑和权重将通过[POST](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/POST) 请求发送到指定的 HTTP 服务器。 +模型将通过[POST](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/POST) 请求发送到指定的 HTTP 服务器。 POST 请求的 body 遵守称为`multipart/form-data`的格式。它由以下两个文件组成 1. 一个名为 `model.json` 的 JSON 文件,其中包含拓扑结构和对下面描述的权重文件的引用。 From 60bc0ee1a0dd71a0c79c03b96d7582eec0d8a7c0 Mon Sep 17 00:00:00 2001 From: Jiang anqing Date: Mon, 12 Aug 2019 21:50:23 +0800 Subject: [PATCH 33/34] Update site/zh-cn/js/guide/save_load.md Co-Authored-By: kurileo --- site/zh-cn/js/guide/save_load.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/site/zh-cn/js/guide/save_load.md b/site/zh-cn/js/guide/save_load.md index 27e236a6655..56eeddc124b 100644 --- a/site/zh-cn/js/guide/save_load.md +++ b/site/zh-cn/js/guide/save_load.md @@ -89,7 +89,7 @@ await model.save('http://model-server.domain/upload') POST 请求的 body 遵守称为`multipart/form-data`的格式。它由以下两个文件组成 1. 一个名为 `model.json` 的 JSON 文件,其中包含拓扑结构和对下面描述的权重文件的引用。 -2. 一个二进制文件,其中包含名为`model.weights.bin`. 的权重值。 + 2. 一个二进制文件,其中包含名为 `[my-model].weights.bin` 的权重值。 这个 [api 文档](https://js.tensorflow.org/api/latest/#tf.io.browserHTTPRequest)包含一块 Python 代码片段,演示了如何使用加入了 Keras 和 TensorFlow 的 [flask](http://flask.pocoo.org/) Web 框架来处理来自 save 的请求,并重建 request 的 payload 作为服务器内存中的 Keras Model 对象。 From ffeff2f36953bc999791f5d547dc66e30f2f737b Mon Sep 17 00:00:00 2001 From: Jiang anqing Date: Mon, 12 Aug 2019 21:51:06 +0800 Subject: [PATCH 34/34] Update site/zh-cn/js/guide/save_load.md Co-Authored-By: kurileo --- site/zh-cn/js/guide/save_load.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/site/zh-cn/js/guide/save_load.md b/site/zh-cn/js/guide/save_load.md index 56eeddc124b..ab6f65d9abf 100644 --- a/site/zh-cn/js/guide/save_load.md +++ b/site/zh-cn/js/guide/save_load.md @@ -91,7 +91,7 @@ POST 请求的 body 遵守称为`multipart/form-data`的格式。它由以下两 1. 一个名为 `model.json` 的 JSON 文件,其中包含拓扑结构和对下面描述的权重文件的引用。 2. 一个二进制文件,其中包含名为 `[my-model].weights.bin` 的权重值。 -这个 [api 文档](https://js.tensorflow.org/api/latest/#tf.io.browserHTTPRequest)包含一块 Python 代码片段,演示了如何使用加入了 Keras 和 TensorFlow 的 [flask](http://flask.pocoo.org/) Web 框架来处理来自 save 的请求,并重建 request 的 payload 作为服务器内存中的 Keras Model 对象。 +请注意,这两个文件的名称需要与上述介绍中的保持完全相同(因为名称内置于函数中,无法更改)。 此[ api 文档](https://js.tensorflow.org/api/latest/#tf.io.browserHTTPRequest)包含一个 Python 代码片段,演示了如何使用 [flask](http://flask.pocoo.org/) web 框架来处理源自 `save` 的请求。 通常,您必须向 HTTP 服务器传递更多参数或请求头(例如,用于身份验证,或者如果要指定应保存模型的文件夹)。您可以通过替换 `tf.io.browserHTTPRequest` 函数中的 URL字符串参数来获得对来自 `save` 函数的请求在这些方面的细粒度控制。这个API在控制 HTTP 请求方面提供了更大的灵活性。