public static void initScore() {
		
		int[][] moviercount = new int[DataInfo.numItems][DataInfo.softmax];
		Function.zero(moviercount, DataInfo.numItems, DataInfo.softmax);
		
		for(int user = 0; user < DataInfo.numUsers; user++) {
			int num = DataInfo.TrainSet[user].length;
			
			for(int j = 0; j < num; j++) {
				int m = DataInfo.TrainSet[user][j] / 10;
				int r = DataInfo.TrainSet[user][j] % 10;
				moviercount[m][r]++;
			}	
		}
		
		Random randn = new Random();
		/** Set initial weights */
		for(int i = 0; i < DataInfo.numItems; i++) {
			for(int j = 0; j < DataInfo.totalFeatures; j++) {
				for(int k = 0; k < DataInfo.softmax; k++) {
					/** Normal Distribution */
					DataInfo.Weights[i][k][j] = 0.02 * randn.nextDouble() - 0.01;	        	
				}
			}
		}

		/** Set initial biases */
		Function.zero(DataInfo.hidbiases, DataInfo.totalFeatures);
		
		for(int i = 0; i < DataInfo.numItems; i++) {
			int mtot = 0;
			for(int k = 0; k < DataInfo.softmax; k++) {
				mtot += moviercount[i][k];
			}
			
			for(int k = 0; k < DataInfo.softmax; k++) {
				DataInfo.visbiases[i][k] = Math.log(((double)moviercount[i][k])/((double)mtot));
			}
		}
		
	}