pxiangwu / plc Goto Github PK
View Code? Open in Web Editor NEWICLR 2021, "Learning with feature-dependent label noise: a progressive approach"
ICLR 2021, "Learning with feature-dependent label noise: a progressive approach"
Hello, pxiangwu. You did a great work in the PLC correction. I am confused when reading the "prob_correction“ function in the utils.py file (line 343-355). You mentioned that " If the predicted confidence exceeds this threshold, we use label correction based on likelihood ratio test. Otherwise, we use probabilistic label correction.“ But the 351 th line "flipped = flipper.multinomial(1, top_probs, 1)[0]" seems to generate a random value. Do the lines 350-355 correspond to the PLC corrrection? By the way, when the prediction has a lower confidence than the confidence threshold, its label must be changed using the codes (350-355) ? I am sorry if I understand wrongly. Thank you for your time.
Hi,
thanks for sharing your implementation. I have some questions about it:
Thanks!
In the probability correction algorithm, the generated labels should be multinoimally distributed among all the aviable labels. However according to the code given, it will just be 0 or 1
The issue come because the code
Lines 336 to 341 in 8c2bcfd
will result in a scalar top_probs
. Hence the code to generate new labels
Lines 349 to 353 in 8c2bcfd
new_label
being just 0 or 1.
Moreover the normalization here
Line 350 in 8c2bcfd
top_probs
always being 1.0
thereby invalidating the whole idea of sampling from distribution.
Is this intended behavior?
Thank you for your paper. I'm studying your paper and was hoping you could help enlighten me on the following:
n(x) is fitted to the data and as you've noted "y_x is sampled from n(x), which has quite an extreme confidence". These plus that your explicit assumption that y_x is u_x makes me wonder why there is a need to sample y_x in the first place. I dug into the code and found the following block where you sampled y_x:
#cifar/gen_noise_label.py
y_syn = []
for etaval in eta:
y_temp = torch.multinomial(etaval, 1)
y_syn.append(int(y_temp))
y_syn = np.array(y_syn).squeeze()
then those sampled y_x were used to replace the dataset's raw labels here:
trainset.update_corrupted_label(y_syn.copy())
However, the noise generation did not use the y_syn labels at all. In fact you noted this in the paper as well: "For each datum x, we only flip it to s_x or keep it as u_x". In other words, under no circumstance would you use the y_syn labels.
If you would go further to help me see why we need to sample y_x to setup a Bayes optimal classifier, I would deeply appreciate it.
Thank you!
The Code uses "lrt_correction"(LRT, ICLR2020) by default.
And the "prob_correction" seems not match PLC, it considers "cur_prob_distri[y_noise[i]]/top_probs[-1]", and no "f(x_i)-1/2,"t>=m","theta=1/2-T" can be found.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.