在用LSTM预测时,如果我的数据比较短,但是有很多种不同情况下的数据。(比如,在a=0,b=1,c=1,2,3,4,5,6情况下,d = 1,2,3,4,5,6;然后变化a与b的值,c不变,d变化这样子。)这种数据结构可以用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,)
"""
【在这个过程中遇到的小问题:】
在Tensorboard中展示计算图: