如何用神经网络创建一个光学符号识别器
1、导入库文件,加载输入文件 import neurolab as nl # 神经网络的NeuroLab库 import numpy as np input_file = 'letter.data'
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泌驾台佐39;) 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])])