I would suggest that you try a soft touch/tender care slicker brush...(I like Lawrence ones) and a steel comb.
Where does he get these matts? Legs? Ears?
behind the ears?
Any area that the dog can reach to scratch or chew needs particular attention at grooming time.
Try to remove as much of the matting as possible before bathing.
Bathing tightens the matts and makes them harder to remove.
Work through the coat a section at a time using the slicker and comb, tease out any knots you come across and gently work them out with the comb.
Really bad, large sections may need to be carefully cut through in sections from the skin out to the ends of the coat using scissors or a matt breaker to break them up into smaller manageable sections, then comb out.
Eliminate fleas totally, scratching and chewing destroys coat quickly.
When bathing, never rub the coat, squeeze the lather through the coat, dilute your shampoo in jug of warm water for easier application.
Use a quality conditioner when bathing and for best results blow dry and work throught the coat with the brush and comb till dry.
When you have a knot and matt free coat, a quick daily brush through with the slicker, particularly if the dog picks up bits of grass twigs etc when outside, will keep that coat under control.
If you cannot manage with the coat at 2/3 inches maybe you could ask your groomer to cut the coat back to a more easily maintained length.
Some coats are much higher maintenance than others. It depends on the texture length curl etc.