- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在全身心投入机器学习,并希望将 Keras 用于时间紧迫的大学项目。我意识到最好学习单独的概念和构建模块,但重要的是尽快完成。
我正在和一个对机器学习有一定经验和兴趣的人一起工作,但我们似乎无法走得更远。以下代码改编自GitHub code中提到的a guide in Machine Learning Mastery。
就上下文而言,我从多个物理传感器(其中每个传感器是一列)获取了数据,这些传感器的每个样本都由一行表示。我希望使用机器学习来确定传感器在任何给定时间跟踪的人。我尝试将大约 80% 的行分配给训练,将 20% 分配给测试,并创建我自己的“y”数据集(前 521,549 行来自一个参与者,其余的来自另一个参与者)。我的数据(训练和测试)总共有 1,019,802 行和 16 列(全部填充),但如果需要,可以减少列数。
我很想知道以下内容:
下面是我尝试运行以利用机器学习的 Python 代码:
x_all = pd.read_csv("(redacted)...csv",
delim_whitespace=True, header=None, low_memory=False).values
y_all = np.append(np.full((521549,1), 0), np.full((498253,1),1))
limit = 815842
x_train = x_all[:limit]
y_train = y_all[:limit]
x_test = x_all[limit:]
y_test = y_all[limit:]
max_features = 16
maxlen = 80
batch_size = 32
model = Sequential()
model.add(Embedding(500, 32, input_length=max_features))
model.add(LSTM(128, dropout=0.2, recurrent_dropout=0.2))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy',
optimizer='adam',
metrics=['accuracy'])
model.fit(x_train, y_train,
batch_size=batch_size,
epochs=15,
validation_data=(x_test, y_test))
score, acc = model.evaluate(x_test, y_test,
batch_size=batch_size)
这是代码中引用的 CSV 的摘录:
6698.486328125 4.28260869565217 4.6304347826087 10.6195652173913 2.4392579293836 2.56134051466188 9.05326152004788 0.0 1.0812 924.898261191267 -1.55725190839695 -0.244274809160305 0.320610687022901 -0.122938530734633 0.490254872563718 0.382308845577211
6706.298828125 4.28260869565217 4.58695652173913 10.5978260869565 2.4655894673848 2.50867743865949 9.04368641532017 0.0 1.0812 924.898261191267 -1.64885496183206 -0.366412213740458 0.381679389312977 -0.122938530734633 0.490254872563718 0.382308845577211
6714.111328125 4.26086956521739 4.64130434782609 10.5978260869565 2.45601436265709 2.57809694793537 9.03411131059246 0.0 1.0812 924.898261191267 -0.931297709923664 -0.320610687022901 0.320610687022901 -0.125937031484258 0.493253373313343 0.371814092953523
运行时出现以下错误:
tensorflow.python.framework.errors_impl.InvalidArgumentError: indices[0,0] = 972190 is not in [0, 500)
[[Node: embedding_1/embedding_lookup = GatherV2[Taxis=DT_INT32, Tindices=DT_INT32, Tparams=DT_FLOAT, _class=["loc:@training/Adam/Assign_2"], _device="/job:localhost/replica:0/task:0/device:CPU:0"](embedding_1/embeddings/read, embedding_1/Cast, training/Adam/gradients/embedding_1/embedding_lookup_grad/concat/axis)]]
作为引用,我使用的是 2017 款 27 英寸 iMac Retina 5K,配备 4.2 GHz i7、32 GB RAM 和 Radeon Pro 580 8 GB。
最佳答案
还有一些关于机器学习掌握的教程可以满足您想要完成的任务 https://machinelearningmastery.com/convert-time-series-supervised-learning-problem-python/ https://machinelearningmastery.com/time-series-prediction-lstm-recurrent-neural-networks-python-keras/
我将对您可能想要做的事情给出我自己的快速解释。
现在看起来您正在为模型的 X 和 y 输入使用完全相同的数据。 y 输入是标签,在您的情况下是“传感器正在跟踪的人”。因此,在有 2 个可能的人的二进制情况下,第一个人设置为 0,第二个人设置为 1。
最后一层的 sigmoid 激活将输出 0 到 1 之间的数字。如果该数字低于 0.5,则预测传感器正在跟踪人物 0,如果高于 0.5,则预测传感器正在跟踪人物 1。这将以准确度分数表示。
您可能不想使用嵌入层,您可能会想,但我会先放弃它。在将数据输入网络之前对其进行标准化以改进训练。如果您想要快速解决方案,Scikit-Learn 提供了很好的工具。 http://scikit-learn.org/stable/modules/preprocessing.html
在处理时间序列数据时,您通常希望输入时间点窗口而不是单个点。如果您将时间序列发送到 Keras model.fit(),那么它将使用单个点作为输入。
为了将时间窗口作为输入,您需要将数据集中的每个示例重新组织为整个窗口,或者如果生成器会占用大量内存,则可以使用生成器。我链接的机器学习掌握页面对此进行了描述。Keras 有一个可以使用的生成器,名为 TimeseriesGenerator
from keras.preprocessing.sequence import TimeseriesGenerator
timeseries_generator = TimeseriesGenerator(data, targets, length, sampling_rate)
其中数据是特征的时间序列,目标是标签的时间序列。如果您使用时间序列生成器,那么在拟合时您将必须使用 fit_generator
model.fit_generator(timeseries_generator)
与使用evaluate_generator()进行评估相同
如果您的数据设置正确,那么您的模型应该可以工作
model = Sequential()
model.add(LSTM(128, dropout=0.2, recurrent_dropout=0.2))
model.add(Dense(1, activation='sigmoid'))
您还可以尝试更简单的密集模型
model = Sequential()
model.add(Flatten())
model.add(Dense(64, dropout=0.2, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
我看到的另一个问题是,您似乎会分割出一个仅包含一种类型标签的测试集,这不仅是不好的做法,而且还会将您的训练集加权到其他标签,这可能会损害您的结果。
希望这能让您开始。确保您的数据设置正确!
关于python - Keras 中 RNN/LSTM 的 InvalidArgumentError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51152582/
我使用 tensorflow 实现了一个简单的 RNN 模型来学习时间序列数据的可能趋势并预测 future 值。然而,该模型总是在训练后产生相同的值。实际上,它得到的最佳模型是: y = b. RN
我正在关注this tutorial关于循环神经网络。 这是导入: import tensorflow as tf from tensorflow.examples.tutorials.mnist i
一段时间以来,我一直在苦思冥想,无法弄清楚我在实现这些 RNN 时做错了什么(如果有的话)。为了让你们省去前向阶段,我可以告诉你们这两个实现计算相同的输出,所以前向阶段是正确的。问题出在倒退阶段。 这
我正在用 RNN 练习。我随机创建 5 个整数。如果第一个整数是奇数,则 y 值为 1,否则 y 为 0(因此,只有第一个 x 有效)。问题是,当我运行这个模型时,它不会“学习”:val_loss 和
我正在使用 bidirectional_rnn与 GRUCell但这是一个关于 Tensorflow 中 RNN 的普遍问题。 我找不到如何初始化权重矩阵(输入到隐藏,隐藏到隐藏)。它们是随机初始化的
我正在尝试找出适应开放命名实体识别问题的最佳模型(生物学/化学,因此不存在实体字典,但必须通过上下文来识别它们)。 目前我最好的猜测是调整 Syntaxnet,这样它就不会将单词标记为 N、V、ADJ
我正在通过以下方式训练 RNN: def create_rnn_model(stateful,length): model = Sequential() model.add(Simpl
我对 PyTorch 非常陌生,而且对一般神经网络也相当陌生。 我试图构建一个可以猜测性别名字的神经网络,并且基于判断国籍的 PyTorch RNN 教程。 我的代码运行没有错误,但损失几乎没有变化,
我正在尝试训练一个模型,返回单词序列(RNN)的类。 我为我的模型提供一系列嵌入: [ batchSize, sequence_length, word_embedding ] as float[]
我正在尝试预测输入向量中每个数字的类别。有3个类(class)。如果输入值从 0 变为 1,则为 1 类。如果从 1 变为 0,则为 2 类。否则为 0 类。 在第二个纪元之后,精度停留在 0.882
我正在尝试为我的日志分析项目开发一个顺序 RNN。 输入是一个日志序列,例如 [1,2,3,4,5,6,1,5,2,7,8,2,1] 目前我正在使用 keras 库中的 to_categorical
为了加深我对 RNN 和 LSTM 的理解,我正在尝试实现一个简单的 LSTM 来估计正弦波的频率和相位。事实证明,这出奇地难以收敛。 MSE 相当高(以千为单位)唯一似乎有点工作的是,如果我生成所有
请帮助我编写以下代码,当我尝试直接在数据上拟合模型时,该代码运行良好,但在网格搜索上失败(我已注释掉直接 model.fit()我的 grid.fit() 语句末尾的部分,这给了我满意的结果。还请告诉
前提1: 关于 RNN 层中的神经元 - 我的理解是,在“每个时间步,每个神经元都接收输入向量 x (t) 和前一个时间步的输出向量 y (t –1)”[1]: 前提2: 据我了解,在 Pytorch
我想训练一个 RNN 来解决一个简单的回归问题。我有一个形状为 (35584,) 的数组 X_train,它表示几年来每小时的测量值。我还有相应的 Y_train 形状为 (35584,) 作为预期值
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 4 年前。 Improve this qu
pytorch实现变长输入的rnn分类 输入数据是长度不固定的序列数据,主要讲解两个部分 1、Data.DataLoader的collate_fn用法,以及按batch进行padding数据
基于循环神经网络(RNN)的古诗生成器,具体内容如下 之前在手机百度上看到有个“为你写诗”功能,能够随机生成古诗,当时感觉很酷炫= = 在学习了深度学习后,了解了一下原理,打算自己做个实现练练手
使用循环神经网络(RNN)实现影评情感分类 作为对循环神经网络的实践,我用循环神经网络做了个影评情感的分类,即判断影评的感情色彩是正面的,还是负面的。 选择使用RNN来做情感分类,主要是因为影评
我的目标是在 Keras/TensorFlow 中构建一个 RNN,它由循环单元层(GRU、LSTM 等)以及从网络底部到顶部的循环组成,以添加注意力机制或特殊的内存类型。我不熟悉符号循环,所以首先我
我是一名优秀的程序员,十分优秀!