It is grammatically perfect.
It could benefit from some punctuation, like, "I sometimes hate myself, not because of the faults that I have, but because I'm so naive.".
As far as hating yourself, I understand that one, but I'd ask you to consider how much you would hate any of your friends or a stranger, for being naive? And then ask why do you then apply such force to yourself?
Aren't you as innocent as they are?
"Naivety" is the result of a lack of life experiences, so how can you blame yourself for not yet knowing what will come to you?
If you go out in to the world with good intentions, and someone else lets you down, you're not the person who deserves the hatred.
In fact, neither are they, forgive them for their weaknesses, and move on.
Look at Sir Paul McCartney, recently robbed of about £30,000.000 by a one legged former alleged prostitute.
And he's a man in his 60's or 70's and he's been all over the world many times!!!!
You're a young, pretty woman, be kind to yourself, there are already too many people out there who might hate you, don't join in with them :)