提交 7869baca 编写于 作者: W wizardforcel

2021-01-10 23:20:28

上级 5e499213
......@@ -427,13 +427,13 @@ model.add(Dense(hidden_units,
`tanh`函数将其输入映射在 -1.0 到 1.0 的范围内。 如果输出可以同时以正值和负值摆幅,则这一点很重要。 `tanh`功能在循环神经网络的内部层中更普遍使用,但也已用作输出层激活。 如果在输出激活中使用 tanh 代替`sigmoid`,则必须适当缩放使用的数据。 例如,不是使用`x = x / 255`缩放`[0.0, 1.0]`范围内的每个灰度像素,而是使用`x = (x - 127.5) / 127.5`将其分配在`[-1.0, 1.0]`范围内。
下图“图 1.3.6”显示了`sigmoid``tanh`功能。 数学上,Sigmoid可以用以下公式表示:
下图“图 1.3.6”显示了`sigmoid``tanh`功能。 数学上,Sigmoid 可以用以下公式表示:
![](img/B14853_01_008.png) (Equation 1.3.5)
![](img/B14853_01_07.png)
图 1.3.6:Sigmoid和正切图
图 1.3.6:Sigmoid 和正切图
预测张量距单热地面真值向量有多远称为损失。 损失函数的一种类型是`mean_squared_error`**MSE**),或者是目标或标签与预测之间差异的平方的平均值。 在当前示例中,我们使用`categorical_crossentropy`。 它是目标或标签乘积与每个类别的预测对数之和的负数。 Keras 中还有其他损失函数,例如`mean_absolute_error``binary_crossentropy`。“表 1.3.2”总结了的常见损耗函数。
......
......@@ -28,7 +28,7 @@
* **弹性容量**:即付即用是建立云服务的核心原则。 尽管仔细的容量规划对于任何成功的数据策略都很重要,但是借助云,我们可以在容量规划方面拥有一定的灵活性。 如果需要更多容量(例如,在线零售商可以预期在黑色星期五期间会有很高的销量),则公司可以在短时间内扩展容量,然后缩减到常规容量。 这种类型的灵活性在数据管理系统的内部部署中不可行。
* **全局连接**:只要可以使用互联网连接以及适当的认证/授权,就可以在全球范围内虚拟访问作为云上可用的基础结构,平台和应用的服务。 通过云提供商跨区域和物理位置的隐式冗余,确保了连接性。 内部部署和拓扑不是客户端考虑或关注的领域。 云端点是一致且无缝的,而与客户端的位置无关。
* **无缝升级**:云提供商可以无缝升级在云上配置的操作系统和应用软件。 这样可以确保所有部署之间的一致性和可靠性,并且非常适合互联网规模的企业应用。 与传统的本地部署相比,传统的本地部署需要在管理服务停机和业务中断的同时,将应用版本和补丁小心地应用于所有节点。 在云环境中,责任完全转移给云提供商,企业可以专注于核心业务应用。
* **无服务器 DevOps**:借助此,应用开发团队可以完全专注于核心业务逻辑。 他们可以根据数据量和计算需求,根据应用范围简单地规定存储和计算需求。 这些团队无需担心任何部署,他们将以最少的配置和扩展时间开始使用服务。 无服务器架构将Cloud Functions作为服务公开给云提供商托管应用的地方,并负责管理硬件和相关软件组件。 这种模式提供了进入业务应用,算法和模型开发的快速入门,而不必担心底层基础结构,因此,可以快速构建核心功能以开始实现业务收益。
* **无服务器 DevOps**:借助此,应用开发团队可以完全专注于核心业务逻辑。 他们可以根据数据量和计算需求,根据应用范围简单地规定存储和计算需求。 这些团队无需担心任何部署,他们将以最少的配置和扩展时间开始使用服务。 无服务器架构将 Cloud Functions 作为服务公开给云提供商托管应用的地方,并负责管理硬件和相关软件组件。 这种模式提供了进入业务应用,算法和模型开发的快速入门,而不必担心底层基础结构,因此,可以快速构建核心功能以开始实现业务收益。
* **快速发布时间****TTM**):有了前面列出的所有优点,采用 Cloud First 策略将各种概念和原型的 TTM 降至最低。
Google 通过从头开始构建服务,从而为企业提供云服务时采取了创新的方法。 这些服务最初是由 Google 自己内部用于搜索和其他互联网规模的服务而构建的。 该平台迅速成熟,形成了一套完整的套件,可用于开发整个简单范围的应用,从简单的 Web 应用开始,再到微服务和高级分析,这些功能利用了大量的结构化和非结构化数据以及 GPU 和 **张量处理单元****TPU**),用于训练计算密集型模型。 在本书的“第 7 章”,“了解云 TPU” 中,我们将深入研究 TPU 并详细了解 TPU。 在本书中,我们将详细了解 GCP 的各个组成部分,并将专门研究如何利用 GCP 将**人工智能****AI**)工作负载以及各种应用的无缝集成部署为服务。
......
......@@ -73,9 +73,9 @@ App Engine 对于部署任何 Web 或移动应用非常有用。 根据资源的
Cloud Functions 是 Google Cloud 提供的事件驱动的无服务器 PaaS,非常适合微服务架构。
Google Cloud 覆盖的大多数区域都提供 Cloud Functions。 它们主要用于小型或单一用途的功能,例如调用其他服务或将事件写入发布/订阅主题等。 Cloud Functions中有一些很棒的功能,可提供敏捷性和零停机维护。 Cloud Functions可以自动销售,并且高度可用。 您可以使用 Cloud Functions 连接到大多数 Google Cloud 服务。
Google Cloud 覆盖的大多数区域都提供 Cloud Functions。 它们主要用于小型或单一用途的功能,例如调用其他服务或将事件写入发布/订阅主题等。 Cloud Functions 中有一些很棒的功能,可提供敏捷性和零停机维护。 Cloud Functions 可以自动销售,并且高度可用。 您可以使用 Cloud Functions 连接到大多数 Google Cloud 服务。
可以使用 JavaScript 或 Python 开发 Cloud Functions。 用户仅在运行时才需要为Cloud Functions付费。 这使其非常具有成本效益。
可以使用 JavaScript 或 Python 开发 Cloud Functions。 用户仅在运行时才需要为 Cloud Functions 付费。 这使其非常具有成本效益。
# Cloud Functions 和 AI 应用
......
......@@ -187,7 +187,7 @@ gcloud ai-platform local predict --model-dir model_storage_path/ \
* **Cloud Firestore**:这是一个方便的 NoSQL 数据存储,用于使客户端和服务器端之间的数据保持同步。 它通常用于移动,Web 和服务器开发,并为构建响应式应用和跨设备应用提供支持。
* **Cloud Datastore**:这是另一个完全托管的 NoSQL 数据库,用于处理分片和复制,以确保跨部署区域的高可用性。 它支持 ACID 事务以及类似 SQL 的查询和索引。 数据存储区提供了 REST API,通过允许通过多级安全连接进行数据访问,可以轻松集成外部应用。 可以很容易地更改基础数据结构,并提供一种易于使用的查询语言。
以下组件可用于计算和处理; 在我们的应用中,我们将利用Cloud Functions:
以下组件可用于计算和处理; 在我们的应用中,我们将利用 Cloud Functions:
* **Cloud SDK**:这是用于使用 GCP 开发的一组工具和库。 这是所有 GCP 服务的命令行界面,例如虚拟机编排,计算引擎,网络和磁盘存储。 它通常用于自动执行各种应用管理任务。 对于 AIP 应用,我们可以使用 Cloud SDK 来管理开发,测试和部署管道,并自动管理整个应用。
* **Cloud Functions**:这是一个无服务器,事件驱动的计算平台。 根据工作负载和基于预定义的事件,可以轻松地进行伸缩。 对于 AIP 应用,一旦发票到达源位置,我们就可以使用 Cloud Functions 触发自动过程,以读取发票并进行处理。 它为跨各种语言和应用接口协议的互操作性提供了无缝支持。 它基于最小特权的核心安全原理工作,并根据为用户分配的角色,促进对事件和功能的安全访问。
......@@ -362,7 +362,7 @@ Bank_Name VARCHAR(50));
# 启用 Cloud Functions API
现在启用Cloud Functions API:
现在启用 Cloud Functions API:
1. 从控制台搜索 Cloud Functions API:
......@@ -396,7 +396,7 @@ Bank_Name VARCHAR(50));
![](img/08d2a98e-b271-4acb-9d63-67a6b4cbb63e.png)
4. 复制`aip_cloud_function.py`中的代码,并根据存储区名称和创建的 Pub/Sub 主题替换所需的详细信息。 要连接到 Cloud SQL 数据库,将需要再进行一次替换。 将“步骤 6”中提到的代码行替换为下载代码中的 Cloud SQL 详细信息。
5.[这里](https://github.com/vss-vikram/Hands-On-Artificial-Intelligence-on-Google-Cloud-Platform)下载Cloud Functions代码。
5.[这里](https://github.com/vss-vikram/Hands-On-Artificial-Intelligence-on-Google-Cloud-Platform)下载 Cloud Functions 代码。
6. 提供 MySQL 连接详细信息,如以下代码所示。 您将从上一步下载的 Cloud Function 代码中获得相同的代码行。 请使用适当的详细信息替换数据库用户,密码,名称和 Cloud SQL 实例:
`# MYSQL+pymysql://<db_user>:<db_pass>@/<db_name>?unix_socket=/cloudsql/<cloud_sql_instance_name>`
......@@ -422,7 +422,7 @@ Bank_Name VARCHAR(50));
![](img/71cd4bd7-4577-4e46-8747-7090a07d9c14.png)
2. 选择将用于运行Cloud Functions的服务帐户:
2. 选择将用于运行 Cloud Functions 的服务帐户:
![](img/afadfc22-1ce8-444b-ac12-279458c0104b.png)
......
......@@ -511,7 +511,7 @@ with tf.name_scope('loss') as scope:
# 添加优化器
我们使用Adam优化器来最大程度地减少损失,如下所示:
我们使用 Adam 优化器来最大程度地减少损失,如下所示:
```py
# adding optimizer
......
......@@ -7,7 +7,7 @@ RBM 通过尝试重建输入数据来找到输入的潜在表示。 在本章中
我们将深入探讨以下主题:
* 什么是 RBM?
* RBM的发展路径
* RBM 的发展路径
* 在 TensorFlow 中实现 RBM
* 用于电影推荐的 RBM
* 数据库
......@@ -62,9 +62,9 @@ RBM 中显然没有输出层,因此学习与前馈网络中的学习有很大
这些梯度称为对比散度。
我希望您现在已经掌握了RBM背后的理论。 在简要介绍了 RBM 的演变路径之后,您将在动手部分中增强对 RBM 的理解,我们将在下一节中进行介绍。
我希望您现在已经掌握了 RBM 背后的理论。 在简要介绍了 RBM 的演变路径之后,您将在动手部分中增强对 RBM 的理解,我们将在下一节中进行介绍。
# RBM的发展路径
# RBM 的发展路径
顾名思义,RBM 源自玻尔兹曼机。玻尔兹曼机由 Geoffrey Hinton 和 Paul Smolensky 于 1983 年发明,是一种网络类型,其中所有单元(可见和隐藏)都处于二进制状态并连接在一起。 尽管他们具有学习有趣的表示形式的理论能力,但对他们来说还是有许多实际问题,包括训练时间,训练时间随模型大小呈指数增长(因为所有单元都已连接)。 玻尔兹曼机的总体示意图如下:
......
......@@ -259,7 +259,7 @@ Training dataset shape: (70000, 784)
beta1=beta1).minimize(g_loss, var_list=g_vars)
```
优化器实现Adam算法,学习率为 0.0002,第一矩衰减率为 0.5。 在进行模型优化之前,不要忘记定义一个函数,该函数返回用于训练的批量数据:
优化器实现 Adam 算法,学习率为 0.0002,第一矩衰减率为 0.5。 在进行模型优化之前,不要忘记定义一个函数,该函数返回用于训练的批量数据:
```py
>>> def gen_batches(data, batch_size, shuffle=True):
......
......@@ -94,7 +94,7 @@
在神经网络的训练过程中,可能会出现这样的情况,即偏差和权重值的微小变化可能会以剧烈的方式影响神经网络的输出。 理想情况下,这不应发生。 偏差或权重值的微小变化都应该仅导致输出的微小变化。 使用阶跃函数时,权重和偏差项的变化会在很大程度上影响输出,因此需要阶跃函数以外的其他东西。
神经元的运作背后是一种功能。 在线性神经元的情况下,我们看到其操作是基于阶跃函数的。 我们有一堆能够捕获非线性的函数。 Sigmoid功能就是这样的功能,使用该功能的神经元通常被称为Sigmoid神经元。 与阶跃函数不同,对于乙状神经元,将使用以下规则生成输出:
神经元的运作背后是一种功能。 在线性神经元的情况下,我们看到其操作是基于阶跃函数的。 我们有一堆能够捕获非线性的函数。 Sigmoid 功能就是这样的功能,使用该功能的神经元通常被称为 Sigmoid 神经元。 与阶跃函数不同,对于乙状神经元,将使用以下规则生成输出:
![](img/c07baaa1-6d33-4e1b-b759-e81faa535390.png)
......@@ -790,29 +790,29 @@ array2 = np.array([[90, 80, 70], [60, 50, 40], [30, 20, 10]])
arr[2:5] = 4
```
接下来,我们将看Pandas。
接下来,我们将看 Pandas。
# Pandas
pandas 建立在 NumPy 之上,是使用 Python 进行数据科学使用最广泛的库之一。 它有助于实现高性能的数据结构和数据分析方法。 Pandas 提供了一个称为`DataFrame`的内存中二维表对象,该对象又由称为数组的一维,类似数组的结构组成。
Pandas中的每个`DataFrame`都采用类似电子表格的表格的形式,带有行标签和列标题。 可以执行基于行或基于列的操作,或同时执行这两个操作。 Pandas与 matplotlib 紧密集成,可提供几种直观的数据可视化效果,在进行演示或探索性数据分析过程中通常非常有用。
Pandas 中的每个`DataFrame`都采用类似电子表格的表格的形式,带有行标签和列标题。 可以执行基于行或基于列的操作,或同时执行这两个操作。 Pandas 与 matplotlib 紧密集成,可提供几种直观的数据可视化效果,在进行演示或探索性数据分析过程中通常非常有用。
要将Pandas导入到 Python 项目中,请使用以下代码行:
要将 Pandas 导入到 Python 项目中,请使用以下代码行:
```py
import pandas as pd
```
在这里,`pd`是导入Pandas的通用名称。
在这里,`pd`是导入 Pandas 的通用名称。
Pandas提供以下数据结构:
Pandas 提供以下数据结构:
* `Series`:一维数组或向量,类似于表中的列
* `DataFrames`:二维表,带有表标题和行标签
* `Panel``DataFrames`的字典,很像一个 MySQL 数据库,其中包含多个表
可以使用`pd.Series( )`方法创建一个Pandas系列,而可以使用`pd.DataFrame( )`方法创建一个`DataFrame`-例如,在下面的代码中,我们使用多个序列对象创建一个Pandas`DataFrame`对象:
可以使用`pd.Series( )`方法创建一个 Pandas 系列,而可以使用`pd.DataFrame( )`方法创建一个`DataFrame`-例如,在下面的代码中,我们使用多个序列对象创建一个 Pandas`DataFrame`对象:
```py
import pandas as pd
......
......@@ -277,7 +277,7 @@ Dialogflow 与 GCP 紧密集成,因此我们必须首先创建一个 Google
现在,我们将创建一个 Webhook,该 Webhook 将在 Firebase 云控制台上运行并调用一个外部 API,该 API 位于我们的订单管理门户中。
单击菜单栏中的“实现项目”。 系统会为您提供打开 Webhook 或使用 Firebase Cloud Functions的选项。 打开内联编辑器。 您的屏幕将类似于以下屏幕截图:
单击菜单栏中的“实现项目”。 系统会为您提供打开 Webhook 或使用 Firebase Cloud Functions 的选项。 打开内联编辑器。 您的屏幕将类似于以下屏幕截图:
![](img/a462f840-72e8-4bd3-adda-859232692693.png)
......@@ -285,7 +285,7 @@ Dialogflow 与 GCP 紧密集成,因此我们必须首先创建一个 Google
# 第 6 步 – 创建 Firebase Cloud Functions
Firebase Cloud Functions在 Firebase 平台上运行,并按您在创建 Dialogflow 代理期间选择或创建的 GCP 项目的规定计费。 您可以在[这个页面](https://dialogflow.com/docs/how-tos/getting-started-fulfillment)上了解有关Cloud Functions的更多信息。
Firebase Cloud Functions 在 Firebase 平台上运行,并按您在创建 Dialogflow 代理期间选择或创建的 GCP 项目的规定计费。 您可以在[这个页面](https://dialogflow.com/docs/how-tos/getting-started-fulfillment)上了解有关 Cloud Functions 的更多信息。
# 步骤 6.1 – 将所需的软件包添加到`package.json`
......@@ -357,7 +357,7 @@ function checkOrderStatus(){
# 使用 ngrok 改进本地主机上的 HTTPS API
您将需要创建自己的订单管理系统 API 才能使Cloud Functions脚本正常工作,以便它可以从 API 中获取订单状态。 您可以在[这个页面](http://tiny.cc/omsapi)中找到快速样本。 您的 API 必须在 HTTPS URL 上运行。 为此,您可以使用 PythonAnywhere 和 ngrok 之类的服务。 尽管 PythonAnywhere 将代码托管在其服务器上并提供固定的 URL,但是 ngrok 可以安装并在本地运行以向`localhost`提供转发地址。
您将需要创建自己的订单管理系统 API 才能使 Cloud Functions 脚本正常工作,以便它可以从 API 中获取订单状态。 您可以在[这个页面](http://tiny.cc/omsapi)中找到快速样本。 您的 API 必须在 HTTPS URL 上运行。 为此,您可以使用 PythonAnywhere 和 ngrok 之类的服务。 尽管 PythonAnywhere 将代码托管在其服务器上并提供固定的 URL,但是 ngrok 可以安装并在本地运行以向`localhost`提供转发地址。
假设您必须在系统的端口`8000`上为订单管理 API 运行 Django 项目,并且现在希望提供 HTTPS URL 以便进行测试; 您可以按照以下步骤使用 ngrok 轻松做到这一点:
......
......@@ -461,7 +461,7 @@ model = Sequential([Conv2D(96, 11, padding='valid', activation='relu',input_shap
* **优化器**:我们可以使用的优化器是`adam``rmsprop``sgd``adadelta``adagrad``adamax``nadam`。 有关 Keras 优化器的列表,请参考[这里](https://keras.io/optimizers)
* `sgd`代表随机梯度下降。 顾名思义,它使用梯度值作为优化程序。
* `adam`代表自适应力矩。 它在最后一步中使用渐变来调整渐变下降参数。 Adam运作良好,几乎不需要调整。 在本书中将经常使用它。
* `adam`代表自适应力矩。 它在最后一步中使用渐变来调整渐变下降参数。 Adam 运作良好,几乎不需要调整。 在本书中将经常使用它。
* `adagrad`适用于稀疏数据,并且几乎不需要调整。 对于`adagrad`,不需要默认学习率。
* **损失函数**:用于图像处理的最常用损失函数是二进制交叉熵,分类交叉熵,均方误差或`sparse_categorical`交叉熵。 当分类任务是二进制时,例如处理猫和狗图像或停车标志与无停车标志图像时,将使用二进制交叉熵。 当我们有两个以上的类时(例如,配有床,椅子和沙发的家具店),将使用分类交叉熵。 稀疏分类交叉熵与分类交叉熵类似,不同之处在于,该类被其索引代替-例如,我们将传递 0、1 和 2 而不是将床,椅子和沙发作为类, 指定类时出现错误,可以使用稀疏分类交叉熵来解决此问题。 Keras 中还有许多其他损失函数。 有关更多详细信息,请参阅[这里](https://keras.io/losses/)
......
......@@ -13,7 +13,7 @@
* 在 Google 上创建您的第一个动作
* 在 Google 项目上创建操作
* 实现 Webhook
* 将 Webhook 部署到 Firebase 的Cloud Functions
* 将 Webhook 部署到 Firebase 的 Cloud Functions
* 在 Google 版本上创建动作
* 为对话应用创建 UI
* 集成 Dialogflow 代理
......@@ -279,7 +279,7 @@ exports.dialogflowFirebaseFulfillment = functions.https.onRequest(app);
我们在本节中开发的脚本需要部署到服务器以使其响应。 我们将为 Firebase 使用 Cloud Functions 部署此脚本并将其用作聊天机器人的 webhook 端点。
# 将 Webhook 部署到 Firebase 的Cloud Functions
# 将 Webhook 部署到 Firebase 的 Cloud Functions
既然我们已经完成了 Webhook 的逻辑创建,那么在 Firebase 上使用 Cloud Functions 部署它就非常简单。 请按照以下步骤操作:
......
......@@ -213,9 +213,9 @@ showim(image)
TensorFlow 团队的 Magenta 是一种非常流行的音频处理工具。
您可以通过[这里](https://magenta.tensorflow.org/)访问Magenta主页。 该工具允许快速生成音频和音频文件的转录。
您可以通过[这里](https://magenta.tensorflow.org/)访问 Magenta 主页。 该工具允许快速生成音频和音频文件的转录。
让我们简要地探讨Magenta。
让我们简要地探讨 Magenta。
# Magenta
......@@ -239,13 +239,13 @@ pip install magenta
!pip install -qU pyfluidsynth pretty_midi
```
3. 要将Magenta导入项目中,可以使用以下命令:
3. 要将 Magenta 导入项目中,可以使用以下命令:
```py
import magenta
```
或者,按照流行的惯例,仅加载Magenta的音乐部分,可以使用以下命令:
或者,按照流行的惯例,仅加载 Magenta 的音乐部分,可以使用以下命令:
```py
import magenta.music as mm
......@@ -255,7 +255,7 @@ import magenta.music as mm
让我们快速创作一些音乐。 我们将创建一些鼓声,然后将其保存到 MIDI 文件:
1. 我们首先需要创建一个`NoteSequence`对象。 在Magenta中,所有音乐都以音符序列的格式存储,类似于 MIDI 存储音乐的方式:
1. 我们首先需要创建一个`NoteSequence`对象。 在 Magenta 中,所有音乐都以音符序列的格式存储,类似于 MIDI 存储音乐的方式:
```py
from magenta.protobuf import music_pb2
......@@ -289,7 +289,7 @@ drums.tempos.add(qpm=60)
完成此操作后,我们现在准备导出 MIDI 文件。
4. 我们首先需要将Magenta`NoteSequence`对象转换为 MIDI 文件:
4. 我们首先需要将 Magenta`NoteSequence`对象转换为 MIDI 文件:
```py
mm.sequence_proto_to_midi_file(drums, 'drums_sample_output.mid')
......@@ -1106,6 +1106,6 @@ void fetchResponse() async {
# 总结
在本章中,我们通过将多媒体处理分解为图像,音频和视频处理的核心组件来进行研究,并讨论了一些最常用的处理工具。 我们看到了使用 OpenCV 执行图像或视频处理变得多么容易。 另外,我们看到了一个使用Magenta生成鼓音乐的简单示例。 在本章的下半部分,我们介绍了 LSTM 如何与时间序列数据一起使用,并构建了一个 API,该 API 可以从提供的样本文件生成器乐。 最后,我们将此 API 与 Flutter 应用结合使用,该应用是跨平台的,可以同时部署在 Android,iOS 和 Web 上。
在本章中,我们通过将多媒体处理分解为图像,音频和视频处理的核心组件来进行研究,并讨论了一些最常用的处理工具。 我们看到了使用 OpenCV 执行图像或视频处理变得多么容易。 另外,我们看到了一个使用 Magenta 生成鼓音乐的简单示例。 在本章的下半部分,我们介绍了 LSTM 如何与时间序列数据一起使用,并构建了一个 API,该 API 可以从提供的样本文件生成器乐。 最后,我们将此 API 与 Flutter 应用结合使用,该应用是跨平台的,可以同时部署在 Android,iOS 和 Web 上。
在下一章中,我们将研究如何使用**深度强化学习****DRL**)来创建可以玩棋盘游戏(例如国际象棋)的代理。
\ No newline at end of file
......@@ -345,7 +345,7 @@ Firebase 提供了可促进应用开发并帮助支持大量用户的工具。 F
4. 根据您的要求启用/禁用 Google Analytics(分析)。 通常建议您保持启用状态。
**Google Analytics** 是一种免费且不受限制的分析解决方案,可在 Firebase Crashlytics,Cloud Messaging,应用内消息传递,远程配置,A/B 测试,预测和Cloud Functions中实现目标定位,报告等功能。
**Google Analytics** 是一种免费且不受限制的分析解决方案,可在 Firebase Crashlytics,Cloud Messaging,应用内消息传递,远程配置,A/B 测试,预测和 Cloud Functions 中实现目标定位,报告等功能。
4. 如果您选择 Firebase Analytics,则还需要选择一个帐户:
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册