However, the key point of using real number is that we must keep the forward propagation result the same with the binarized network; otherwise, the training is meaningless. Therefore, in order to satisfy this request, a basic function $f'$ for training is defined. First, assume $\bm{\vec x}=(x_1,x_2,...,x_n)$, $\bm{\vec w}=(w_1,w_2,...,w_n)$ and $y$ are the input neurons, weights and output of the BDNN; $\bm{\vec x'}=(x_1',x_2',...,x_n')$, $\bm{\vec w'}=(w_1',w_2',...,w_n')$ and $y'$ are the corresponding real numbers of training. Second, assume $$C(x_i') = x_i,\quad C(w_i') = w_i.
\label{CC}$$ Then, the basic function $f'$ of training is given by $$y' = f'(\bm{\vec x'}, \bm{\vec w'}) = \dfrac{ \sum_{i=1}^{n}\dfrac{x_i' w_i'}{\left|x_i' w_i'\right|} }{ n }.
\label{fp}$$ As mentioned above, in , the basic function $f$ of BDNN counts the number of “1” and “-1” in $(x_1 w_1, x_2 w_2,...,x_n w_n)$ and returns the one with larger number. Accordingly, in , for the basic function $f'$, if in $(x_1' w_1', x_2' w_2',...,x_n' w_n')$ the positive values are more than negative ones, then $y'$ is a positive value; otherwise, $y'$ is negative. Consequently, because of , we obtain $$C( f(\bm{\vec x'},\bm{\vec w'}) ) = f(\bm{\vec x},\bm{\vec w})$$ and $$C( y' ) = y.$$

Clearly, with , if the inputs of 