如何用 Keras 调试LSTM超参数解决时间序列预测问题

2024-05-07 13:53

1. 如何用 Keras 调试LSTM超参数解决时间序列预测问题

就一个abcd作为一条样本即可,a b c d 的每一步都会计算loss的,所以拆开也没啥用 另外你这个不是序列标注,因为你是要预测下一个,而不是给整体一个最佳序列

如何用 Keras 调试LSTM超参数解决时间序列预测问题

2. 如何在python中用lstm网络进行时间序列预测

时间序列建模器  图表那个选项卡    左下勾选  拟合值    就可以了。我的为什么不出现预测值啊啊啊啊~~

3. 如何使用Keras进行分布式/多GPU运算

with tf.device('/gpu:0'):
    x = tf.placeholder(tf.float32, shape=(None, 20, 64))
    y = LSTM(32)(x)  # all ops in the LSTM layer will live on GPU:0

with tf.device('/gpu:1'):
    x = tf.placeholder(tf.float32, shape=(None, 20, 64))
    y = LSTM(32)(x)  # all ops in the LSTM layer will live on GPU:1
注意,上例中由LSTM创建的变量不在GPU上:所有的TensorFlow变量总是在CPU上生存,而与它们在哪创建无关。各个设备上的变量转换TensorFlow会自动完成。
如果你想在不同的GPU上训练同一个模型的不同副本,但在不同的副本中共享权重,你应该首先在一个设备上实例化你的模型,然后在不同的设备上多次调用该对象,例如:
with tf.device('/cpu:0'):
    x = tf.placeholder(tf.float32, shape=(None, 784))

    # shared model living on CPU:0
    # it won't actually be run during training; it acts as an op template
    # and as a repository for shared variables
    model = Sequential()
    model.add(Dense(32, activation='relu', input_dim=784))
    model.add(Dense(10, activation='softmax'))

# replica 0
with tf.device('/gpu:0'):
    output_0 = model(x)  # all ops in the replica will live on GPU:0

# replica 1
with tf.device('/gpu:1'):
    output_1 = model(x)  # all ops in the replica will live on GPU:1

# merge outputs on CPU
with tf.device('/cpu:0'):
    preds = 0.5 * (output_0 + output_1)

# we only run the `preds` tensor, so that only the two
# replicas on GPU get run (plus the merge op on CPU)
output_value = sess.run([preds], feed_dict={x: data})

如何使用Keras进行分布式/多GPU运算

4. keras为3维input做LSTM预测遇到问题求助

就一个abcd作为一条样本即可,a b c d 的每一步都会计算loss的,所以拆开也没啥用 另外你这个不是序列标注,因为你是要预测下一个,而不是给整体一个最佳序列

5. Keras使用LSTM时输入问题

语言模型主要分为规则模型和统计模型两种。统计语言模型是用概率统计的方法来揭示语言单位内在的统计规律,其中N-Gram简单有效,被广泛使用。N-Gram:该模型基于这样一种假设,第n个词的出现只与前面N-1个词相关,而与其它任何词都不相关,整句的概率就是各个词出现概率的乘积。这些概率可以通过直接从语料中统计N个词同时出现的次数得到。常用的是二元的Bi-Gram和三元的Tri-Gram。语言模型的性能通常用交叉熵和复杂度(Perplexity)来衡量。交叉熵的意义是用该模型对文本识别的难度,或者从压缩的角度来看,每个词平均要用几个位来编码。复杂度的意义是用该模型表示这一文本平均的分支数,其倒数可视为每个词的平均概率。平滑是指对没观察到的N元组合赋予一个概率值,以保证词序列总能通过语言模型得到一个概率值。通常使用的平滑技术有图灵估计、删除插值平滑、Katz平滑和Kneser-Ney平滑。

Keras使用LSTM时输入问题

6. keras 如何输出softmax分类结果属于某一类的概率

softmax是用于单标签输出,模型训练后,调用model.predict函数就可以输出结果为[0.5,0.4,0.1](输出数量为最后一层隐藏层的neuron数)这样的矩阵,里面即为你所需的预测概率值,值得注意的是,softmax会限制输出的所有概率相加为1。
如果需要预测的是多个标签而不是单个标签,则需要使用sigmoid作为输出激活函数,那么输出就不再强制相加为1,可以得到每个分类的实际预测值,此时只需要设置一个致信的threshold则可以得到多个分类预测值。
每个激活函数的详细解释看这里网页链接

7. keras 安装失败,求助求助

在Python Extension Packages for Windows 下载对应版本的scipy( cp后面是Python的版本号,27表示2.7),将要安装的whl文件复制在Anaconda的安装路径下的Scripts文件夹中,接下来 pip install “文件路径+whl文件名”



接下来就可以安装 theano,keras

keras 安装失败,求助求助

8. 如何使用 permute layer 将CNN 连接上 LSTM

不是很清楚你要如何处理你的数据。
1. 如果是想用卷积层前处理很多张图片,然而再用LSTM预测这种顺序的图片,那么你的tensor会多一个time_step维度。

但是time_step的维度是为LSTM准备的。进入卷积层之前,你应该会需要将输入reshape。
输入:(samples, time_step, channel, length, width),
            channel, length, width不变。将samples, time_step reshape到一个维度上。
           keras.layers.core.Reshape((-1, channel, length, width))
变成:(samples*time_step, channel, length, width)

这时再送入卷基层。
卷基层处理完后,你应该还会需要model.add(Flatten()):#(若要保留某维为后用,则用reshape)
            变成(samples*time_step, nb_features_from_last_layer_in_cnn )
这时再reshape回来,keras.layers.core.Reshape((samples, time_step, channel, length, width))
然后送入LSTM层处理。
如果还想接feedforward layers,你还需要reshape。
这里的问题是time_step是只在LSTM层需要,其他层time_step可以被看做samples

2. 如果你是想用卷积层中已有的维(比如length、width、channels、filters)作为time_step,那么你需要Permute((, , , ))来调节tensor对应的维。比如将长度作为time step用递归层来抓取特点,单靠permute可以。但是你描述的貌似是多个图片序列,那需要第一种reshape来做。