Python3, 294291 bytes:
y=lambda j,n,m:{'v':(n-1,m),'>':(n,m+1),'<':(n,m-1),'^':(n+1,m)}[j]
f=lambda p,s=(0,0),c=[(0,0)],l=[]:0 if not p else(k:=((r:=y(p[0],*s))in c))+(min(f(j+p[1:],[r,s][k],c+[[s],[]][k],l+[p[0]])for j in g) if (g:=[[''],[u for u in'v<>^'if y(u,*s)not in c]][k]) else f(l.pop()+p[1:],c[-1],[r]+c,l))
A veryrather unelegant solution, but not entirely brutenon-brute force, with basic backgrackingbacktracking.