The 26-year-old came through the academy at his boyhood club and played 149 times for the Saddlers, after making his first team debut in 2016.
He was under contract for the upcoming season but after losing his place to Jack Rose towards the end of the last campaign, the Saddlers have decided to let him go. He joins Northampton who have recently been relegated back to League Two after a year in League One.
Head coach Matt Taylor said: "We were unable to guarantee Liam a starting spot so we took the decision, along with Liam, that it was best for him to seek another challenge.
"He's been at the football club for a long time and he goes with our best wishes.
"The main thing for us now is to focus on recruiting players and working with players that want to be part of what we're trying to build this season."
Rose, who impressed with his performances last season, is now the only goalkeeper left in the squad.