LSTM 与 keras
LSTM with keras
我有一些训练数据 x_train
和这个 x_train
的一些相应标签 y_train
。以下是 x_train
和 y_train
的构造方式:
train_x = np.array([np.random.rand(1, 1000)[0] for i in range(10000)])
train_y = (np.random.randint(1,150,10000))
train_x
有 10000 行,每行有 1000 列。
train_y
对 train_x 中的每个样本都有一个介于 1 和 150 之间的标签,并代表每个 train_x 样本的代码。
我还有一个名为 sample 的样本,它是 1 行 1000 列,我想用它来对此 LSTM 模型进行预测。此变量定义为
sample = np.random.rand(1,1000)[0]
我正在尝试使用 Keras 训练和预测此数据的 LSTM。我想接受这个特征向量并使用这个 LSTM 来预测 1 到 150 范围内的代码之一。我知道这些是随机数组,但我不能 post 我拥有的数据。我尝试了以下我认为应该有效的方法,但遇到了一些问题
model = Sequential()
model.add(LSTM(output_dim = 32, input_length = 10000, input_dim = 1000,return_sequences=True))
model.add(Dense(150, activation='relu'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
history = model.fit(train_x, train_y,
batch_size=128, nb_epoch=1,
verbose = 1)
model.predict(sample)
对此管道的任何帮助或调整都会很棒。我不确定 output_dim
是否正确。我想在 1000 维数据的每个样本上训练 LSTM,然后重现 1 到 150 范围内的特定代码。谢谢。
我发现您至少需要更改三处:
更改此行:
model.add(Dense(150, activation='relu'))
至:
model.add(Dense(150, activation='softmax'))
因为离开 'relu'
因为激活会使你的输出不受限制,而它需要有一个概率解释(因为你使用 categorical_crossentropy
)。
更改损失或目标:
当您使用 categorical_crossentropy
时,您需要将目标更改为长度为 150 的 one-hot 编码 向量。另一种方法是离开目标,但是将损失更改为 sparse_categorical_crossentropy
.
更改目标范围:
Keras
有一个基于 0 的数组索引(如 Python
、C
和 C++
,因此您的值应该在 [0, 150)
范围内[1, 150]
.
我有一些训练数据 x_train
和这个 x_train
的一些相应标签 y_train
。以下是 x_train
和 y_train
的构造方式:
train_x = np.array([np.random.rand(1, 1000)[0] for i in range(10000)])
train_y = (np.random.randint(1,150,10000))
train_x
有 10000 行,每行有 1000 列。
train_y
对 train_x 中的每个样本都有一个介于 1 和 150 之间的标签,并代表每个 train_x 样本的代码。
我还有一个名为 sample 的样本,它是 1 行 1000 列,我想用它来对此 LSTM 模型进行预测。此变量定义为
sample = np.random.rand(1,1000)[0]
我正在尝试使用 Keras 训练和预测此数据的 LSTM。我想接受这个特征向量并使用这个 LSTM 来预测 1 到 150 范围内的代码之一。我知道这些是随机数组,但我不能 post 我拥有的数据。我尝试了以下我认为应该有效的方法,但遇到了一些问题
model = Sequential()
model.add(LSTM(output_dim = 32, input_length = 10000, input_dim = 1000,return_sequences=True))
model.add(Dense(150, activation='relu'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
history = model.fit(train_x, train_y,
batch_size=128, nb_epoch=1,
verbose = 1)
model.predict(sample)
对此管道的任何帮助或调整都会很棒。我不确定 output_dim
是否正确。我想在 1000 维数据的每个样本上训练 LSTM,然后重现 1 到 150 范围内的特定代码。谢谢。
我发现您至少需要更改三处:
更改此行:
model.add(Dense(150, activation='relu'))
至:
model.add(Dense(150, activation='softmax'))
因为离开
'relu'
因为激活会使你的输出不受限制,而它需要有一个概率解释(因为你使用categorical_crossentropy
)。更改损失或目标:
当您使用
categorical_crossentropy
时,您需要将目标更改为长度为 150 的 one-hot 编码 向量。另一种方法是离开目标,但是将损失更改为sparse_categorical_crossentropy
.更改目标范围:
Keras
有一个基于 0 的数组索引(如Python
、C
和C++
,因此您的值应该在[0, 150)
范围内[1, 150]
.