x = w11v1v2 + w12v2v3 + w13v3v1 + w14v1 + w15v2 + w16*v3 y = w21v1v2 + w22v2v3 + w23v3v1 + w24v1 + w25v2 + w26*v3,转换成[x,y]'等于某个矩阵与矩阵[v1,v2,v3]相乘的形式
时间: 2023-08-15 17:06:27 浏览: 48
矩阵形式为:
```
[x, y] = [v1, v2, v3] * W
```
其中,
```
W = [[w11v2 + w13v3 + w14, w12v3 + w15, w11v1 + w13v3 + w16],
[w21v2 + w23v3 + w24, w22v3 + w25, w21v1 + w23v3 + w26]]
```
请注意,这里的乘法是指矩阵乘法,即矩阵[v1, v2, v3]与矩阵W相乘。
相关问题
完善以下程序:clear all X = [ 0 0 1; 0 1 1; 1 0 1; 1 1 1; ]; D = [ 0 0 1 1 ]; E1 = zeros(1000, 1); E2 = zeros(1000, 1); W11 = 2*rand(4, 3) - 1; % Cross entropy W12 = 2*rand(1, 4) - 1; % W21 = W11; % Sum of squared error W22 = W12; % for epoch = 1:1000 [W11 W12] = BackpropCE(W11, W12, X, D); [W21 W22] = BackpropXOR(W21, W22, X, D); es1 = 0; es2 = 0; N = 4; for k = 1:N x = X(k, :)'; d = D(k); v1 = W11*x; y1 = Sigmoid(v1); v = W12*y1; y = Sigmoid(v); % 填空:es1=? v1 = W21*x; y1 = Sigmoid(v1); v = W22*y1; y = Sigmoid(v); % 填空:es2=? end E1(epoch) = es1 / N; E2(epoch) = es2 / N; end plot(E1, 'r') hold on plot(E2, 'b:') xlabel('Epoch') ylabel('Average of Training error') legend('Cross Entropy', 'Sum of Squared Error')
clear all
X = [ 0 0 1;
0 1 1;
1 0 1;
1 1 1;
];
D = [ 0
0
1
1
];
E1 = zeros(1000, 1);
E2 = zeros(1000, 1);
W11 = 2*rand(4, 3) - 1; % Cross entropy
W12 = 2*rand(1, 4) - 1; %
W21 = W11; % Sum of squared error
W22 = W12; %
for epoch = 1:1000
[W11, W12, es1] = BackpropCE(W11, W12, X, D);
[W21, W22, es2] = BackpropXOR(W21, W22, X, D);
es1 = 0;
es2 = 0;
N = 4;
for k = 1:N
x = X(k, :)';
d = D(k);
v1 = W11*x;
y1 = Sigmoid(v1);
v = W12*y1;
y = Sigmoid(v);
es1 = es1 + CrossEntropy(d, y); % 填空:es1=?
v1 = W21*x;
y1 = Sigmoid(v1);
v = W22*y1;
y = Sigmoid(v);
es2 = es2 + SSE(d, y); % 填空:es2=?
end
E1(epoch) = es1 / N;
E2(epoch) = es2 / N;
end
plot(E1, 'r')
hold on
plot(E2, 'b:')
xlabel('Epoch')
ylabel('Average of Training error')
legend('Cross Entropy', 'Sum of Squared Error')
% 交叉熵损失函数
function [loss] = CrossEntropy(d, y)
loss = -1 * (d * log(y) + (1 - d) * log(1 - y));
end
% 平方误差损失函数
function [loss] = SSE(d, y)
loss = (d - y) ^ 2;
end
% Sigmoid激活函数
function [y] = Sigmoid(x)
y = 1 ./ (1 + exp(-x));
end
% 反向传播算法(Cross Entropy版本)
function [W1, W2, e] = BackpropCE(W1, W2, X, D)
alpha = 0.9;
N = 4;
e = 0;
for k = 1:N
x = X(k, :)';
d = D(k);
v1 = W1 * x;
y1 = Sigmoid(v1);
v = W2 * y1;
y = Sigmoid(v);
e = e + CrossEntropy(d, y);
delta = d - y;
delta1 = y1 .* (1 - y1) .* (W2' * delta);
dW2 = alpha * delta * y1';
dW1 = alpha * delta1 * x';
W2 = W2 + dW2;
W1 = W1 + dW1;
end
end
% 反向传播算法(Sum of Squared Error版本)
function [W1, W2, e] = BackpropXOR(W1, W2, X, D)
alpha = 0.9;
N = 4;
e = 0;
for k = 1:N
x = X(k, :)';
d = D(k);
v1 = W1 * x;
y1 = Sigmoid(v1);
v = W2 * y1;
y = Sigmoid(v);
e = e + SSE(d, y);
delta = (d - y) .* y .* (1 - y);
delta1 = y1 .* (1 - y1) .* (W2' * delta);
dW2 = alpha * delta * y1';
dW1 = alpha * delta1 * x';
W2 = W2 + dW2;
W1 = W1 + dW1;
end
end
S1=W12*(y-sigm_n*I(:))-Q*u;
这行代码计算了矩阵 S1。它涉及了矩阵乘法运算和向量运算。
首先,代码中使用了矩阵乘法运算 W12*(y-sigm_n*I(:))。其中,W12 是一个矩阵,(y-sigm_n*I(:)) 表示一个向量。这里的乘法操作将 W12 的每一行与 (y-sigm_n*I(:)) 进行点积运算,得到一个新的向量。
接着,代码中使用了减法运算符 - 将两个结果相减,即 (W12*(y-sigm_n*I(:))) - (Q*u)。其中,(W12*(y-sigm_n*I(:))) 是之前计算得到的向量,Q 是一个矩阵,u 是一个向量。
最终,得到的结果就是矩阵 S1。
综上所述,这行代码通过矩阵乘法、减法运算和点积运算,计算了矩阵 S1。