如何用神经网络创建一个光学符号识别器
1、导入库文件,加载输入文件
import neurolab as nl # 神经网络的NeuroLab库
import numpy as np
input_file = 'letter.data'
2、 2、初始化数据点参量
在神经网络处理大量数据时,往往需要花费很多时间来做训练。为了展示 如何创建这个系统,这里只是用20个数据点:
num_datapoint = 20
orig_labels = 'omandig' # 不同的字符
num_output = len(orig_labels) # 不同字符的数量

3、定义训练和测试参数
num_train = int(0.9*num_datapoints)
num_test = num_datapoints - num_train
# 定义数据集提取参数
start_index = 6
end_index = -1
4、生成数据集
data = []
labels = []
with open(input_file, 'r') as f:
for line in f.readlines()
# 按Tab键分割
list_vals = line.split('\t')
# 这里增加一个错误步骤检测,查看这些字符是否在标签列表中
if list_val[1] not in orig_labels:
continue
# 提出标签,并将其添加到主列表的后面
label = np.zeros((num_output,1))
label[orig_labels.index(list_vals[1])] = 1
labels.append(label)
# 提取字符,并将其添加到主列表的后面
cur_char = np.array([float(x) for x in list_vals[start_index:
end_index]])
data.append(cur_char)
# 当有足够数据时跳出循环
if len(data) >= num_datapoints:
break
# 如下两图为部分数据参数,上图为数据data,下图为标签lables


5、将数据转换成数组,并提取数据维度信息
data = np.asfarray(data)
labels = np.array(labels).reshape(num_datapoints, num_output)
num_dims = len(data[0])
# 上图为数据data,下图为标签lables


6、迭代训练神经网络
net = nl.net.newff([[0, 1] for _ in range(len(data[0]))],\
[128, 16, num_output]) net.trainf = nl.train.train_gd error = net.train(data[:num_train, :], labels[:num_train, :], epochs=10000, show=100, goal=0.01)

7、测试输入数据预测输出结构
predicted_output = net.sim(data[num_train:, :])
print("\nTesting on unknown data:")
for i in range(num_test):
print("\nOriginal: ",orig_labeslp[np.argmax(labels[i])])
print("Predicted: ",orig_labeslp[np.argmax(predicted_output[i])])
