(*Spin-up/spin-downmeasurementprobabilitiesonY-rotatedqubit*)​​Pu[θ_]:=(Cos[θ/2])^2;​​Pd[θ_]:=1-Pu[θ]
(*Discretizerotationvalues*)​​theta=Table[θ,{θ,π/100,π,π/100}]
(*One-hotvectorsfromdiscretizedthetavalues*)​​numBins=Length[theta];​​binToOneHot[bins_List,totalBins_Integer]:=Table[If[i==#,1,0],{i,1,totalBins}]&/@bins​​bins=Range[numBins];​​oneHotEncoded=binToOneHot[bins,Length[theta]];
(*Evaluatemeasurementprobabilitiesforeachthetavalue*)​​pr=Table[List[N[FullSimplify[Re[Pu[θ]]]],N[FullSimplify[Re[Pd[θ]]]]],{θ,π/100,π,π/100}]
(*GeneratetrainingmeasurementoutcomesforeachSubscript[θ,j](withrandomnumbergenerator)-1representsspin-upoutcomeand0spin-down*)​​(*NumberofmeasurementsforeachSubscript[θ,j]in(0,π)*)​​m=1000;​​meas=Table[{},{Length[pr]}];​​Table[Do[b=ConstantArray[0,1];Clear[r];​​updateTally[]:=Block[{r},r=RandomReal[];​​If[r<pr[[j]][[1]],b[[1]]+=1,If[pr[[j]][[1]]<=r<pr[[j]][[1]]+pr[[j]][[2]],b[[1]]+=0]]];​​Do[updateTally[],{1}];AppendTo[meas[[j]],b],{i,1,m}],{j,Length[pr]}];
(*GeneratedtrainingmeasurementoutcomesforeachSubscript[θ,j]*)​​meas=Partition[Flatten[meas],m];
(*Functiontocount1sand0s*)​​countOnesZeros[list_]:={Count[list,1],Count[list,0]}
(*Trainingdataforneuralnetwork*)​​(*SimulatedMeasurementsOutcomesforeachSubscript[θ,j]in(0,π)*)​​​​meas=Map[countOnesZeros,meas]​​trainingData=Rule@@@Transpose[{meas,oneHotEncoded}];
(*Neuralnetworkarchitecture*)​​net=NetChain[{LinearLayer[50],ElementwiseLayer["ReLU"],LinearLayer[100],SoftmaxLayer[]}];
(*Trainingthenetwork*)​​trainedNet=NetTrain[net,trainingData,MaxTrainingRounds->50000,LossFunction->CrossEntropyLossLayer["Probabilities"]]
(*Examplesetoftestmeasurements*)​​meas2={meas[[12]]}​​trainedNet/@meas2
(*Probabilityunitycheck*)​​Total[(trainedNet/@meas2)[[1]]]