我的文本数据集具有相同数量的标签 - 0,1,2,3,4.我使用我的数据集在他们的网站上运行了Keras binary classification示例LSTM(imdb示例),并将编译行更改为
"model.compile(loss='categorical_crossentropy', optimizer='adam', class_mode="categorical")"
Run Code Online (Sandbox Code Playgroud)
但该模型仅预测一个类别,即20%准确性.
你可以帮我修理一下/根据需要更改设置吗?
我现在正在尝试为基于LSTM的NN准备输入数据.我有一些大量的文本文档,我想要的是为每个文档制作序列向量,以便我能够将它们作为列车数据提供给LSTM RNN.
我糟糕的做法:
import re
import numpy as np
#raw data
train_docs = ['this is text number one', 'another text that i have']
#put all docs together
train_data = ''
for val in train_docs:
train_data += ' ' + val
tokens = np.unique(re.findall('[a-z?-?0-9]+', train_data.lower()))
voc = {v: k for k, v in dict(enumerate(tokens)).items()}
Run Code Online (Sandbox Code Playgroud)
然后brutforce用"voc"词典替换每个doc.
有没有可以帮助完成这项任务的库?
我试图在 siaseme LSTM 中重现结果以比较这里两个句子的语义相似性:- https://github.com/dhwajraj/deep-siamese-text-similarity
我正在使用 tensorflow 1.4 & python 2.7
train.py 工作正常。为了评估模型,我创建了一个 match_valid.tsv 文件,它是那里可用的“train_snli.txt”的子集。我修改了 input_helpers.py 文件中的 getTsvTestData 函数。
def getTsvTestData(self, filepath):
print("Loading testing/labelled data from "+filepath+"\n")
x1=[]
x2=[]
y=[]
# positive samples from file
for line in open(filepath):
l=line.strip().split("\t")
if len(l)<3:
continue
x1.append(l[1].lower()) # text
x2.append(l[0].lower()) # text
y.append(int(l[2])) # similarity score 0 or 1
return np.asarray(x1),np.asarray(x2),np.asarray(y)
Run Code Online (Sandbox Code Playgroud)
我从 eval.py 中的这部分代码中收到错误
for db in batches:
x1_dev_b,x2_dev_b,y_dev_b = zip(*db)
#x1_dev_b = tf.convert_to_tensor(x1_dev_b,)
print("type x1_dev_b {}".format(type(x1_dev_b))) # tuple
print("type x2_dev_b {}".format(type(x2_dev_b))) # …Run Code Online (Sandbox Code Playgroud) 我如何将规则(如国际象棋规则)应用于神经网络,以便网络不会预测/训练无效动作?
当我尝试使用 keras-2.1.3 和 theano-1.0.1 https://github.com/marcellacornia/sam/blob/master/attentive_convlstm.py运行此代码时
def get_initial_states(self, x):
initial_state = K.sum(x, axis=1)
initial_state = K.conv2d(initial_state, K.zeros((self.nb_filters_out, self.nb_filters_in, 1, 1)), border_mode='same')
initial_states = [initial_state for _ in range(len(self.states))]
return initial_states
Traceback (most recent call last):
File "main.py", line 63, in <module>
m = Model(input=[x, x_maps], output=sam_resnet([x, x_maps]))
File "E:\sam-master\models.py", line 136, in sam_resnet
nb_cols=3, nb_rows=3)(att_convlstm)
File "C:\ProgramData\Anaconda3\lib\site-packages\keras\engine\topology.py", line 617, in __call__
output = self.call(inputs, **kwargs)
File "E:\sam-master\attentive_convlstm.py", line 143, in call
initial_states = self.get_initial_states(x)
File "E:\sam-master\attentive_convlstm.py", line 42, in get_initial_states …Run Code Online (Sandbox Code Playgroud) 我是 Keras 的新手,想知道如何使用不同长度的(中断)时间序列训练 LTSM。例如,考虑从第 1 天到第 10 天的连续系列和从第 15 天到第 20 天的另一个连续系列。简单地将它们连接到单个系列可能会产生错误的结果。我看到基本上有两种选择可以使它们成形(batch_size, timesteps, output_features):
通过一些默认值 (0) 扩展较短的系列,即对于上面的示例,我们将有以下批次:
d1, ..., d10
d15, ..., d20, 0, 0, 0, 0, 0
Run Code Online (Sandbox Code Playgroud)计算长度的 GCD,将系列切成小块,并使用有状态的 LSTM,即:
d1, ..., d5
d6, ..., d10
reset_state
d15, ..., d20
Run Code Online (Sandbox Code Playgroud)还有其他/更好的解决方案吗?用完整序列训练无状态 LSTM 是否等同于用片段训练有状态 LSTM?
阅读了几篇文章后,我仍然对从BiLSTM获取最后的隐藏状态的实现的正确性感到困惑。
最后一个来源(4)的方法对我来说似乎是最干净的方法,但是我仍然不确定我是否正确理解了线程。我是否在使用LSTM和反向LSTM中正确的最终隐藏状态?这是我的实现
# pos contains indices of words in embedding matrix
# seqlengths contains info about sequence lengths
# so for instance, if batch_size is 2 and pos=[4,6,9,3,1] and
# seqlengths contains [3,2], we have batch with samples
# of variable length [4,6,9] and [3,1]
all_in_embs = self.in_embeddings(pos)
in_emb_seqs = pack_sequence(torch.split(all_in_embs, seqlengths, dim=0))
output,lasthidden = self.rnn(in_emb_seqs)
if not self.data_processor.use_gru:
lasthidden = lasthidden[0]
# u_emb_batch has shape batch_size x embedding_dimension
# sum last state from forward …Run Code Online (Sandbox Code Playgroud) 我从 Keras 收到非常令人困惑的错误消息。我使用以下模型并将形状传递给它 input (num_examples, n, 1)。
def create_model():
model = Sequential()
model.add(LSTM(64, input_shape=(n,1), return_sequences=False))
model.add(Dense(units=n, activation='linear'))
return model
Run Code Online (Sandbox Code Playgroud)
我收到此错误消息:
ValueError: Error when checking target: expected dense_16 to have 2 dimensions, but got array with shape (11030, 50, 1)。
但这怎么可能呢?如果我使用model.summary(),则显示LSTM输出具有以下形状:(None, 64)。那么它如何将具有形状的数组传递(11030, 50, 1)给 Dense 层呢?
此外,如果我尝试model.add(Flatten())在 LSTM 和 Dense 之间添加,我会收到此错误:ValueError: Input 0 is incompatible with layer flatten_3: expected min_ndim=3, found ndim=2.
因此,它将 2D 传递给 Flatten,但是它怎么可能将 3D …
我喜欢使用多层 ConvLSTM 模型来检查我的模型。我的训练数据的形状是
trainX.shape (5000, 200, 4) # testX.shape (2627, 200, 4)
Run Code Online (Sandbox Code Playgroud)
以下是我的工作正常的代码
print('trainX.shape', trainX.shape) # trainX.shape (5000, 200, 4)
print('testX.shape', testX.shape) # testX.shape (2627, 200, 4)
# reshape into subsequences (samples, time steps, rows, cols, channels)
samples, n_features = trainX.shape[0], trainX.shape[2]
n_steps, n_length = 8, 25
trainX = trainX.reshape((samples, n_steps, 1, n_length, n_features)) #
print('trainX.shape', trainX.shape) # (5000, 8, 1, 25, 4)
testX = testX.reshape((testX.shape[0], n_steps, 1, n_length, n_features))
print('testX.shape', testX.shape) # (2627, 8, 1, 25, 4)
# define …Run Code Online (Sandbox Code Playgroud) 我想用 Keras 创建一个带有两个 LSTM 层的模型。但是,以下代码会生成错误:
from keras.models import Sequential
from keras.layers import LSTM, Dropout, Activation
from keras.callbacks import ModelCheckpoint
from keras.utils import to_categorical
model = Sequential()
model.add(LSTM(5, activation="softmax"))
model.add(LSTM(5, activation="softmax"))
model.compile(loss='categorical_crossentropy',
optimizer='adam',
metrics=['categorical_accuracy'])
# These values are to be predicted.
directions = [-2, -1, 0, 1, 2]
# Sample data. We have three time steps, one
# feature per timestep, and one resulting value.
data = [[[[1], [2], [3]], -1],
[[[3], [2], [1]], 2],
[[[4], [5], [7]], 1],
[[[1], [-1], …Run Code Online (Sandbox Code Playgroud)