I'll replace the "Machine Learning" parts of your question with "code" to keep it simple. After all, that's what it is.
"My code is learning too slow"
But it works, right? If that's the only issue, it's definitely on-topic. Classic case of a performance question.
"My code is not learning at all"
The entire purpose of ML code is to learn. If it doesn't learn at all, it's broken. Broken code has no place here.
"The (training/cross-validation/test error) in my code is too big"
That's an accuracy problem and where the trouble starts. How good is good enough? Speech recognition with an accuracy of 5%, that would be broken. After all, with such an accuracy it can't be working as intended. But where do we draw the line?
If the question is phrased as "The accuracy is not good enough" it reads an awful lot like programming-challenge questions where not all test cases are completed successfully. Which means the code is broken and not ready for review.
Another grey area would be questions saying "I currently get an accuracy of 70%, which is pretty good. Can it go even higher?".
So I guess it partly depends on how it's phrased. And I don't like that one bit. This is the major question we should be focussing on, I think.
"My Machine Learning is running too slow"
Also a performance question. No problem.