在Matlab中使用张量流模型

2024-04-18 00:17:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我训练了一个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}$

Ground Truth, Python prediction, and Matlab prediction

在图像中,您可以在一开始看到matlabdo中的预测(有点偏移)与Python中的预测相对应。在那之后,它会变得有点偏颇。我很确定前向传播规则和权重矩阵是正确的。因为我确实改变了一些矩阵或者前向传播的规则,然后一切都变得一团糟。在


Tags: objinputoutputzeros矩阵numhiddenend

热门问题