Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tensorflow RNN序列学习_Tensorflow_Deep Learning_Rnn - Fatal编程技术网

Tensorflow RNN序列学习

Tensorflow RNN序列学习,tensorflow,deep-learning,rnn,Tensorflow,Deep Learning,Rnn,我不熟悉TensorFlow RNN预测。 我尝试使用RNN和BasicLSTMCell来预测序列,例如 1,2,3,4,5->6 3,4,5,6,7 ->8 35,36,37,38,39 ->40 我的代码没有报告错误,但每个批次的输出似乎都是相同的,而且在培训期间成本似乎没有降低 当我把所有的训练数据除以100 0.01,0.02,0.03,0.04,0.05->0.06 0.03,0.04,0.05,0.06,0.07 ->0.08 0.35,0.36,0.37,0.38,0.39 -

我不熟悉TensorFlow RNN预测。 我尝试使用RNN和BasicLSTMCell来预测序列,例如

1,2,3,4,5->6
3,4,5,6,7 ->8
35,36,37,38,39 ->40
我的代码没有报告错误,但每个批次的输出似乎都是相同的,而且在培训期间成本似乎没有降低

当我把所有的训练数据除以100

0.01,0.02,0.03,0.04,0.05->0.06
0.03,0.04,0.05,0.06,0.07 ->0.08 
0.35,0.36,0.37,0.38,0.39 ->0.40
结果非常好,预测值和实际值之间的相关性非常高(0.9998)

我怀疑问题是因为整数和浮点?但我无法解释原因。有人能帮忙吗?非常感谢

这是密码

库(tensorflow)
开始=样品(1:1000,100000,T)
start1=start+1
start2=start1+1
start3=start2+1
start4=start3+1
start5=start4+1
start6=start5+1
标签=start6+1
数据=数据帧(开始、开始t1、开始t2、开始t3、开始t4、开始t5、开始t6、标签)
数据=作为矩阵(数据)
n=nrow(数据)
列车索引=样本(1:n,尺寸=圆形(0.7*n),替换=假)
列车=数据[列车索引,]
测试=数据[-列车索引,]
列车数据=列车[,1:7]
列车标签=列车[,8]
平均值=应用(列_数据,2,平均值)
sds=应用(序列号2,sd)
列车数据=(列车数据平均值)/sds
测试数据=测试[,1:7]
测试数据=(测试数据平均值)/sds
测试标签=测试[,8]
批次尺寸=50L
n_输入=1L#m列表数据输入(img形状:28*28)
n_步数=7L#时间步数
n_隐藏单位=10L#隐藏层神经元
n#u输出=1L#m列表类(0-9位)
x=tf$占位符(tf$float32,形状(NULL,n_步数,n_输入))
y=tf$占位符(tf$float32,形状(NULL,1L))
权重=tf$变量(tf$随机\正常(形状(n个输入,n个隐藏单位)))
权重输出=tf$变量(tf$随机\u法线(形状(n\u隐藏\u单位,1L)))
偏差=tf$变量(tf$常量(0.1,形状=形状(n\u隐藏单位)))
偏差=tf$变量(tf$常数(0.1,形状=形状(1L)))
RNN=函数(X,权重输入,权重输出,偏差输入,偏差输出)
{
X=tf$重塑(X,形状=形状(-1,n_输入))
X_in=tf$sigmoid(tf$matmul(X,权重_in)+偏差_in)
X_in=tf$重塑(X_in,shape=shape(-1,n_步数,n_隐藏单位)
lstm\u cell=tf$contrib$rnn$BasicLSTMCell(n\u隐藏的\u单位,忘记\u偏差=1.0,状态\u为\u元组=T)
init_state=lstm_单元$zero_state(批处理大小,数据类型=tf$float32)
输出最终状态=tf$nn$dynamic(lstm单元,X单元,初始状态=初始状态,时间主要=F)
输出=tf$unstack(tf$transpose(输出最终状态[[1]],形状(1,0,2)))
结果=tf$matmul(输出[[长度(输出)]],权重输出)+偏差输出
返回(结果)
}
pred=RNN(x,权重输入,权重输出,偏差输入,偏差输出)
成本=tf$损失$均方误差(pred,y)
训练计划=tf$contrib$layers$optimize\u损失(损失=成本,全局步骤=tf$contrib$framework$get\u全局步骤(),学习率=0.05,optimizer=“SGD”)

init首先,经常规范化网络输入非常有用(有不同的方法,除以最大值,减去平均值,除以std等等)。这将对优化器有很大帮助

第二,在您的例子中,实际上最重要的是,在RNN输出之后,您正在应用sigmoid函数。如果您检查sigmoid函数的绘图,您将看到它实际上将所有输入缩放到范围(0,1)因此,基本上,无论你的输入有多大,你的输出将始终最多为1。因此,在回归问题中,你不应该在输出层使用任何激活函数


希望能有所帮助。

你能分享一些代码吗?如果没有它,很难确定问题出在哪里。而且,如果你的数据集非常简单,拥有如此高的相关性也不是不可想象的(如果你在数据集中引入噪声/错误,相关性是否仍然很高?)谢谢你的评论。我添加了代码,我只是在测试这个概念,所以数据集很简单。Asakeryukin,谢谢你的建议!!我添加了功能规范化并删除了sigmoid激活函数,但是,似乎这两个更改并没有解决问题。结果似乎是一样的。事实上,在学习之后,从每个批次都非常相同。例如,一个批次,实际Y为:810、284、83…35(50个值)预测Y为:494.8970、494.8970…494.8976(50个值)预测非常接近所有实际Y的平均值(即500),不知道如何解决或explain@user2146141您是否对输入和Y都进行了规格化?请尝试对两者进行规格化,然后在输出后缩小…因为您仍然在(0,1)中获得输入到最后一层,所以当网络被训练时,最后的W是一个固定值。这就是为什么网络在训练期间只学习所有Y的平均值,因为它将使误差最小化,否则就不可能得到一些W,这些W将乘以(0,1)个数,并且对于不同的输入同时得到810和83