- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我想在 Keras 中使用有状态 LSTM 开发一种用于二进制分类的时间序列方法
这是我的数据的样子。我有很多录音,例如 N
。每个记录包含 22 个长度为 M_i(i=1,...N)
的时间序列。我想在 Keras 中使用有状态模型,但我不知道如何 reshape 我的数据,尤其是我应该如何定义我的 batch_size
。
下面是我如何处理 stateless
LSTM。我为所有记录创建了长度为 look_back
的序列,这样我就有了大小为 (N*(M_i-look_back), look_back, 22=n_features)
这是我为此目的使用的函数:
def create_dataset(feat,targ, look_back=1):
dataX, dataY = [], []
# print (len(targ)-look_back-1)
for i in range(len(targ)-look_back):
a = feat[i:(i+look_back), :]
dataX.append(a)
dataY.append(targ[i + look_back-1])
return np.array(dataX), np.array(dataY)
其中 feat
是大小为 (n_samples, n_features)
的二维数据数组(对于每个记录),targ
是目标矢量。
那么,我的问题是,根据上面解释的数据,如何为有状态模型 reshape 数据并考虑批处理概念?是否需要采取预防措施?
我想做的是能够将每个记录的每个 time_step 分类为癫痫发作/非癫痫发作。
编辑:我想到的另一个问题是:我的录音包含不同长度的序列。我的有状态模型可以了解每个记录的长期依赖性,因此这意味着 batch_size 从一个记录到另一个记录不同......如何处理?在完全不同的序列(test_set)上测试会不会导致泛化问题?
谢谢
最佳答案
我认为您不需要有状态层来实现您的目的。
如果您想长期学习,就不要创建这些滑动窗口。将您的数据塑造为:
(number_of_independent_sequences, length_or_steps_of_a_sequence, variables_or_features_per_step)
我不确定我是否正确理解了您问题中的措辞。如果“录音”类似于“电影”或“歌曲”、“语音剪辑”或类似的东西,则:
按照“录音”的想法,时间步长将是“视频中的帧”,或音频文件中的“样本”(时间 x 1 个 channel 的样本率)。 (注意,keras 中的“样本”是“序列/录音”,而音频处理中的“样本”是 keras 中的“步骤”)。
最后,特征/变量的数量。在电影中,它就像 RGB channel (3 个特征),在音频中,也像 channel 数(2 个立体声)。在其他类型的数据中,它们可能是温度、压力等。
将您的数据塑造成这样将适用于 stateful = True 和 False。
这两种训练方式是等价的:
#with stateful=False
model.fit(X, Y, batch_size=batch_size)
#with stateful=True
for start in range(0, len(X), batch_size):
model.train_on_batch(X[start:start+batch_size], Y[start:start+batch_size])
model.reset_states()
可能只有优化器的更新方式发生了变化。
对于您的情况,如果您可以创建上述形状的输入数据并且您不打算递归地预测 future ,我认为没有理由使用 stateful=True
。
对于每一步的分类,你不需要创建滑动窗口,也没有必要使用stateful=True
。
通过设置 return_sequences=True
,循环层可以选择输出所有时间步长。
如果你有一个形状为 (batch, steps, features)
的输入,你将需要形状为 (batch, steps, 1)
的目标,即 每步一个类。
简而言之,您需要:
return_sequences=True
的 LSTM 层X_train
形状为 (files, total_eeg_length, 22)
Y_train
形状为 (files, total_eeg_length, 1)
提示:由于 LSTM 无法很好地对开始部分进行分类,您可以尝试使用 Bidirectional(LSTM(....))
层。
要使用不同长度的输入,您需要设置input_shape=(None, features)
。考虑到我们在聊天中的讨论,features = 22
。
然后您可以:
单独加载每个脑电图:
X_train
为 (1, eeg_length, 22)
Y_train
作为 (1, eeg_length, 1)
model.train_on_batch(array, targets)
分别训练每个 EEG。test_on_batch
验证数据。用零或其他虚拟值填充较短的 EEG,直到它们都达到 max_eeg_length
并使用:
掩蔽
层,用于丢弃具有虚拟值的步骤。X_train
作为(eegs, max_eeg_length, 22)
Y_train
作为(eegs, max_eeg_length, 1)
model.fit(X_train, Y_train,...)
关于python - 如何在 Keras 中为有状态 LSTM 准备数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52071751/
我正在通读 Windows Phone 7.5 Unleashed,有很多代码看起来像这样(在页面的代码隐藏中): bool loaded; protected override void OnNav
在cgi服务器中,我这样返回 print ('Status: 201 Created') print ('Content-Type: text/html') print ('Location: htt
我正在查看 esh(easy shell)的实现,无法理解在这种情况下什么是 22 和 9 信号。理想情况下,有一个更具描述性的常量,但我找不到列表。 最佳答案 信号列表及其编号(包括您看到的这两个)
我的Oozie Hive Action 永远处于运行模式。 oozie.log文件中没有显示错误。
我正在编写一个使用 RFCOMM 通过蓝牙连接到设备的 Android 应用程序。我使用 BluetoothChat 示例作为建立连接的基础,大部分时间一切正常。 但是,有时由于出现套接字已打开的消息
我有一个云调度程序作业,它应该每小时访问我的 API 以更新一些价格。这些作业大约需要 80 秒才能运行。 这是它的作用: POST https://www.example.com/api/jobs/
我正在 Tomcat 上访问一个简单的 JSP 页面: 但是当我使用 curl 测试此页面时,我得到了 200 响应代码而不是预期的 202: $ curl -i "http://localhos
有时 JAR-RS 客户端会发送错误的语法请求正文。服务器应响应 HTTP status 400 (Bad Request) , 但它以 HTTP status 500 (Internal Serve
我正在尝试通过 response.send() 发送一个整数,但我不断收到此错误 express deprecated res.send(status): Use res.sendStatus(sta
我已经用 Excel 和 Java 做过很多次了……这次我需要用 Stata 来做,因为保存变量更方便'labels .如何将 dataset_1 重组为下面的 dataset_2? 我需要转换以下
我正在创建一个应用程序,其中的对象具有状态查找功能。为了提供一些上下文,让我们使用以下示例。 帮助台应用程序,其中创建作业并通过以下工作流程移动: 新 - 工作已创建但未分配 进行中 - 分配给工作人
我想在 Keras 中运行 LSTM 并获得输出和状态。在 TF 中有这样的事情 with tf.variable_scope("RNN"): for time_step in range
有谁知道 Scala-GWT 的当前状态 项目? 那里的主要作者 Grzegorz Kossakowski 似乎退出了这个项目,在 Spring 中从事 scalac 的工作。 但是,在 interv
我正在尝试编写一个 super 简单的 applescript 来启动 OneDrive App , 或确保打开,当机器的电源设置为插入时,将退出,或确保关闭,当电源设置为电池时。 我无法找到如何访问
目前我正在做这样的事情 link.on('click', function () { if (link.attr('href') !== $route.current.originalPath
是否可以仅通过查看用户代理来检测浏览器上是否启用/禁用 Javascript。 如果是,我应该寻找什么。如果否,检测用户浏览器是否启用/禁用 JavaScript 的最佳方法是什么 最佳答案 不,没有
Spring 和 OSGi 目前的开发状况如何? 最近好像有点安静了。 文档的最新版本 ( http://docs.spring.io/osgi/ ) 来自 2009 年。 我看到一些声明 Sprin
我正在从主函数为此类创建一个线程,但即使使用 Thread.currentThread().interrupt() 中断它,输出仍然包含“Still Here”行。 public class Writ
为了满足并发要求,我想知道如何在 Godog 中的多个步骤之间传递参数或状态。 func FeatureContext(s *godog.Suite) { // This step is ca
我有一个UIButton子类,它不使用UIImage背景,仅使用背景色。我注意到的一件事是,当您设置按钮的背景图像时,有一个默认的突出显示状态,当按下按钮时,该按钮会稍微变暗。 这是我当前的代码。
我是一名优秀的程序员,十分优秀!