标签: lstm

ValueError:lstm_1 层的输入 0 与该层不兼容:预期 ndim=3,发现 ndim=2。收到完整形状:(无,64)

我一直很难理解这个错误消息的含义。我看过很多帖子,比如

Keras LSTM 层的 4D 输入

ValueError: 层顺序的输入 0 与层不兼容: : 预期 min_ndim=4, 发现 ndim=3

ValueError:输入 0 与层 lstm_13 不兼容:预期 ndim=3,发现 ndim=4

层顺序的输入0与期望ndim=3的层不兼容,发现ndim=2。收到完整形状:[无,1]

预期 ndim=3,发现 ndim=2

但他们似乎都没有解决我的问题。

我有

batch_train_dataset = tf.data.Dataset.from_tensor_slices((train_features, train_labels)).shuffle(512).batch(batch_size)

for i,x in enumerate(batch_train_dataset):
  print("x[0].ndim: ", x[0].ndim)
  print("x[0].shape: ", x[0].shape)
  print("x[1].shape: ", x[1].shape)
  if i==0:
    break
##########OUTPUT###########
x[0].ndim:  3
x[0].shape:  (64, 32, 1000)
x[1].shape:  (64,)
Run Code Online (Sandbox Code Playgroud)

我的个人数据具有一个形状,(64,32,1000)其中64是batch_size,32是时间步长,1000是许多特征。

这是我的模型。

num_classes = len(index_to_label)

