- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直在阅读 Jonathan Hui 博客 ( https://jhui.github.io/2018/02/11/Keras-tutorial/ ) 中发布的 Keras 教程,正如他所说,该教程直接取自官方 Keras 文档。
有些代码我不太理解,这些与嵌入层的尺寸有关。
让我们看两个例子:
第一个示例:
from keras.models import Sequential
from keras.layers import Dense, Dropout
from keras.layers import Embedding
from keras.layers import LSTM
import numpy as np
max_features = 10
x_train = np.random.random((1000, max_features))
y_train = np.random.randint(2, size=(1000, 1))
x_test = np.random.random((100, max_features))
y_test = np.random.randint(2, size=(100, 1))
model = Sequential()
model.add(Embedding(max_features, output_dim=256))
model.add(LSTM(128))
model.add(Dropout(0.5))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy',
optimizer='rmsprop',
metrics=['accuracy'])
model.fit(x_train, y_train, batch_size=16, epochs=10)
score = model.evaluate(x_test, y_test, batch_size=16)
这里 X 是一个包含随机数的矩阵 (1000 x 10),其中每个随机数都可能是唯一的。然而,嵌入层接收输入维度 max_features 作为参数(即本例中的 10)。但是,当我们将输入维度传递给嵌入层时,我们不是在计算正在编码的变量的唯一可能值吗?换句话说,n 不是基于关于其值所源自的空间维数(例如词汇表)的假设而对变量进行虚拟化所产生的列数吗?
第二个示例:
import keras
import numpy as np
from keras.layers import Input, Embedding, LSTM, Dense
from keras.models import Model
# The first input
main_input = Input(shape=(100,), dtype='int32', name='main_input')
# This embedding layer will encode the input sequence
# into a sequence of dense 512-dimensional vectors.
x = Embedding(output_dim=512, input_dim=10000, input_length=100)(main_input)
# A LSTM will transform the vector sequence into a single vector,
# containing information about the entire sequence
lstm_out = LSTM(32)(x)
auxiliary_output = Dense(1, activation='sigmoid', name='aux_output')(lstm_out)
# Second input
auxiliary_input = Input(shape=(5,), name='aux_input')
x = keras.layers.concatenate([lstm_out, auxiliary_input])
# We stack a deep densely-connected network on top
x = Dense(64, activation='relu')(x)
x = Dense(64, activation='relu')(x)
x = Dense(64, activation='relu')(x)
# And finally we add the main logistic regression layer
main_output = Dense(1, activation='sigmoid', name='main_output')(x)
model = Model(inputs=[main_input, auxiliary_input], outputs=[main_output, auxiliary_output])
model.compile(optimizer='rmsprop', loss='binary_crossentropy',
loss_weights=[1., 0.2])
headline_data = np.random.random((1000, 100))
additional_data = np.random.random((1000, 5))
labels = np.random.random((1000, 1))
model.fit([headline_data, additional_data], [labels, labels],
epochs=50, batch_size=32)
此处输入维度设置为 10,000,但我们再次处理可能具有 1000 x 100 = 100,000 个唯一值的输入 (headline_data)。我们如何使用 10,000 维输入空间来表示这 100,000 个值?
最佳答案
看来您误解了嵌入层。我简单描述一下:
您可以将嵌入层视为查找表:它采用整数作为输入,并返回与给定整数对应的向量 作为输出。因此,在 NLP 的背景下,这些整数通常对应于我们根据训练数据创建的字典中的标记或单词。例如,该字典可能如下所示:
hi: 1
you: 2
hello: 3
can: 4
are: 5
how: 6
...
例如,单词“hi”已被分配数字“1”。现在,如果我们想要表示句子 “hi how are you”
,它将相当于 [1, 6, 5, 2]
。这个整数向量是我们模型的输入,它将作为输入提供给嵌入层。作为返回,嵌入层将给出相应的向量。例如,在训练期间的某个时刻,嵌入层中的嵌入向量可能如下所示:
1: [0.43, 0.09, 0.13, 1.65]
2: [0.43, 0.11, 0.23, -1.75]
3: [-0.88, 0.19, 2.33, 0.55]
4: [0.93, 0.79, -0.23, 2.05]
5: [0.27, 0.61, 0.10, 0.85]
6: [0.03, 1.09, -3.19, 2.25]
...
因此,对于“hi how are you”
,它返回以下向量:
[[0.43, 0.09, 0.13, 1.65],
[0.03, 1.09, -3.19, 2.25],
[0.27, 0.61, 0.10, 0.85],
[0.43, 0.11, 0.23, -1.75]]
现在您可以更好地理解嵌入层的这些参数对应的内容:input_dim
实际上是查找表中的条目数,相当于唯一的数量字典中的单词,output_dim
是嵌入层中嵌入向量的维度(即长度)(在上面的示例中,每个向量的长度为4,因此 output_dim=4
)。
顺便说一句,您提供的两个示例代码都不起作用。这是因为模型的输入(即 x_train
和 x_test
)不包含整数;相反,它们是 float 数组(由于使用np.random.random
),当您将嵌入层作为模型的第一层时,这是 Not Acceptable 。
关于python - 关于Keras中基于官方文档的Embeddings的输入维度的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56584678/
今天上午据小米穿戴官方消息,为了保障更好的使用体验和更充足的备货,小米手表尊享版将延期至2020年2月开售。 据了解,早在今年11月初小米正式发布小米手表,共有标准版和尊享版两个版本,价格分别为1
我的意思是,如果我可以运行例如官方 docker 镜像 DEBIAN 并在此之上 运行具有相同支持架构的官方 docker 镜像 NGINX,例如Linux x86-64? 它会像我以非 docker
在 .NET 3.5 中,大量扩展方法被添加到核心代码库中。我注意到在 MSDN 中,IEnumerable<> 等添加了有关扩展方法的部分。 是否有已添加的所有扩展方法的列表以供引用? 编辑感谢您的
在vertx指南中,链接异步调用的顺序组合如下所示: FileSystem fs = vertx.fileSystem(); Future startFuture = Future.future();
neo4j 文档有 this page about creating unit tests for neo4j. 本质上它建议我们创建一个模拟数据库使用 graphDb = new TestGraph
我是 C++ 的新手,我想了解链接器是如何正式工作的。我正在使用 Linux Mint 16。是否存在 ld 链接器官方规范? 最佳答案 您可能会对链接器和共享库有更多了解 here还有here是 l
已关闭。此问题旨在寻求有关书籍、工具、软件库等的建议。不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以
我想创建一个自定义 Android 汽车应用程序,而不会分散驾驶员的注意力。我浏览了很多博客和网站,发现自 3.0 版本以来曾经有一些自定义应用程序被屏蔽。这些自定义应用程序的开发人员使用的是非官方的
我刚找到 this Project就像。嘿。为什么不尝试使用它呢? 所以。刚刚下载它(我没有做任何更改!),打开 Android Studio,运行它,然后遇到以下问题。 error: cannot
Docker 的官方 Postgres 镜像使用两个环境变量:POSTGRES_USER 和 POSTGRES_PASSWORD 参数化数据库创建: https://registry.hub.dock
我刚刚从 Python download page 下载了 Python 2.7.3 64 位安装程序我想验证签名。所以我需要导入 key ,我的首选方法是从受信任的 key 服务器获取它们。 Pyt
当我安装 Andoird 5.0 SDK 并导入 Camera2Basic 示例源代码时。CameraDevice.StateListener 和 CameraCaptureSession.State
在Design Philosophy节official Fragment guide ,它说: You should design each fragment as a modular and reu
我正在使用 Roslyn 编写一个应用程序来从语法和语义上分析 C# 源代码。对于正在分析的源代码中定义的每种类型,我想存储它是引用类型(类)、值类型(结构)还是接口(interface)。 类型的类
有没有官方的 XSLT 验证器,比如 http://validator.w3.org/用于 HTML 和 XHTML? 我知道http://validator.w3.org/也可用于验证 XML 和
我主要使用 C++ 进行科学计算,最近我一直将自己限制在一个非常类似于 C 的 C++ 特性子集;即,除了复杂和 STL 之外没有类/继承,模板仅用于查找/替换各种替换,以及其他一些我无法用语言表达的
我了解到Google会根据访问它的浏览器/设备来自动提供 TTF , EOT , WOFF 或 SVG 字体文件。 现在,我计划从服务器本身托管和提供字体文件,为此,我首先必须下载Web字体的所有文件
他们有什么不同? 例如,与官方 SDK 相比,选择 libfreenect 或 OpenNI+SensorKinect 有什么优势,反之亦然? 有什么缺点? 最佳答案 请注意,以下答案是按日期计算的,
我想使用官方的 Hashicorp 镜像来运行 Terraform 而不是手动安装。我已经关注了 dockerhub 上的文档,但没有关于如何在何处安装卷的任何详细信息 - 例如在当前目录中使用“ma
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 5 年前。
我是一名优秀的程序员,十分优秀!