gpt4 book ai didi

tensorflow - LSTM 和 GRU 与 SimpleRNN : "Type inference failed."

转载 作者:行者123 更新时间:2023-12-05 03:20:32 25 4
gpt4 key购买 nike

我创建了一个非常简单的顺序模型,但我的数据很不方便(每个样本都是不同长度的序列)。没关系,因为每个数据项都相对重要,所以将每个序列作为唯一批处理进行训练效果很好。一切正常。

模型看起来像:

Input(shape=(None, 42*3)) # I have a very preliminary dataset of 8 sequences of ~5000 frames holding 42 x/y/z floats.
Dense(256)
Dense(256)
SimpleRNN(61, return_sequences=True)

这就是全部。当我训练 100 个 epoch 时,一切都很顺利,在我的 GTX 980ti 上每个 epoch 可能需要 45 秒。

但是,当我尝试将 SimpleRNN 换成 GRU 或 LSTM 时——在这种情况下应该是直接替换(如果这是错误的,请纠正我!),我开始收到一个奇怪的错误:

2022-07-27 21:18:15.989066: W tensorflow/core/common_runtime/forward_type_inference.cc:231] Type inference failed. This indicates an invalid graph that escaped type checking. Error message: INVALID_ARGUMENT: expected compatible input types, but input 1:
type_id: TFT_OPTIONAL
args {
type_id: TFT_PRODUCT
args {
type_id: TFT_TENSOR
args {
type_id: TFT_LEGACY_VARIANT
}
}
}
is neither a subtype nor a supertype of the combined inputs preceding it:
type_id: TFT_OPTIONAL
args {
type_id: TFT_PRODUCT
args {
type_id: TFT_TENSOR
args {
type_id: TFT_FLOAT
}
}
}

while inferring type of node 'cond_40/output/_19'

此外,训练进行得更快 - 第一个时期大约 4-5 秒,然后每个时期 1 秒。这种加速让我怀疑“这里有问题”。

我的问题:我可以安全地忽略此错误/警告吗?如果不是,出了什么问题,我该如何解决?

附带问题:GRU/LSTM 的训练速度真的有那么快,还是发生了什么奇怪的事情?我确实看到 GRU 和 LSTM 是“加载的 cuDNN”,我认为这意味着它是 CUDA 加速的,但我在 SimpleRNN 的任何地方都看不到,所以也许这就是区别?

编辑:我被要求包括我的数据格式,所以这是生成器:

class MyBatchGenerator(keras.utils.Sequence):
'Generates data for Keras'
def __init__(self, shuffle=True):
'Initialization'
allDataPaths = list(sorted(glob.glob('PATH TO NPZ FILES SAVED EARLIER')))

X = []
Y = []
for dp in allDataPaths:
data = np.load(dp, allow_pickle=True)
x = data['handData']
x = x.reshape(x.shape[0], -1)
y = np.array(data['keyData']).astype(float)
y = y.reshape(y.shape[0], -1).astype(float)
X.append(x)
Y.append(y)

maxLen = None
self.X = tf.keras.preprocessing.sequence.pad_sequences(
X, padding="post", value=-1.0, dtype='float', maxlen = maxLen
)
self.Y = tf.keras.preprocessing.sequence.pad_sequences(
Y, padding="post", value=-1.0, dtype='float', maxlen = maxLen
)

self.shuffle = shuffle
self.on_epoch_end()

def __len__(self):
'Denotes the number of batches per epoch'
return len(self.Y)

def __getitem__(self, index):
return self.__data_generation(index)

def on_epoch_end(self):
'Shuffles indexes after each epoch'
self.indexes = np.arange(len(self.Y))
if self.shuffle == True:
np.random.shuffle(self.indexes)

def __data_generation(self, index):
return self.X[index][np.newaxis], self.Y[index][np.newaxis]

最佳答案

我只能回答你的附带问题,因为我在 3 天前遇到了同样的事情。

如果您查看 3 层的 Keras 文档,您会发现 SimpleRNN 实际上不支持 CUDA 加速,但 GRU 和 LSTM 层实际上支持。我自己对此有点困惑,但我没有提示。 SRNN 给我的结果更差,训练时间更长,而两者给我的结果更好,而且在我的 GPU 上执行速度更快。

关于tensorflow - LSTM 和 GRU 与 SimpleRNN : "Type inference failed.",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73146937/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com