- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我对深度学习有点陌生,我一直在尝试使用深度学习方法进行自然语言处理并使用路透社数据集创建一个简单的情感分析器。这是我的代码:
import numpy as np
from keras.datasets import reuters
from keras.preprocessing.text import Tokenizer
from keras.models import Sequential
from keras.layers import Dense, Dropout, GRU
from keras.utils import np_utils
max_length=3000
vocab_size=100000
epochs=10
batch_size=32
validation_split=0.2
(x_train, y_train), (x_test, y_test) = reuters.load_data(path="reuters.npz",
num_words=vocab_size,
skip_top=5,
maxlen=None,
test_split=0.2,
seed=113,
start_char=1,
oov_char=2,
index_from=3)
tokenizer = Tokenizer(num_words=max_length)
x_train = tokenizer.sequences_to_matrix(x_train, mode='binary')
x_test = tokenizer.sequences_to_matrix(x_test, mode='binary')
y_train = np_utils.to_categorical(y_train, 50)
y_test = np_utils.to_categorical(y_test, 50)
model = Sequential()
model.add(GRU(50, input_shape = (49,1), return_sequences = True))
model.add(Dropout(0.2))
model.add(Dense(256, input_shape=(max_length,), activation='relu'))
model.add(Dropout(0.2))
model.add(Dense(50, activation='softmax'))
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['acc'])
model.summary()
history = model.fit(x_train, y_train, epochs=epochs, batch_size=batch_size, validation_split=validation_split)
score = model.evaluate(x_test, y_test)
print('Test Accuracy:', round(score[1]*100,2))
我不明白的是,为什么每次我尝试使用 GRU 或 LSTM 单元而不是密集单元时,我都会收到此错误:
ValueError: Error when checking input: expected gru_1_input to have 3 dimensions, but got array with shape (8982, 3000)
我在网上看到添加 return_sequences = True
可以解决该问题,但如您所见,问题仍然存在于我的情况中。
这种情况我该怎么办?
最佳答案
问题是 x_train
的形状是 (8982, 3000)
因此这意味着(考虑到预处理阶段)有 8982 个句子被编码为 one-hot词汇大小为 3000 的向量。另一方面,GRU(或 LSTM)层接受序列作为输入,因此其输入形状应为(batch_size、num_timesteps 或equence_length、feature_size)。目前,您拥有的特征是句子中特定单词的存在 (1) 或不存在 (0)。因此,要使其与 GRU 配合使用,您需要向 x_train
和 x_test
添加第三个维度:
x_train = np.expand_dims(x_train, axis=-1)
x_test = np.expand_dims(x_test, axis=-1)
然后删除该 return_sequences=True
并将 GRU 的输入形状更改为 input_shape=(3000,1)
。通过这种方式,您可以告诉 GRU 层您正在处理长度为 3000 的序列,其中每个元素都包含一个特征。 (作为旁注,我认为您应该将 vocab_size
传递给 Tokenizer
的 num_words
参数。这表示词汇中的单词数。相反,将 max_length
传递给 load_data
的 maxlen
参数,以限制句子的长度。)
但是,我认为如果您使用Embedding layer,您可能会得到更好的结果。作为第一层,位于 GRU 层之前。这是因为目前对句子进行编码的方式没有考虑句子中单词的顺序(它只关心它们的存在)。因此,向 GRU 或 LSTM 层(依赖于序列中元素的顺序)提供这种表示形式是没有意义的。
关于python - Keras GRU/LSTM层输入维度错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51838583/
我是 ML 框架和 Python 的新手。我从 https://github.com/xiaochus/TrafficFlowPrediction 获得了 keras-tensorflow 项目的源代
我是 ML 框架和 Python 的新手。我从 https://github.com/xiaochus/TrafficFlowPrediction 获得了 keras-tensorflow 项目的源代
我对深度学习有点陌生,我一直在尝试使用深度学习方法进行自然语言处理并使用路透社数据集创建一个简单的情感分析器。这是我的代码: import numpy as np from keras.dataset
我将Keras代码转换为PyTorch,是因为我比前者更熟悉后者。但是,我发现它不是在学习(或只是勉强学习)。 下面,我提供了几乎所有的PyTorch代码,包括初始化代码,以便您可以自己尝试。您唯一需
我似乎无法理解 keras GRU 层中返回状态和返回序列之间的差异。 由于 GRU 单元没有单元状态(它等于输出),那么返回状态与 keras GRU 层中的返回序列有何不同? 更具体地说,我构建了
这是我正在查看的 API,https://pytorch.org/docs/stable/nn.html#gru 它输出: output形状(seq_len,batch,num_directions
我安装了 dgraph gru 用于面试 go get github.com/dgraph-io/gru cd $GOPATH/src/github.com/dgraph-io/gru git che
Tensorflow 中的二元分类问题: 我已经阅读了在线教程并尝试使用门控循环单元 (GRU) 将其应用于实时问题。我已经尝试了所有我知道的改进分类的可能性。 1) 开始添加堆叠的 RNN(GRU)
我正在尝试使用 Tensorflow 实现一些自定义 GRU 单元。我需要堆叠这些单元格,并且我想继承 tensorflow.keras.layers.GRU 。但是,在查看源代码时,我注意到只能将
我正在尝试使用训练有素的 Keras 序列模型 (GRU) 来预测一些新的数据样本,但在创建时间序列生成器时遇到一些问题。 在训练过程中,使用 model.predict_generator() 预测
我正在使用 Mycroft AI 唤醒词检测,并试图了解网络的维度。以下几行显示了 Keras 中的模型: model = Sequential() model.add(GRU( pa
目标 尝试在多变量时间序列数据集上运行 LSTM 自动编码器: X_train (200, 23, 178) - X_val (100, 23, 178) - X_test (100, 23, 178
在 Keras 书籍 (F. Chollet) 中关于耶拿天气数据集(第 #6 章)的 GRU 架构训练之后,我很难理解预测阶段: 最后一层 - 密集,无激活 - 按预期输出数字流:尺寸:行数 X 1
我正在尝试在 Keras 中训练单词级别的语言模型。 我有 X 和 Y,形状都是 (90582L, 517L) 当我尝试拟合这个模型时: print('Build model...') model =
根据 Theano 官方教程(http://deeplearning.net/tutorial/code/lstm.py)中提供的 LSTM 代码,我更改了 LSTM 层代码(即函数 lstm_lay
我想在一些时间序列数据上运行 GRU 单元,根据最后一层的激活对它们进行聚类。我对 GRU 单元实现做了一个小改动 def __call__(self, inputs, state, scope=No
默认只返回最后一个state,所以一次输入一个step的input ?
我正在查看 Tensorflow text_generation 教程 (https://www.tensorflow.org/tutorials/text/text_generation),想知道为
为什么GRU层的参数个数是9600? 不应该是 ((16+32)*32 + 32) * 3 * 2 = 9,408 吗? 或者,重新排列, 32*(16 + 32 + 1)*3*2 = 9408 mo
以下是 Tensorflow 的代码 GRUCell当先前的隐藏状态与序列中的当前输入一起提供时,单元显示了获得更新隐藏状态的典型操作。 def __call__(self, inputs, st
我是一名优秀的程序员,十分优秀!