Hopfield-数字识别

import numpy as np
import neurolab as nl
import matplotlib .pyplot as plt

target = np.array([[0,0,0,0,0,0,0,0,
                   0,0,0,1,1,0,0,0,
                   0,0,1,0,0,1,0,0,
                   0,1,0,0,0,0,1,0,
                   0,1,0,0,0,0,1,0,
                   0,1,0,0,0,0,1,0,
                   0,1,0,0,0,0,1,0,
                   0,1,0,0,0,0,1,0,
                   0,1,0,0,0,0,1,0,
                   0,1,0,0,0,0,1,0,
                   0,1,0,0,0,0,1,0,
                   0,1,0,0,0,0,1,0,
                   0,1,0,0,0,0,1,0,
                   0,0,1,0,0,1,0,0,
                   0,0,0,1,1,0,0,0,
                   0,0,0,0,0,0,0,0, 
                   ],
                  [0,0,0,0,0,0,0,0,
                   0,0,0,0,1,0,0,0,
                   0,0,0,0,1,0,0,0,
                   0,0,0,1,1,0,0,0,
                   0,0,1,0,1,0,0,0,
                   0,0,0,0,1,0,0,0,
                   0,0,0,0,1,0,0,0,
                   0,0,0,0,1,0,0,0,
                   0,0,0,0,1,0,0,0,
                   0,0,0,0,1,0,0,0,
                   0,0,0,0,1,0,0,0,
                   0,0,0,0,1,0,0,0,
                   0,0,0,0,1,0,0,0,
                   0,1,1,1,1,1,1,0,
                   0,0,0,0,0,0,0,0,
                   0,0,0,0,0,0,0,0,
                   ],
                  [0,0,0,0,0,0,0,0,
                   0,1,1,1,1,1,1,0,
                   0,0,0,0,0,0,1,0,
                   0,0,0,0,0,0,1,0,
                   0,0,0,0,0,0,1,0,
                   0,0,0,0,0,0,1,0,
                   0,1,1,1,1,1,1,0,
                   0,0,0,0,0,0,1,0,
                   0,0,0,0,0,0,1,0,
                   0,0,0,0,0,0,1,0,
                   0,0,0,0,0,0,1,0,
                   0,0,0,0,0,0,1,0,
                   0,0,0,0,0,0,1,0,
                   0,1,1,1,1,1,1,0,
                   0,0,0,0,0,0,0,0,
                   0,0,0,0,0,0,0,0,]])
def vis(data,title):
    fig,ax = plt.subplots()
    ax.imshow(data,cmap = plt.cm.gray,interpolation = 'nearest')
    ax.set_title(title)
    plt.show()

for i in range(len(target)):
    vis(np.reshape(target[i],(16,8)), i)

target[target == 0] = -1
net = nl.net.newhop(target)


test_data1 =np.asfarray(
                  [0,0,0,0,0,0,0,0,
                   0,0,0,1,1,0,0,0,
                   0,0,1,0,0,1,0,0,
                   0,1,0,0,0,0,1,0,
                   0,1,0,1,0,0,1,0,
                   0,1,0,1,0,0,1,0,
                   0,1,0,0,0,0,1,0,
                   0,1,0,1,0,0,1,0,
                   0,1,0,0,0,0,1,0,
                   0,1,0,0,0,0,1,0,
                   0,1,0,0,0,0,1,0,
                   0,1,0,0,0,0,1,0,
                   0,1,0,0,0,0,1,0,
                   0,0,1,0,0,1,0,0,
                   0,1,0,1,1,0,0,0,
                   0,0,0,0,0,0,0,0])
test_data2 =np.asfarray(
                  [0,1,0,0,0,0,0,0,
                   0,0,0,0,1,0,0,0,
                   0,0,0,0,1,0,0,0,
                   0,0,0,1,1,0,0,0,
                   0,0,1,0,1,0,0,0,
                   0,0,0,0,1,0,0,0,
                   0,1,0,0,1,1,0,0,
                   0,0,0,0,1,1,0,0,
                   0,1,0,0,1,0,0,0,
                   0,0,0,0,1,0,0,0,
                   0,0,0,0,1,0,0,0,
                   0,0,1,0,1,0,0,0,
                   0,0,0,0,1,0,0,0,
                   0,1,1,1,1,1,1,0,
                   0,0,0,0,0,0,0,0,
                   0,0,0,0,0,0,0,0,])
test_data3 =np.asfarray(                   
                  [0,0,0,0,0,0,0,0,
                   0,0,0,1,1,0,1,0,
                   0,0,1,0,0,1,0,0,
                   0,0,0,0,0,0,1,0,
                   0,0,0,0,0,0,1,0,
                   0,0,0,0,0,0,1,0,
                   0,0,0,1,1,0,1,0,
                   0,1,0,0,0,0,1,0,
                   0,0,0,0,1,0,0,0,
                   0,0,1,0,0,1,0,0,
                   0,1,0,0,0,0,1,0,
                   0,1,0,0,0,0,1,0,
                   0,1,0,0,0,0,1,0,
                   0,1,0,0,1,0,1,0,
                   0,0,0,1,0,0,0,0,
                   0,0,0,0,0,0,0,0])
vis(np.reshape(test_data1,(16,8)), "test1")
vis(np.reshape(test_data2,(16,8)), "test2")
vis(np.reshape(test_data3,(16,8)), "test3")


test_data1[test_data1 == 0] = -1
out1 =net.sim([test_data1])

for i in range(len(target)):
    if(out1 == target[i]).all():
        print(i)
vis(np.reshape(out1, (16,8)), "out1")


test_data2[test_data2 == 0] = -1
out2 =net.sim([test_data2])

for i in range(len(target)):
    if(out2 == target[i]).all():
        print(i)
vis(np.reshape(out2, (16,8)), "out2")


test_data3[test_data3 == 0] = -1
out3 =net.sim([test_data3])

for i in range(len(target)):
    if(out3 == target[i]).all():
        print(i)
vis(np.reshape(out3, (16,8)), "out3")


你可能感兴趣的:(机器学习)