how to normalize the input and target file?
Hi Dr. Xu,
Your paper mentioned the input and target file should be normalized to zero mean and unit variance. Now i use the qnnorm command to prepare the ".fea_norm" file needed by .pl file. Am i right? But, in the Interface.cc file, i found you use the following sentence to normalize the input file. dataori[2+j +i*(para->fea_dim +2)] -= mean[j]; dataori[2+j +i*(para->fea_dim +2)] = dVar[j]; using following sentence to normalize the target file: targori[2+j +i(para->layersizes[numlayers-1] +2)] -= 0; targori[2+j +i*(para->layersizes[numlayers-1] +2)] *= 1; It seems the target file does not be normalized with the above two sentence.
Could you tell me how to normalize the target file?
Yes, QNNORM is used to prepare .fea_norm
For the target feature, it also should be normalized which is similar to input feature. I thought it maybe because i used it for predicting idea binary/soft mask. In that case, it is no need to normalize. Maybe you can help to put an update on this point.
Ok. I will try to normalize the target feature. Thank you. Now i have another question: your paper also mentioned that "The type of the hidden units is sigmoid, and the output unit is linear." So in your code i should change the following code in the BP_GPU.cu file else{ /////////////////////////////直接注释掉,输出地就是linear的??? //DevSoftmax(streams[0],n_frames, cur_layer_units, cur_layer_x, dev[0].out); DevSigmoid(streams[0],cur_layer_size, cur_layer_x, cur_layer_y); //DevLinearOutCopy(streams[0],n_frames, cur_layer_units, cur_layer_x, dev[0].out); //out=cur_layer_x; //cudaSetDevice(0); //printf("come here\n"); cudaMemcpy(dev[0].out,cur_layer_y,n_framescur_layer_unitssizeof(float),cudaMemcpyDeviceToDevice); //cudaMemcpy(out_check,cur_layer_x,n_framescur_layer_unitssizeof(float),cudaMemcpyDeviceToHost);
into else{ /////////////////////////////直接注释掉,输出地就是linear的??? //DevSoftmax(streams[0],n_frames, cur_layer_units, cur_layer_x, dev[0].out); //DevSigmoid(streams[0],cur_layer_size, cur_layer_x, cur_layer_y); DevLinearOutCopy(streams[0],n_frames, cur_layer_units, cur_layer_x, cur_layer_y); //out=cur_layer_x; //cudaSetDevice(0); //printf("come here\n"); cudaMemcpy(dev[0].out,cur_layer_y,n_framescur_layer_unitssizeof(float),cudaMemcpyDeviceToDevice); //cudaMemcpy(out_check,cur_layer_x,n_framescur_layer_unitssizeof(float),cudaMemcpyDeviceToHost);
}
Am i right?