我训练了一个LSTM模型,使用Tensorflow将每个时间步的9个输入映射到7个输出。现在我在Matlab中重建了模型,但是结果(我绘制了轨迹)似乎不正确。在
我只需在Matlab中加载LSTM网络的训练权重矩阵。此外,我在Matlab中手工实现了前向传播规则,并插入了权重矩阵function [outputs,states] = unfoldNetwork(obj,inputs)
numInputs = size(inputs,1);
input_output = [inputs(1,:)' ; zeros(obj.num_hidden,1)];
state = zeros(obj.num_hidden,1);
outputs = zeros(numInputs, obj.output_dim);
states = zeros(numInputs, obj.num_hidden);
for i=1:numInputs
[output,state] = fp(obj,state,input_output);
input_output = [inputs(i,:)' ; output];
outputs(i,:) = (obj.output_W * output + obj.output_b)'; % transfer to output-dimension
states(i,:) = state';
end
end
function [output,state] = fp(obj,state,input_output)
i = obj.sigmoid(obj.weights(1:obj.num_hidden,:) * input_output + obj.biases(1:obj.num_hidden));
g = tanh(obj.weights(obj.num_hidden+1:2*obj.num_hidden,:) * input_output + obj.biases(obj.num_hidden+1:2*obj.num_hidden));
f = obj.sigmoid(obj.weights(2*obj.num_hidden+1:3*obj.num_hidden,:) * input_output + obj.biases(2*obj.num_hidden+1:3*obj.num_hidden));
o = obj.sigmoid(obj.weights(3*obj.num_hidden+1:4*obj.num_hidden,:) * input_output + obj.biases(3*obj.num_hidden+1:4*obj.num_hidden));
state = f.*state + i.*g;
output = o.* tanh(state);
end
function [argout] = sigmoid(obj,x)
argout = 1./(1+exp(-x));
end
张量流中的网络基本上是这样的
^{pr2}$
在图像中,您可以在一开始看到matlabdo中的预测(有点偏移)与Python中的预测相对应。在那之后,它会变得有点偏颇。我很确定前向传播规则和权重矩阵是正确的。因为我确实改变了一些矩阵或者前向传播的规则,然后一切都变得一团糟。在