LSTM预测时数据较短如何处理

问题描述

在用LSTM预测时,如果我的数据比较短,但是有很多种不同情况下的数据。(比如,在a=0,b=1,c=1,2,3,4,5,6情况下,d = 1,2,3,4,5,6;然后变化a与b的值,c不变,d变化这样子。)这种数据结构可以用LSTM方法来预测吗

你把数据报错信息发给我

【相关推荐】



  • 您可以看一下 沈福利老师的自然语言处理实战 深度学习之LSTM情感分析课程中的 文本情感分析 模型训练方法和验证方法定义小节
  • 除此之外, 这篇博客: 手把手教您使用LSTM生成唐诗中的 四、构建计算图 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    # 开始设置各种变量,构建计算图
    tf.reset_default_graph()
    batch_size=64
    input_dim=len(vocab)
    time_steps=50
    learning_rate=0.01
    num_units=128
    num_layers=2
    output_dim=len(vocab)
    grad_clip=5
    #隐藏层单元数128
    inputs=tf.placeholder(name="inputs",shape=[None,time_steps],dtype=tf.int32)
    # 对应batch_x
    targets=tf.placeholder(name="targets",shape=[None,time_steps],dtype=tf.int32)
    # 对应batch_y
    # 输入以及输出都是二维的
    input_data=tf.one_hot(inputs,len(vocab))
    print("input_data.shape:",input_data.shape)
    # 将输入转变成三维的one-hot编码
    # 构建lstm单元
    # lstm_cell=tf.contrib.rnn.LayerNormBasicLSTMCell(num_units)
    cells=tf.contrib.rnn.MultiRNNCell([tf.contrib.rnn.LayerNormBasicLSTMCell(num_units) for _ in range(num_layers)])
    initial_state=cells.zero_state(batch_size,dtype=tf.float32)
    """
    这里的state就是初始化了state.c以及state.h分别表示长时记忆以及短时记忆
    """
    out,state=tf.nn.dynamic_rnn(cells, input_data, initial_state=initial_state)
    # 创建输出层,输出的数据是三维的,展开
    out=tf.reshape(out,[-1,num_units])
    print("out.shape:",out.shape)
    out_weights=tf.get_variable(name="out_weights",shape=[num_units,output_dim],dtype=tf.float32)
    out_bias=tf.get_variable(name="out_bias",shape=[output_dim],dtype=tf.float32)
    logits=tf.add(tf.matmul(out,out_weights),out_bias)
    print("logits.shape:",logits.shape)
    predictions=tf.nn.softmax(logits,name="predictions")# 每隔所占的标准比例
    # 计算损失
    outputs=tf.one_hot(targets,len(vocab))
    print("outputs.shape:",outputs.shape)
    outputs=tf.reshape(outputs,[-1,len(vocab)])
    print("outputs.shape:",outputs.shape)
    loss=tf.nn.softmax_cross_entropy_with_logits(logits=logits,labels=outputs)
    print("loss.shape:",loss.shape)
    loss=tf.reduce_mean(loss)
    # 确定优化函数
    tvars=tf.trainable_variables()##找出需要训练的参数变量
    grads,_=tf.clip_by_global_norm(tf.gradients(loss,tvars),grad_clip)
    train_op=tf.train.AdamOptimizer(learning_rate)
    optimizer=train_op.apply_gradients(zip(grads,tvars))
    
    """
    输出:
    input_data.shape: (?, 50, 7649)
    out.shape: (3200, 128)
    logits.shape: (3200, 7649)
    outputs.shape: (?, 50, 7649)
    outputs.shape: (?, 7649)
    loss.shape: (3200,)
    """
    
    

    【在这个过程中遇到的小问题:】

    • tf.one_hot()
      在最后一个维度上进行扩展
    tf.clip_by_global_norm理解

在Tensorboard中展示计算图:
在这里插入图片描述


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^