lstm_model = tf.keras.Sequential([
    tf.keras.layers.Masking(mask_value=0.0), # DO NOT REMOVE THIS LAYER …
Run Code Online (Sandbox Code Playgroud)

python lstm keras tensorflow

1
推荐指数
1
解决办法
4394
查看次数

Pytorch RuntimeError:预期标量类型 Double 但发现 Float

我刚刚开始学习 Pytorch 并创建了我的第一个 LSTM。数据集是时间序列数据。下面是训练代码。使用 .double() 并不能修复错误。它在Windows 11环境中运行。

import torch
import torch.nn as nn
from torch.optim import SGD
import math
import numpy as np

class Predictor(nn.Module):
    def __init__(self, inputDim, hiddenDim, outputDim):
        super(Predictor, self).__init__()

        self.rnn = nn.LSTM(input_size = inputDim,
                            hidden_size = hiddenDim,
                            batch_first = True)
        self.output_layer = nn.Linear(hiddenDim, outputDim)
    
    def forward(self, inputs, hidden0=None):
        output, (hidden, cell) = self.rnn(inputs, hidden0)
        output = self.output_layer(output[:, -1, :])

        return output

def mkDataSet(train_x, train_y=None):

    t_train_x = []
    t_train_y = []


    sequence_length = 50
    data_length = train_x.shape[0]

    for …
Run Code Online (Sandbox Code Playgroud)

python lstm pytorch

1
推荐指数
1
解决办法
4710
查看次数

Tensorflow LSTM 状态和权重的默认初始化?

我在 Tensorflow 中使用 LSTM 单元。

lstm_cell = tf.contrib.rnn.BasicLSTMCell(lstm_units)
Run Code Online (Sandbox Code Playgroud)

我想知道如何初始化权重和状态,或者更确切地说,Tensorflow 中 LSTM 单元(状态和权重)的默认初始化器是什么?

有没有一种简单的方法来手动设置初始化程序?

注意:tf.get_variable()据我从文档中了解到,使用了 glorot_uniform_initializer 。

python initializer lstm tensorflow recurrent-neural-network

0
推荐指数
1
解决办法
4097
查看次数

为什么更多的纪元会让我的模型变得更糟?

我的大部分代码都是基于这篇文章,我所问的问题在那里很明显,而且在我自己的测试中也是如此。它是一个具有 LSTM 层的顺序模型。

这里下面是对来自模型的真实数据的预测,该模型是使用一个时期的大约 20 个小数据集进行训练的。

这是另一个图,但这次模型使用更多数据训练了 10 个时期。

在此输入图像描述

造成这种情况的原因是什么以及如何解决?另外,我发送的第一个链接在底部显示了相同的结果 - 1 epoch 效果很好,而 3500 epoch 则很糟糕。

此外,当我针对更高的数据计数但只有 1 个时期运行训练课程时,我得到了与第二个图相同的结果。

什么可能导致此问题?

python machine-learning lstm keras tensorflow

0
推荐指数
1
解决办法
4927
查看次数

如何将RNN与CNN结合?

我正在尝试将 LSTM 与 CNN 结合使用,但由于错误而卡住了。这是我试图实现的模型:

model=Sequential()
model.add(Conv2D(32, (3, 3), input_shape=(28, 28,3), activation='relu'))
model.add(Conv2D(32, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(32, (3, 3), activation='relu'))
model.add(Conv2D(32, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Flatten())
model.add(Dense(32, activation='relu'))
model.add(LSTM(128, return_sequences=True,input_shape=(1,32), activation='relu'))
model.add(LSTM(256))
model.add(Dropout(0.25))
model.add(Dense(37))
model.compile(loss='categorical_crossentropy', optimizer='adam')
Run Code Online (Sandbox Code Playgroud)

错误发生在第一个 LSTM 层:

ERROR: Input 0 is incompatible with layer lstm_12: expected ndim=3, found ndim=2
Run Code Online (Sandbox Code Playgroud)

python deep-learning conv-neural-network lstm keras

0
推荐指数
1
解决办法
1162
查看次数

TensorFlow Keras 返回多个预测,同时期待一个

我正在学习 TensorFlow 和 LSTM,我想知道为什么当我训练它返回一个值时,我的预测输出有多个值。我的目标是在使用数组进行情感分析训练后获得 0 到 1 之间的单个值。

训练输入数据如下所示:

[[59, 21, ... 118, 194], ... [12, 110, ... 231, 127]]
Run Code Online (Sandbox Code Playgroud)

所有输入数组的长度相同,用 0 填充。训练目标数据如下所示:

[1.0, 0.5, 0.0, 1.0, 0.0 ...]
Run Code Online (Sandbox Code Playgroud)

模型:

model = Sequential()
model.add(Embedding(input_length, 64, mask_zero=True))
model.add(LSTM(100))
model.add(Dense(1, activation=tf.nn.sigmoid))
Run Code Online (Sandbox Code Playgroud)

为什么预测似乎一次评估每个单独的值而不是整个数组?

model.predict([192])
# Returns [[0.5491102]]
model.predict([192, 25])
# Returns [[0.5491102, 0.4923803]]
model.predict([192, 25, 651])
# Returns [[0.5491102, 0.4923803, 0.53853387]]
Run Code Online (Sandbox Code Playgroud)

我不想取输出的平均值,因为输入数组中的值之间的关系对于情感分析很重要。如果我正在训练预测单个值,我不明白为什么不输出单个值。我是 TensorFlow、Keras 和分层神经网络的新手,所以我确定我遗漏了一些明显的东西。

python machine-learning lstm keras tensorflow

0
推荐指数
1
解决办法
3666
查看次数

在验证和测试集中是否需要初始化 lstm 隐藏状态?或者只是将其重置为零

在训练时,最好初始化隐藏状态而不是将其设置为 0。但我想知道在验证和测试时初始化隐藏状态是好是坏。谢谢

neural-network lstm pytorch

0
推荐指数
1
解决办法
2491
查看次数

ValueError : 层 lstm 的输入 0 与层不兼容:预期 ndim=3,发现 ndim=2。收到的完整形状:[无,18]

我是 Keras 的新手,我正在尝试构建一个供个人使用/未来学习的模型。我刚开始使用 python,我想出了这段代码(在视频和教程的帮助下)。我有 16324 个实例的数据,每个实例由 18 个特征和 1 个因变量组成。

import pandas as pd
import os
import time
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout, LSTM, BatchNormalization
from tensorflow.keras.callbacks import TensorBoard, ModelCheckpoint

EPOCHS = 10
BATCH_SIZE = 64
NAME = f"-TEST-{int(time.time())}"

df = pd.read_csv("EntryData.csv", names=['1SH5', '1SHA', '1SA5', '1SAA', '1WH5', '1WHA', '2SA5', '2SAA', '2SH5', '2SHA', '2WA5', '2WAA', '3R1', '3R2', '3R3', '3R4', '3R5', '3R6', 'Target'])

df_val = 14554 

validation_df = df[df.index > df_val]
df = df[df.index …
Run Code Online (Sandbox Code Playgroud)

python neural-network lstm keras tensorflow

0
推荐指数
1
解决办法
6211
查看次数

Tensorflow LSTM 返回什么?

我正在使用编码器/解码器模式编写德语-> 英语翻译器,其中编码器通过将其最后一个 LSTM 层的状态输出作为解码器的 LSTM 的输入状态传递来连接到解码器。

但是,我被卡住了,因为我不知道如何解释编码器 LSTM 的输出。一个小例子:

tensor = tf.random.normal( shape = [ 2, 2, 2 ])
lstm = tf.keras.layers.LSTM(units=4, return_sequences=True, return_state=True )
result = lstm( ( tensor )
print( "result:\n", result )
Run Code Online (Sandbox Code Playgroud)

在 Tensorflow 2.0.0 中执行这个会产生:

result:
[
<tf.Tensor: id=6423, shape=(2, 2, 3), dtype=float32, numpy=
array([[[ 0.05060377, -0.00500009, -0.10052835],
        [ 0.01804499,  0.0022153 ,  0.01820258]],
       [[ 0.00813384, -0.08705016,  0.06510869],
        [-0.00241707, -0.05084776,  0.08321179]]], dtype=float32)>,
<tf.Tensor: id=6410, shape=(2, 3), dtype=float32, numpy=
array([[ 0.01804499,  0.0022153 ,  0.01820258],
       [-0.00241707, -0.05084776,  0.08321179]], dtype=float32)>, …
Run Code Online (Sandbox Code Playgroud)

python lstm tensorflow

0
推荐指数
1
解决办法
107
查看次数