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")


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值