(w)?(--x):(++y)为什么等价于w!=0
时间: 2023-03-24 21:04:35 浏览: 64
这是因为在 C 语言中,非零值被视为真,而零值被视为假。因此,如果w的值不为零,表达式(w)?(--x):(y)将返回--x的值,否则将返回y的值。而w!=则表示w的值不为零,因此等价于表达式(w)?(--x):(y)。
相关问题
w<x?w:y<z?y:z的意思
这是一个C语言中的三元运算符表达式,它的意思是:如果w小于x,则返回w;否则,如果y小于z,则返回y;否则,返回z。可以写成以下的if-else语句的等价形式:
```c
if (w < x) {
result = w;
} else {
if (y < z) {
result = y;
} else {
result = z;
}
}
```
function W = DeltaSGD(W, X, D) alpha = 0.9; N = 4; for k = 1:N x = X(k, :)'; d = D(k); % 填空 v = ? y = Sigmoid(v); % 填空 delta = ? dW = alpha*delta*x; % delta rule % dW(1) = alpha*delta*x(1); % 等价形式 % dW(2) = alpha*delta*x(2); % dW(3) = alpha*delta*x(3); W(1) = W(1) + dW(1); W(2) = W(2) + dW(2); W(3) = W(3) + dW(3); end end
这段代码是一个使用 Delta Rule 和随机梯度下降(SGD)算法训练的三层神经网络模型的训练函数。其中,W表示网络的权值参数,X是输入数据,D是对应的期望输出。
代码中的for循环遍历了输入数据集中的每一个样本,每次循环都会计算出当前样本的输出y和误差delta,并且更新权值参数W。具体来说:
- x = X(k, :)'; 将第k个样本转换为列向量x。
- d = D(k); 获取第k个样本对应的期望输出d。
- v = ? 计算隐层神经元的净输入v,具体计算方式取决于网络的结构和激活函数。这里的代码没有给出具体的计算方式。
- y = Sigmoid(v); 将净输入v经过Sigmoid激活函数得到隐层神经元的输出y。
- delta = ? 计算当前样本的误差delta,具体计算方式也取决于网络的结构和激活函数。这里的代码也没有给出具体的计算方式。
- dW = alpha*delta*x; 计算当前样本对权值参数的调整量dW,其中alpha是学习率,x是输入向量,delta是误差值。
- W(1) = W(1) + dW(1); W(2) = W(2) + dW(2); W(3) = W(3) + dW(3); 根据计算得到的调整量dW,更新权值参数W。
这样,经过N次迭代后,权值参数W就可以被训练出来,从而可以对新的输入数据进行预测。