如何在Tensorflow中重新批处理张量?

我有一个模型,通过CNN处理数据,然后输入到LSTM中。但在LSTM阶段之前,我需要重新组织CNN的输出,如下所示:

输入:(600, 512, 1) –(CNN)–> (600, 32)

这个(600, 32)的张量由两个参数k(窗口大小)和s(步长)修改,这两个参数都是整数,它们决定了以下张量的形状(我将这个过程称为’重新批处理’):

重新批处理:(600, 32) –> (146, 20, 32)

这些维度是通过感受野方程从k和s获得的:感受野方程

这里n_in=600,n_out计算结果为146,k=20,p=0,s=4。

这个新的张量然后可以输入到LSTM中,因为其形状是(批次大小,时间步长,特征),因此模型从那里继续…


我的问题是,我不知道如何在不破坏模型的反向传递的情况下’重新批处理’这个张量。我尝试创建一个空数组 – np.empty(shape_of_lstm_input) – 并迭代地用所需数据填充批次轴的每个元素,但转换为numpy数组时,在尝试最小化损失时会丢失信息,如下面的警告消息所示:

WARNING:tensorflow:Gradients do not exist for variables ['list of all parameters in my CNN'] when minimizing the loss.

因此,我尝试遵循相同的过程,但改用tf.zeros(shape_of_lstm_input),因为我认为这可以解决缺少梯度的问题,但取而代之的是,我得到了以下错误消息:

TypeError: 'tensorflow.python.framework.ops.EagerTensor' object does not support item assignment


有谁知道这个问题是否有解决方案?我不确定反向传递将如何处理前向传递中张量的这种’重新批处理’。


回答:

看起来你正在尝试从你的数据中创建一个滑动窗口。这是获取它的一个简单方法:

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注