diff --git a/X1.py b/X1.py new file mode 100644 index 0000000..bdf2c9c --- /dev/null +++ b/X1.py @@ -0,0 +1,165 @@ +# -*- encoding: utf-8 -*- +''' +@File : X1_new.py +@License : (C)Copyright 2018-2022 + +@Modify Time @Author @Version @Desciption +------------ ------- -------- ----------- +2023/6/30 15:51 zart20 1.0 None +''' +''' +【编程16.1】编制程序:对卷积神经网络模型的数据结构赋值 +【目的及编程说明】读者通过编程16.1可理解可视化构建卷积神经网络模型相关的数据结构及其作用。这里给出的数据结构, +能够支持16.2及16.4节的输出界面,即能够绘制出一张卷积神经网络结构图。编程16.1要求为模型对象总表AllModelObj +和AllModelConn赋值。要求包含所有类型的图元对象(见下表述),并建立适当的连接关系。 +网络对象总表AllModelObj(ObjID,ObjType,ObjLable,ProcFunc, SetParaFunc, ParaString, ObjX,ObjY), +其中:ObjID 表示图元号;ObjType表示图元类别(1—数据集,2—卷积,3—池化,4—全连接,5—非线性,6—分类,7—误差计算, +8—卷积调整,9—全连接调整);ObjLable为对象标签;ProcFunc为该图元被执行时的基本操作函数; +SetParaFunc为给基本操作函数赋参数值的函数;ParaString 为同类不同图元的参数,ObjX, +ObjY为对象在仿真输出屏幕中的位置(示例中未给出,由图形界面中的位置产生)。 +''' + +# 定义一个函数,根据给定的参数生成一个AllModelObj对象 +def create_almodelobj(): + all_model = [] + obj_label = ["数据集", "卷积", "池化", "全连接", "非线性", + "分类", "误差计算", "卷积调整", "全连接调整"] + proc_func = ['LoadData', 'ConvProc', 'MaxPoolProc', 'FullConnProc', + 'NonlinearProc', 'ClassifierProc', 'ErrorProc', + 'AjConvProc', 'AjFullconnProc'] + set_para_func = ['SetDataPara', 'SetConvPara', 'SetPollPara', + 'SetFullConnPara', 'SetNonLPara', 'SetClassifyPara', + 'SetErrorPara','SetAjConvPara', 'SetAjFCPara'] + for i in range(9): + obj = [] # 创建一个列表,存储对象的属性 + obj.append(i) # 对象ID + obj.append(i % 9 + 1) # 对象类型 + obj.append(obj_label[i % 9] + f"{i // 9 + 1}") # 对象标签 + obj.append(proc_func[i % 9] + f"{i // 9 + 1}") # 对象基本功能函数 + obj.append(set_para_func[i % 9] + f"{i // 9 + 1}") # 对象功能函数参数 + obj.append('.') + obj.append(i * 20) + obj.append(i * 20) + all_model.append(obj) + return all_model + +# if __name__ == '__main__': +# all_model = create_almodelobj() +# print(all_model) + +# 定义一个函数,生成一个AllModelConn对象的列表 +def create_allmodelconn(): + all_conn = [] # 创建一个空列表,存储所有对象 + conn_obj_id = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] #储连接线编号 + conn_type = [1, 1, 1, 1, 1, 1, 2, 2, 2, 2] #储连接线类别 + # 定义一个列表,存储源图元对象 + nobj_s = ["DataSet1", "Conv1", "Pool1", "FullConn1", "Nonline1", + "Classifier1", "Error1", "Error1", "AjFullconn1", "AjConv1"] + # 定义一个列表,存储目标图元对象 + nobj_e = ["Conv1", "Pool1", "FullConn1", "Nonline1", "Classifier1", + "Error1", "AjFullconn1", "AjConv1", "FullConn1", "Conv1"] + all_conn = [ # 使用列表推导式,根据给定的参数生成所有对象 + [ # 创建一个列表,存储对象的属性 + conn_obj_id[i], # 连接线编号 + conn_type[i], # 连接线类别 + nobj_s[i], # 源图元对象 + nobj_e[i] # 目标图元对象 + ] + for i in range(len(conn_obj_id)) # 循环遍历连接线编号的长度 + ] + return all_conn + +# if __name__ == '__main__': +# all_conn = create_allmodelconn() +# print(all_conn) +# 导入需要的库 +import numpy as np # 用于处理数组 +from PIL import Image # 用于读取图片 +''' +【编程16.2】编制程序:练习加载输入数据。 +【目的及编程说明】读者通过编程16.2可理解加载数据的过程。本项目中假定输入数据的类型为图片数据, +要求读者能够实现将程序指定的图片转换为卷积神经网络模型能够接受的数据格式即数组。具体实现要求: +(1)程序读取一个固定路径的图片,; +(2)将图片缩放为 32x32固定大小,并将其转换为数组格式; +(3)将数组中具体数值归一化。该程序为编制LoadData()奠定基础。 +''' +# 定义一个函数,实现图片转换为数组的功能 +def image_to_array(path,height,width): + img = Image.open(path).convert("L") #转换为灰度模式 + img = img.resize((height, width)) # 将图片缩放为height*width的固定大小 + data = np.array(img) # 将图片转换为数组格式 + data = data / 255.0 # 将数组中的数值归一化,除以255 + return data + +# if __name__ == '__main__': +# path = 'data/train/1.jpg' # 路径 +# height, width =28, 28 # 尺寸:h,w +# data_image = image_to_array(path,height,width) +# print(data_image) + +''' +【编程16.3】编制程序:完成指定卷积核参数的卷积操作。 +【目的及编程说明】读者通过编程16.3可理解卷积操作的具体计算过程。该函数的输入数据为数组格式的数据。具体实现要求: +(1)程序中给出卷积核大小为3*3的矩阵,并给矩阵赋初始值。例如初值[[ 1, -1, 2], [ 3, -2, 1], [ 0, 1, 0]] +或[[ 0, 1, 0], [ 1, -4, 1], [ 0, 1, 0]]或自己设定; +(2)默认步长(stride)为1;(3)完成卷积计算; +(4)返回卷积后的数组。该程序为编制ConvProc()奠定基础。 +''' +# 导入需要的库 +import numpy as np # 用于处理数组 +# 定义一个函数,实现卷积操作的功能 +def convolve(data, kernel): + # 获取数据和卷积核的形状 + data_height, data_width = data.shape # 获取数据高宽 + kernel_height, kernel_width = kernel.shape # 获取卷积核高宽 + output_height = data_height - kernel_height + 1 # 以步长为1来计算输出的高宽 + output_width = data_width - kernel_width + 1 + output = np.zeros((output_height, output_width)) # 创建一个空的输出数组 + for i in range(output_height): # 遍历输出数组的每个元素,计算卷积值 + for j in range(output_width): + data_region = data[i:i+kernel_height, j:j+kernel_width] # 获取数据和卷积核的对应区域 + conv_value = np.sum(data_region * kernel) # 计算对应区域的元素乘积之和,作为卷积值 + output[i, j] = conv_value # 将卷积值赋给输出数组的对应元素 + return output + +# if __name__ == '__main__': +# path = 'data/train/1.jpg' # 路径 +# height, width = 28, 28 # 尺寸:h,w +# data_image = image_to_array(path, height, width) +# +# # 定义一个卷积核,可以自己修改 +# kernel = np.array([[1, -1, 2], +# [3, -2, 1], +# [0, 1, 0]]) +# output = convolve(data_image, kernel) # 传入数据和卷积核 +# print(output) + + +''' +【编程16.4】编制程序:完成指定参数的全连接操作。 +【目的及编程说明】读者通过编程16.4可理解全连接操作的具体计算过程。 +该函数的输入数据为数组格式的数据,输出为计算后的数组。具体实现要求: +(1)程序中给定权重矩阵[[0.1, 0.2, 0.3], [0.2, 0.3, 0.4]]和偏置向量[0.1, 0.2] +(注:可自己自主设定参数); +(2)计算输入数据和权重矩阵的乘积(注意矩阵的维度),并加上偏置向量; +(3)返回计算后的数组。该程序为编制FullConnProc()奠定基础。 +''' + +# 定义一个函数,实现全连接操作 +def full_connect(input_data, weight_matrix, bias_vector): + output_data = np.dot(input_data, weight_matrix) # 计算输入数据和权重矩阵的乘积 + bias_vector = np.expand_dims(bias_vector, axis=0) # 扩展偏置向量的形状 + bias_vector = np.expand_dims(bias_vector, axis=0) + output_data = output_data + bias_vector # 加上偏置向量 + return output_data # 返回输出数据 + +# if __name__ == '__main__': +# weight_matrix = np.array([[0.1, 0.2, 0.3], [0.2, 0.3, 0.4]]) # 给定权重矩阵和偏置向量,可以自己调整 +# bias_vector = np.array([0.1, 0.2, 0.3]) +# # 假设输入数据为一个三维数组,每一层代表一个样本,每一行代表一个特征,每一列代表一个通道 +# input_data = np.array([[[1, 2], [3, 4], [5, 6]], +# [[7, 8], [9, 10], [11, 12]], +# [[13, 14], [15, 16], [17, 18]]]) +# output_data = full_connect(input_data,weight_matrix,bias_vector) +# print(output_data) + diff --git a/X2.py b/X2.py new file mode 100644 index 0000000..17b083e --- /dev/null +++ b/X2.py @@ -0,0 +1,224 @@ +import tkinter as tk +from PIL import Image, ImageTk + +global Viewcanvas # 定义画布 +global Root # 主窗口 +global AllModelObj #网络对象 + +''' +【编程16.5】编制程序:依据AllModelObj和AllModelConn数据结构产生如图16.2的输出界面。 +【目的及编程说明】读者通过编程16.5可理解卷积神经网络模型构建的输出界面。数据结构及初始值参见【编程16.1】。 +''' +# 定义图元对象类 +class ModelObj: + def __init__(self, ObjID, ObjType, ObjLable, ProcFunc, SetParaFunc, ParaString, ObjX, ObjY): + self.ObjID = ObjID # 图元号 + self.ObjType = ObjType # 图元类别 + self.ObjLable = ObjLable # 对象标签 + self.ProcFunc = ProcFunc # 基本操作函数 + self.SetParaFunc = SetParaFunc # 参数设置函数 + self.ParaString = ParaString # 参数字符串 + self.ObjX = ObjX # 对象位置x坐标 + self.ObjY = ObjY # 对象位置y坐标 + + def output(self): # 输出方法 + # 创建一个空列表 + result = [] + # 将对象的属性添加到列表中 + result.append(self.ObjID) + result.append(self.ObjType) + result.append(self.ObjLable) + result.append(self.ProcFunc) + result.append(self.SetParaFunc) + result.append(self.ParaString) + result.append(self.ObjX) + result.append(self.ObjY) + # 返回列表 + return result + +# 定义网络连接对象类 +class ModelConn: + def __init__(self, ConnObjID, ConnType, NobjS, NobjE): + self.ConnObjID = ConnObjID # 连接线编号 + self.ConnType = ConnType # 连接线类别 + self.NobjS = NobjS # 源图元对象 + self.NobjE = NobjE # 目标图元对象 + + def __repr__(self): + return f"{self.ConnObjID}, {self.ConnType}, {self.NobjS}, {self.NobjE}" + +def create_instance(): + # 创建图元对象实例 + DataSet = ModelObj("DataSet", 1, "数据集", "LoadData", "SetDataPara", ".", 120, 330).output() + Conv = ModelObj("Conv", 2, "卷积", "ConvProc", "SetConvPara", ".", 250, 330).output() + Pool = ModelObj("Pool", 3, "最大池化", "MaxPoolProc", "SetPollPara", ".", 380, 330).output() + FullConn = ModelObj("FullConn", 4, "全连接", "FullConnProc", "SetFullConnPara", ".", 510, 330).output() + Nonline = ModelObj("Nonline", 5, "非线性函数", "NonlinearProc", "SetNonLPara", ".", 640, 330).output() + Classifier = ModelObj("Classifier", 6, "分类", "ClassifierProc", "SetClassifyPara", ".", 780, 330).output() + Error = ModelObj("Error", 7, "误差计算", "ErrorProc", "SetErrorPara", ".", 710, 124).output() + AjConv = ModelObj("AjConv", 8, "卷积调整", "AjConvProc", "SetAjConvPara", ".", 250, 70).output() + AjFullconn = ModelObj("AjFullconn", 9, "全连接调整", "AjFullconnProc", "SetAjFCPara", ".", 510, 120).output() + listinstance = [DataSet,Conv,Pool,FullConn,Nonline,Classifier,Error,AjConv,AjFullconn] + return listinstance # 还回图元对象实例列表 + +# if __name__ == '__main__': +# listinstance = create_instance() +# for instance in listinstance: +# print(instance) + +def connect_class(listinstance): + # 创建连接对象实例 + Line1 = ModelConn(1, 1, listinstance[0], listinstance[1]) + Line2 = ModelConn(2, 1, listinstance[1], listinstance[2]) + Line3 = ModelConn(3, 1, listinstance[2], listinstance[3]) + Line4 = ModelConn(4, 1, listinstance[3], listinstance[4]) + Line5 = ModelConn(5, 1, listinstance[4], listinstance[5]) + Line6 = ModelConn(6, 1, listinstance[5], listinstance[6]) + Line7 = ModelConn(7, 2, listinstance[6], listinstance[8]) + Line8 = ModelConn(8, 2, listinstance[6], listinstance[7]) + Line9 = ModelConn(9, 2, listinstance[8], listinstance[3]) + Line10 = ModelConn(10, 2, listinstance[7], listinstance[1]) + listclass = [Line1,Line2, Line3, Line4, Line5, Line6, Line7, Line8, Line9, Line10] + return listclass # # 还回连接对象实例 + +# if __name__ == '__main__': +# listinstance = create_instance() +# listclass = connect_class(listinstance) +# for iclass in listclass: +# print(iclass) + +def element(path): + imgs = Image.open(path) # 加载图元对应的图片文件 + imgs = imgs.resize((60, 50)) # 使用resize方法调整图片 + imgs = ImageTk.PhotoImage(imgs) # 把Image对象转换成PhotoImage对象 + Root.img = imgs # 保存图片的引用,防止被垃圾回收 + return imgs + +# if __name__ == '__main__': +# Root = tk.Tk() # 创建一个主窗口 +# img_path = ["img/data.png", "img/conv.png", "img/pool.png", "img/full_connect.png", "img/nonlinear.png", +# "img/classifier.png", "img/error.png", "img/adjust.png"] # 图元路径 +# list_image = [] # 定义一个列表,存储PhotoImage对象 +# for path in img_path: +# list_image.append(element(path)) +# for image in list_image: +# print(image) # 打印结果 + +def window(): + global Root + global Viewcanvas + Root = tk.Tk() # 创建一个主窗口 + # 设置窗口的大小为1200*750 + window_width = 900 # 窗口的宽度 + window_height = 550 # 窗口的高度 + Root.title("神经网络可视化") + Root.geometry("900x550") # 设置窗口的大小和位置 + # 创建一个画布,用于绘制矩形框,设置画布的大小和背景色 + Viewcanvas = tk.Canvas(Root, width=window_width, height=window_height, bg="white") + # 将画布添加到主窗口中 + Viewcanvas.pack() + # 绘制矩形框,使用不同的颜色和线宽,指定矩形框的左上角和右下角坐标,填充色,边框色和边框宽度 + Viewcanvas.create_rectangle(5, 5, 895, 545, fill=None, outline="lightblue", width=2) + +# if __name__ == '__main__': +# window() +# path = "img/data.png" # 图元路径 +# image =element(path) +# print(image) # 打印结果 +# Root.mainloop() + +def connecting_lines(obj_x, obj_y, obj_x1, obj_x2, obj_x3, obj_y1, obj_y2, obj_y3, image, text, smooth, width): + Viewcanvas.create_image(obj_x, obj_y, image=image) # 创建图元对象 + Viewcanvas.create_text(obj_x1, obj_y1, text=text, font=("黑体", 14)) # 创建图元对象的标签 + Viewcanvas.create_line(obj_x2, obj_y2, obj_x3, obj_y3, arrow=tk.LAST, # 创建数据线箭头 + arrowshape=(16, 20, 4), fill='lightblue', smooth=smooth, width=width) + +def connectings_lines(obj_x, obj_y, obj_x1, obj_x2, obj_x3,obj_x4, obj_y1, obj_y2, obj_y3, obj_y4, image, text, smooth, width): + # 创建图元对象 + Viewcanvas.create_image(obj_x, obj_y, image=image) + # 创建图元对象的标签 + Viewcanvas.create_text(obj_x1, obj_y1, text=text, font=("黑体", 14)) + # 创建数据线箭头 + Viewcanvas.create_line(obj_x2, obj_y2, obj_x3, obj_y3, obj_x4, obj_y4, arrow=tk.LAST, + arrowshape=(16, 20, 4), fill='lightblue', smooth=smooth, width=width) + +# if __name__ == '__main__': +# window() +# listinstance = create_instance() +# # 创建网络对象总表和网络连接对象总表 +# AllModelObj = [listinstance[0], listinstance[1], listinstance[2], listinstance[3], listinstance[4], listinstance[5], +# listinstance[6], listinstance[7], listinstance[8]] +# img_path = ["img/data.png", "img/conv.png", "img/pool.png", "img/full_connect.png", "img/nonlinear.png", +# "img/classifier.png", "img/error.png", "img/adjust.png"] +# list_image = [] +# for path in img_path: +# list_image.append(element(path)) +# obj_x = AllModelObj[0][6] # 根据对象的id计算x坐标 +# obj_y = AllModelObj[0][7] # 根据对象的id计算y坐标 +# obj_x2 = AllModelObj[5][6] # 根据对象的id计算x坐标 +# obj_y2 = AllModelObj[5][7] # 根据对象的id计算y坐标 +# connecting_lines(obj_x, obj_y, 0, 32, 100, 50, 0, 0, list_image[0], " 加载" + "\n" + "数据集", True, 3) +# connectings_lines(obj_x2, obj_y2, 0, 0, 0, -50, 50, -30, -120, -180, list_image[5], "类别", False, 3) +# Root.mainloop() +def switch(obj_type, obj_x, obj_y,listimage): + if obj_type == 1: # 加载数据集 + connecting_lines(obj_x, obj_y, obj_x+0, obj_x+32, obj_x+100, obj_y+50, obj_y+0, obj_y+0, listimage[0], " 加载" + "\n" + "数据集", True, 3) + elif obj_type == 2: # 卷积 + connecting_lines(obj_x, obj_y, obj_x+0, obj_x+30, obj_x+100, obj_y+50, obj_y+0, obj_y+0, listimage[1], "卷积", True, 3) + elif obj_type == 3: # 池化 + connecting_lines(obj_x, obj_y, obj_x+0, obj_x+30, obj_x+100, obj_y+50, obj_y+0, obj_y+0, listimage[2], "池化", True, 3) + elif obj_type == 4: # 全连接 + connecting_lines(obj_x, obj_y, obj_x+0, obj_x+30, obj_x+100, obj_y+50, obj_y+0, obj_y+0, listimage[3], "全连接" + "\n" + " 函数", True, 3) + elif obj_type == 5: # 非线性 + connecting_lines(obj_x, obj_y, obj_x+0, obj_x+30, obj_x+110, obj_y+50, obj_y+0, obj_y+0, listimage[4], "非线性" + "\n" + " 函数", True, 3) + elif obj_type == 6: # 分类 + connectings_lines(obj_x, obj_y, obj_x+0, obj_x+0, obj_x+0, obj_x-50, obj_y+50, obj_y-30, obj_y-120, obj_y-180, listimage[5], "类别", False, 3) + elif obj_type == 7: # 误差计算 + connectings_lines(obj_x, obj_y, obj_x+0, obj_x-20, obj_x-50, obj_x-420, obj_y-40,obj_y -20,obj_y -60,obj_y -60, listimage[6], "误差", False, 2) + connecting_lines(obj_x, obj_y, obj_x+0, obj_x-40, obj_x-170, obj_y-40, obj_y+0, obj_y+0, listimage[6], "误差", False, 2) + elif obj_type == 8: # 调整 + connecting_lines(obj_x, obj_y, obj_x-80, obj_x+0, obj_x+0, obj_y+0, obj_y+30, obj_y+235, listimage[7], "调整1", False, 2) + elif obj_type == 9: # 调整 + connecting_lines(obj_x, obj_y, obj_x-80, obj_x+0, obj_x+0, obj_y+0,obj_y+ 30,obj_y+ 183, listimage[7], "调整2", False, 2) + +def creating_elements(AllModelObj,listimage): + # 遍历AllModelObj列表,在窗口左侧创建图元菜单 + for obj in AllModelObj: + # 获取图元对象的类型、标签等信息 + obj_type = obj[1] + # 并且要根据需求调整每个对象的位置 + obj_x = obj[6] # 根据对象的id计算x坐标 + obj_y = obj[7] # 根据对象的id计算y坐标 + # 根据对象的类型,绘制相应的图形 + switch(obj_type, obj_x, obj_y,listimage) + + +def main(): + global AllModelObj + window() + listinstance = create_instance() + listclass = connect_class(listinstance) + # 创建网络对象总表和网络连接对象总表 + AllModelObj = [listinstance[0],listinstance[1], listinstance[2], listinstance[3], listinstance[4], listinstance[5], + listinstance[6], listinstance[7], listinstance[8]] + AllModelConn = [listclass[0], listclass[1], listclass[2], listclass[3], listclass[4], listclass[5], listclass[6], + listclass[7], listclass[8], listclass[9]] + + img_path = ["img/data.png", "img/conv.png", "img/pool.png", "img/full_connect.png", "img/nonlinear.png", + "img/classifier.png", "img/error.png", "img/adjust.png"] + list_image = [] + for path in img_path: + list_image.append(element(path)) + creating_elements(AllModelObj, list_image) + print(1) + Root.mainloop() +if __name__ == '__main__': + main() + + + + + + + + diff --git a/X3.py b/X3.py new file mode 100644 index 0000000..210c63c --- /dev/null +++ b/X3.py @@ -0,0 +1,603 @@ +import os +import numpy as np +import tkinter as tk +from tkinter import filedialog +from PIL import Image +from X1 import image_to_array + +''' +【编程16.6】编制程序:设置加载数据集的参数SetLoadData()及加载数据集LoadData()。 +【目的及编程说明】读者通过编程16.6可掌握读取文件及数据预处理的相关方法。SetLoadData()设置加载数据集的相关参数, +LoadData()按所设置的参数读取数据集。SetDataPara函数实现的具体要求为: +(1)确定参数信息,如数据集路径信息、图片大小、每批次读入图片的数量等; +(2)返回DataPara参数。 +LoadData函数实现的具体要求为: +(1)根据路径信息读入图片; +(2)将图片缩放为固定大小; +(3)将图片转换为数组的形式; +(4)将数组中具体数值归一化; +(5)返回转换后的数组。 +''' + +# 定义一个函数,实现图片转换为数组的功能 +def image_to_array(path,height,width): + img = Image.open(path).convert("L") #转换为灰度模式 + img = img.resize((height, width)) # 将图片缩放为height*width的固定大小 + data = np.array(img) # 将图片转换为数组格式 + data = data / 255.0 # 将数组中的数值归一化,除以255 + return data + +def setload_data(): # 定义加载数据集的参数SetLoadData() + # 设置数据集路径信息 + train_imgPath = 'data/train/' # 训练集文件夹的位置 + test_imgPath = 'data/verify/' # 测试集文件夹的位置 + img_width = 48 # 图片宽度 + img_height = 48 # 图片高度 + # 设置每批次读入图片的数量 + batch_size = 32 # 批次大小 + # 返回DataPara参数,这里用一个字典来存储 + DataPara = {"train_imgPath": train_imgPath, + "test_imgPath": test_imgPath, + "img_width": img_width, + "img_height": img_height, + "batch_size": batch_size} + return DataPara + +# if __name__ == '__main__': +# root = tk.Tk() +# root.withdraw() +# DataPara = setload_data() +# print(DataPara) +# 定义加载数据集load_data() +def load_data(DataPara): + imgPaths=["train_imgPath","test_imgPath"] # DataPara的键名 + listimages=[] # 存储图片的列表 + for datapath in imgPaths: + filenames = os.listdir(DataPara[datapath]) + images = [] # 存储图片的列表 + for tfname in filenames: + if os.path.isdir(tfname) == False: # 如果不是子文件夹,就是图片文件 + path = DataPara[datapath] + tfname # 拼接图片路径 + # 引用X1里面的image_to_array()方法 + img = image_to_array(path, DataPara["img_width"], DataPara["img_height"]) # 读取图片数据 + img = img.T # 转置,图像的行和列将互换位置。 + images.append(img) # 将图片数组添加到训练集图片列表中 + listimages.append(np.array(images)) # 返回转换后的数组 + return listimages[0],listimages[1] +# if __name__ == '__main__': +# root = tk.Tk() +# root.withdraw() +# DataPara = setload_data() +# train_images, test_images = load_data(DataPara) +# print(train_images.shape) +# print(test_images.shape) +''' +【编程16.7】编制程序:设置卷积参数SetConvPara()及卷积函数ConvProc()。 +【目的及编程说明】读者通过编程16.7可实现卷积神经网络中的重要步骤—卷积,它将一个卷积核应用于输入图像, +以提取特征。SetConvPara()设置相关参数,ConvProc()按相关参数完成卷积计算。 +SetConvPara ()实现的具体要求为: +(1)确定参数信息:卷积核大小、步长、填充; +(2)返回ConvPara参数。 +ConvProc() 实现的具体要求为: +(1)获取输入数据的大小; +(2)获取卷积核的大小; +(3)计算输出数据的大小; +(4)对于每一个输出位置,进行卷积操作; +(5)返回卷积计算后的数组(特征向量)。 +''' +# 定义设置卷积参数的函数SetConvPara() +def setconv_para(): + kernel_h = 3 # 设置卷积核大小,这里假设是3x3 + kernel_w = 3 + kernel = [[1.289202, -1.471377, -0.238452],# 卷积核为3x3的单位矩阵(高斯分布),通常再乘上一个小的数,比如0.1 + [-0.562343, -0.019988, -0.441446], + [1.627381, 1.390266, 0.812486]] + stride = 1 # 设置步长,这里假设是1 + padding = 0 # 设置填充,这里假设是0 + ConvPara = {"kernel": kernel,# 返回ConvPara参数,这里用一个字典来存储 + "kernel_h": kernel_h, + "kernel_w": kernel_w, + "stride": stride, + "padding": padding} + return ConvPara + +# if __name__ == '__main__': +# ConvPara = setconv_para() +# print(ConvPara) + +def conv_proc(image, ConvPara): # 定义卷积函数ConvProc() + c, image_h, image_w = image.shape # 获取输入数据的大小,这里假设是单通道的图片 + kernel_h = ConvPara["kernel_h"] # 获取卷积核的大小和卷积核 + kernel_w = ConvPara["kernel_w"] + kernel = ConvPara["kernel"] + out_h = (image_h - kernel_h) // ConvPara["stride"] + 1 # 计算输出数据的大小 + out_w = (image_w - kernel_w) // ConvPara["stride"] + 1 + output = np.zeros((c, out_h, out_w)) # 初始化输出数据为零矩阵 + for k in range(c): # 遍历每个通道 + for i in range(out_h):# 遍历每个输出位置 + for j in range(out_w): + stride = ConvPara["stride"] # 获得步长 + output[k, i, j] = np.sum(image[k, i * stride:i * stride + 3, j * stride:j * stride + 3] * kernel)# 计算卷积操作 + + return output # 返回卷积计算后的数组(特征向量) + +# if __name__ == '__main__': +# root = tk.Tk() +# root.withdraw() +# DataPara = setload_data() +# train_images, test_images = load_data(DataPara) +# ConvPara = setconv_para() +# conv_images = [] # 存储卷积处理后的图片的列表 +# for image in train_images: # 获取训练集的图片数据 +# dim = len(image.shape) # 获取矩阵的维度 +# if dim == 2: # 如果是二维矩阵,则转化为三维矩阵 +# image_h, image_w = image.shape +# image = np.reshape(image, (1, image_h, image_w)) +# output = conv_proc(image, ConvPara) # 调用ConvProc()函数,根据ConvPara参数完成卷积计算 +# conv_images.append(output) # 将卷积结果存储到列表 +# conv_images = np.array(conv_images) # 将卷积处理后的图片列表转换为数组形式,方便后续处理 +# print(conv_images) + +def convolutional_operation(images): + global ConvPara + # 存储卷积处理后的图片的列表 + conv_images = [] + # 获取训练集的图片数据 + for image in images: + # 获取矩阵的维度 + dim = len(image.shape) + # 如果是二维矩阵,则转化为三维矩阵 + if dim == 2: + image_h, image_w = image.shape + image = np.reshape(image, (1, image_h, image_w)) + # 调用ConvProc()函数,根据ConvPara参数完成卷积计算 + output = conv_proc(image, ConvPara) + # 将卷积结果存储到列表 + conv_images.append(output) + # 若为三维矩阵,则保持不变直接卷积处理 + elif dim == 3: + output = conv_proc(image, ConvPara) + conv_images.append(output) + # 将卷积处理后的图片列表转换为数组形式,方便后续处理 + conv_images = np.array(conv_images) + return conv_images +''' +【编程16.8】编制程序:设置池化参数SetPoolPara()及池化函数PoolProc()。 +【目的及编程说明】读者通过编程16.8可掌握池化函数的基本方法。池化的作用是在卷积神经网络的特征提取过程中, +对卷积后提取到的数组进行降维处理,从而降低特征数组的维度和计算量。SetPoolPara()设置相关参数, +PoolProc ()按相关参数完成池化处理。 +SetPoolPara()实现的具体要求为: +(1)确定参数信息:池化的类型Poolmode、池化窗口大小pool_size、步长stride; +(2)返回PoolPara参数。 +PoolProc()实现的具体要求为: +(1)获取输入数据的形状; +(2)获取池化窗口的大小; +(3)创建一个输出结果数组,计算池化后的结果大小; +(4)对每个池化窗口应用池化函数,判断池化类型:池化模式为'max', +则使用窗口中的最大值;池化模式为'avg',则使用窗口中的平均值; +池化模式为'min',则使用窗口中的最小值; +(5)返回池化计算后的数组。 +''' +def setpool_para(): # 定义设置池化参数的函数 + pool_mode = "max" # 设置池大小和池类型,这里假设是2x2最大池化 + pool_size = 2 + stride = 2 # 设置步长,这里假设是2 + PoolPara = {"pool_mode": pool_mode,"pool_size": pool_size,"stride": stride} # 返回PoolPara参数,这里用一个字典来存储 + return PoolPara # 返回PoolPara参数 +# if __name__ == '__main__': +# PoolPara = setpool_para() +# print(PoolPara) + +def pool_proc(image, PoolPara): # 定义池化函数 + pool_mode = PoolPara["pool_mode"] + pool_size = PoolPara["pool_size"] + stride = PoolPara["stride"] + c, h, w = image.shape # 获取输入特征图的高度和宽度 + out_h = int((h - pool_size) / stride) + 1 # 计算输出特征图的高度 + out_w = int((w - pool_size) / stride) + 1 # 计算输出特征图的宽度 + out = np.zeros((c, out_h, out_w)) # 初始化输出特征图为全零数组 + for k in range(c): # 对于输出的每一个位置上计算: + for i in range(out_h): + for j in range(out_w): + window = image[k, i * stride:i * stride + pool_size, j * stride:j * stride + pool_size] + if pool_mode == "max": # 最大池化 + out[k][i][j] = np.max(window) + elif pool_mode == "avg": # 平均池化 + out[k][i][j] = np.mean(window) + elif pool_mode == "min": # 最小池化 + out[k][i][j] = np.min(window) + else: # 无效的池化类型 + raise ValueError("Invalid pooling mode") + return out # 返回特征图。 +# if __name__ == '__main__': +# ··· +# PoolPara = setpool_para() +# pool_images = [] # 存储池化处理后的图片的列表 +# for image in conv_images: # 获取卷积后的图片数据 +# output = pool_proc(image, PoolPara) +# pool_images.append(output) # 将池化结果存储到列表 +# pool_images = np.array(pool_images) # 将池化处理后的图片列表转换为数组形式,方便后续处理 +# print(pool_images) + +def pooling_treatment(conv_images): + global PoolPara + pool_images = [] # 存储池化处理后的图片的列表 + for image in conv_images: # 获取卷积后的图片数据 + output = pool_proc(image, PoolPara) + pool_images.append(output) # 将池化结果存储到列表 + pool_images = np.array(pool_images) # 将池化处理后的图片列表转换为数组形式,方便后续处理 + return pool_images +''' +【编程16.9】编制程序:设置全连接参数SetFullConnPara()及全连接函数FullConnProc()。 +【目的及编程说明】读者通过编程16.9可掌握全连接处理的基本方法。全连接是将前面卷积和池化层提取到的数组转换为一个一维的数组, +并将其传递给后面的分类器进行分类。全连接层中的每个神经元都与前一层中的所有神经元相连, +因此全连接层可以将前一层中提取的所有特征信息汇总到一个向量中,为后续的分类任务提供更加丰富的特征表示。 +全连接层具有较高的参数数量和计算量。SetFullConnPara()设置全连接相关参数,FullConnProc()按相关参数完成全连接操作。 +SetFullConnPara()实现的具体要求为: +(1)确定参数信息: 权重矩阵、偏置向量; +(2)返回:FullConnPara参数。 +FullConnProc() 实现的具体要求为: +(1)对输入进行展平处理,变换为单通道的二维数组格式(如果输入数据为三通道,需要将其转换为单通道的二维数组形式); +(2)计算全连接层的线性变换:inputdata与权重矩阵w进行乘法,再加上偏置向量b; +(3)返回全连接计算后的数组。 +''' +def setfullconn_para(data): # 定义一个函数来设置全连接层的相关参数,这里可以根据实际情况修改或随机生成 + c, height, width = data.shape# 获取池化后的图片数组的长度和宽度 + num_outputs = 10 # 输出维度为10,可以设置 + weights = np.random.randn(num_outputs, height * width) * 0.1 # 设置权重矩阵 + bias = np.random.randn(1, num_outputs) # 偏置向量 + FullConnPara = {"weights": weights, "bias": bias, "num_outputs": num_outputs} + return FullConnPara # 返回FullConnPara参数 +def fullconn_proc(inputdata, FullConnPara): # 定义一个函数来完成全连接操作 + weights = FullConnPara["weights"] # 从FullConnPara参数中获取权重矩阵 + bias = FullConnPara["bias"] # 偏置向量 + inputdata = inputdata.reshape(1, inputdata.shape[1] * inputdata.shape[2]) # 对输入进行展平处理,变换为单通道的一维数组格式 + output = np.dot(inputdata, weights.T) + bias # 计算全连接层的线性变换:inputdata与权重矩阵w进行乘法,再加上偏置向量b + return output # 返回全连接计算后的数组 +# if __name__ == '__main__': +# ··· +# FullConnPara = setfullconn_para(pool_images[0]) +# fullconn_images = [] # 存储全连接处理后的图片的列表 +# for image in pool_images: # 获取池化后的图片数据 +# output = fullconn_proc(image, FullConnPara) +# fullconn_images.append(output) # 将全连接处理后的结果存储到列表 +# fullconn_images = np.array(fullconn_images) # 将全连接处理后的图片列表转换为数组形式,方便后续处理 + +def fullyconnected_operation(pool_images): + global FullConnPara + # 存储全连接处理后的图片的列表 + fullconn_images = [] + # 获取池化后的图片数据 + for image in pool_images: + output = fullconn_proc(image, FullConnPara) + # 将全连接处理后的结果存储到列表 + fullconn_images.append(output) + # 将全连接处理后的图片列表转换为数组形式,方便后续处理 + fullconn_images = np.array(fullconn_images) + return fullconn_images +''' +【编程16.10】编制程序:设置非线性参数SetNonLPara()及非线性函数NonlinearProc()。 +【目的及编程说明】读者通过编程16.10可掌握非线性函数使用的基本方法。它的主要作用是引入非线性特性,从而使网络能够学习更加复杂的特征和模式。 +通过激活函数将线性组合的输出进行非线性变换,使得网络可以处理非线性关系和非线性变换,从而更好地适应数据的复杂性。 +主要包含的类型:常用的非线性函数包括ReLU、tanh和sigmoid等。非线性函数的输入数据是特征向量。非线性函数应该返回应用激活函数后的特征向量。 +SetNonLPara()设置相关参数,NonlinearProc()按相关参数完成对输入数据的非线性处理操作。 +SetNonLPara()实现的具体要求为: +(1)确定参数信息:非线性函数的类型; +(2)返回:NonLPara参数。 +NonlinearProc(inputdata,NonLPara) 实现的具体要求为: +(1)判断NonLPara,进行相应的计算:Sigmoid\Relu\Tanh; +(2)返回计算后的值。 +''' +def setnonl_para(): # 定义设置非线性参数的函数 + # 可以选择"Sigmoid", "ReLU" 或 "Tanh" + nonlinearmode = "ReLU" # 确定参数信息:非线性函数的类型 + NonLPara = {"nonlinearmode": nonlinearmode} # 返回NonLPara参数,这里用一个字典来存储 + return NonLPara # 返回NonLPara参数 + +def nonlinear_proc(inputdata, NonLPara): # 定义非线性函数 + nonlinearmode = NonLPara["nonlinearmode"] # 从NonLPara参数中获取非线性函数类型 + if nonlinearmode == "Sigmoid": # 判断nonlinearmode,进行相应的计算 + output = 1 / (1 + np.exp(-inputdata)) # Sigmoid函数,将任何实数的输入映射到0和1之间的输出 + elif nonlinearmode == "ReLU": + output = np.maximum(inputdata, 0) # ReLU函数,将负数输入置为0,而正数输入保持不变 + elif nonlinearmode == "Tanh": + output = np.tanh(inputdata) # Tanh函数,将任何实数的输入映射到-1和1之间的输出 + else: + raise ValueError("Invalid nonlinear mode") # 非法的非线性类型,抛出异常 + return output # 返回计算后的值 + +# if __name__ == '__main__': +# ··· +# NonLPara = setnonl_para() +# nonlinear_images = [] +# for image in fullconn_images: # 获取全连接处理后的图片数据 +# output = nonlinear_proc(image, NonLPara) +# nonlinear_images.append(output) # 将非线性处理后的结果存储到列表 +# nonlinear_images = np.array(nonlinear_images) # 将非线性处理后的图片列表转换为数组形式,方便后续处理 + +def activation(fullconn_images): + global NonLPara + # 存储非线性处理后的图片的列表 + nonlinear_images = [] + for image in fullconn_images: # 获取全连接处理后的图片数据 + output = nonlinear_proc(image, NonLPara) + # 将非线性处理后的结果存储到列表 + nonlinear_images.append(output) + # 将非线性处理后的图片列表转换为数组形式,方便后续处理 + nonlinear_images = np.array(nonlinear_images) + return nonlinear_images + +''' +【编程16.11】编制程序:设置分类函数参数SetClassifyPara()及分类函数ClassifierProc()。 +【目的及编程说明】读者通过编程16.11可掌握输出分类函数的基本方法。 +SetClassifyPara()设置相关参数,ClassifierProc ()按相关参数完成对输入数据的分类标签设置。 +SetClassifyPara()实现的具体要求为: +(1)设定阈值; +(2)返回:ClassifyPara参数。 +ClassifierProc()实现的具体要求为: +(1)找到概率超过阈值的标签分类,就是分类结果; +(2)返回分类标签。 +''' +def setclassify_para(): # 定义设置分类函数参数的函数 + threshold = 0.1 # 设定阈值,可以根据你的数据和任务来调整阈值 + ClassifyPara = {"threshold": threshold} # 返回ClassifyPara参数,这里用一个字典来存储 + return ClassifyPara # 返回ClassifyPara参数 +def classifier_proc(inputdata, ClassifyPara): # 定义分类函数 + def softmax(x): # 定义softmax函数 + x -= np.max(x) # 减去最大值,防止数值溢出 + return np.exp(x) / np.sum(np.exp(x)) # 计算指数和归一化 + threshold = ClassifyPara["threshold"] # 从ClassifyPara参数中获取阈值 + output = -1 # 初始化输出为-1 + prob = softmax(inputdata) # 调用softmax函数,得到概率分布向量 + prob1 = prob[prob >= threshold] # 如果概率高于阈值,就将该类别加入输出结果 + index = np.where(prob == max(prob1)) # 使用where()函数来返回等于概率最大值的元素的索引 + output = index[1].item(0) + 1 # 使用item()方法来将索引转换为标准Python标量 + return output # 返回分类标签 + +# if __name__ == '__main__': +# ··· +# classifier_images = [] # 存储分类处理后的图片的列表 +# prob_images = [] # 存储分类处理后的概率向量 +# for image in nonlinear_images: # 获取非线性处理后的图片数据 +# def softmax(x): # 定义softmax函数 +# x -= np.max(x) # 减去最大值,防止数值溢出 +# return np.exp(x) / np.sum(np.exp(x)) # 计算指数和归一化 +# prob = softmax(image) # 调用softmax函数,得到概率分布向量 +# prob_images.append(prob) # 将概率向量结果存储到列表 +# classifypara = setclassify_para() +# output = classifier_proc(image, classifypara) # 进行分类处理 +# classifier_images.append(output) # 将分类结果存储到列表 +# classifier_images = np.array(classifier_images) # 将分类的结果列表转换为数组形式,方便后续处理 + +def classify(nonlinear_images): + global ClassifyPara + classifier_images = [] # 存储分类处理后的图片的列表 + prob_images = [] # 存储分类处理后的概率向量 + for image in nonlinear_images: # 获取非线性处理后的图片数据 + def softmax(x): # 定义softmax函数 + x -= np.max(x) # 减去最大值,防止数值溢出 + return np.exp(x) / np.sum(np.exp(x)) # 计算指数和归一化 + prob = softmax(image) # 调用softmax函数,得到概率分布向量 + prob_images.append(prob) # 将概率向量结果存储到列表 + output = classifier_proc(image, ClassifyPara) # 进行分类处理 + classifier_images.append(output) # 将分类结果存储到列表 + classifier_images = np.array(classifier_images) # 将分类的结果列表转换为数组形式,方便后续处理 + print(classifier_images) + return classifier_images, prob_images +''' +【编程16.12】编制程序:设置标签类别SetLabelPara()及为样本标记标签函数LabelProc()。 +【目的及编程说明】读者通过编程16.12为样本标记标签的过程。SetLabelPara()实现的具体要求为: +设置标签类别列表,将标签列表转化为one-hot向量的形式。 +LabelProc()实现的具体要求为: +(1)读取样本数据集,遍历每个样本; +(2)读取标签列表; +(3)将样本和对应的标签组成元组,返回标记好标签的样本列表。 +''' +def setlabel_para(): # 定义设置标签类别的函数 + label_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] # 设置标签类别列表,可以根据你的数据和任务来调整 + one_hot_matrix = np.eye(len(label_list)) # 创建一个单位矩阵,大小为标签类别的个数 + LabelPara = (label_list, one_hot_matrix) # 返回标签类别列表和one-hot矩阵,这里用一个元组来存储 + return LabelPara # 返回LabelPara参数 + +def label_proc(nonlinear_images,prob_images, classifier_images):# 定义为样本标记标签的函数 + global LabelPara + label = [] + for i in range(nonlinear_images.shape[0]): + label_list = np.append(prob_images[i], classifier_images[i]) # 连接起来形成一个新的数组 + label.append(label_list) # label_list添加到label列表中 + LABEL = np.array(label) # 使用np.array()将label列表转换为LABEL数组 + sampledata = np.array(LABEL) # 读取样本数据集,假设是一个二维数组,每一行是一个样本,每一列是一个特征 + label_list, one_hot_matrix = LabelPara # 读取标签列表和one-hot矩阵,假设样本的最后一列是标签值 + labeled_samples = [] # 遍历每个样本,将样本和对应的标签组成元组,返回标记好标签的样本列表 + for sample in sampledata: + features = sample[:-1] # 获取样本的特征部分和标签部分 + label = sample[-1] + index = label_list.index(label) # 先找到标签在标签列表中的索引位置 + label = np.take(one_hot_matrix, index, axis=0) # 然后从one-hot矩阵中取出对应的向量 + labeled_sample = (features, label) # 将样本和标签组成元组,并添加到列表中 + labeled_samples.append(labeled_sample) + return labeled_samples # 返回标记好标签的样本列表 +# if __name__ == '__main__': +# ··· +# classifier_images = np.array(classifier_images) # 将分类的结果列表转换为数组形式,方便后续处理 +# labeled_samples = label_proc(nonlinear_images, prob_images, classifier_images) +# print(labeled_samples) +''' +【编程16.13】编制程序:设置误差参数SetErrorPara()及计算误差函数ErrorProc()。 +【目的及编程说明】读者通过编程20.13可掌握计算误差的基本方法, +计算误差的函数(损失函数)通常有交叉熵(Cross Entropy Error,CEE)、 + 均方误差(Mean Squared Error,MSE)、 + 平均绝对误差(Mean Absolute Error,MAE) +使用损失函数计算预测值与真实值之间的误差。SetErrorPara()设置相关参数,ErrorProc()按相关参数完成误差相关的计算。 +SetErrorPara()实现的具体要求为:(1)确定参数信息: 标签类别,损失函数类型; + (2)返回:ErrorProc参数。 + +ErrorProc() 实现的具体要求为: (1)将真实标签类别label转换为one-hot编码形式; + (2)确定损失函数类别,实现不同的损失函数,计算输入值与label之间的误差: + (3)返回误差值loss。 +''' +def seterror_para(): # 定义设置误差参数的函数 + label_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] # 确定参数信息: 标签类别,损失函数类型 + loss_type = "CEE" # 假设损失函数类型为交叉熵(Cross Entropy Error,CEE) + ErrorPara = (label_list, loss_type) # 返回ErrorProc参数,这里用一个元组来存储 + return ErrorPara # 返回ErrorPara参数 +def error_proc(input, label, ErrorPara): # 定义计算误差的函数 + label_list, loss_type = ErrorPara # 读取标签列表和损失函数类型 + one_hot_matrix = np.eye(len(label_list)) # 创建一个单位矩阵,大小为标签类别的个数 + index = [label_list.index(l) for l in label] # 找到标签在标签列表中的索引位置 + label_one_hot = np.take(one_hot_matrix, index, axis=0) # 从one-hot矩阵中取出对应的向量 + if loss_type == "CEE": # 确定损失函数类别,实现不同的损失函数,计算输入值与label之间的误差 + # 使用交叉熵损失函数,公式为:-sum(label_one_hot * log(input)) / n + loss = -np.sum(label_one_hot * np.log(input)) / len(input) + elif loss_type == "MSE": + # 使用均方误差损失函数,公式为:sum((input - label_one_hot) ** 2) / n + loss = np.sum((input - label_one_hot) ** 2) / len(input) + elif loss_type == "MAE": + # 使用平均绝对误差损失函数,公式为:sum(abs(input - label_one_hot)) / n + loss = np.sum(np.abs(input - label_one_hot)) / len(input) + else: + raise ValueError("Invalid loss type") # 如果损失函数类型不在以上三种中,抛出异常 + return loss # 返回误差值loss +# if __name__ == '__main__': +# ··· +# prob_images = np.squeeze(prob_images) +# input = prob_images +# array = np.arange(1, 11) # 定义一个一维数组,包含1到10的整数 +# right_label = np.random.choice(array, 900) # 从a中随机抽取100个元素,有放回,每个元素的概率相同 +# ErrorPara = seterror_para() # 设置误差参数 +# loss = error_proc(input, right_label, ErrorPara) # 计算误差值 +# print(loss) +def loss_count(prob_images): + global ErrorPara + # 假设有以下输入值和真实标签值,输入值是一个概率矩阵,真实标签值是一个类别列表 + prob_images = np.squeeze(prob_images) + input = prob_images # print(len(input)) + array = np.arange(1, 11) # 定义一个一维数组,包含1到10的整数 + # 从a中随机抽取100个元素,有放回,每个元素的概率相同 + right_label = np.random.choice(array, DataPara['batch_size']) + loss = error_proc(input, right_label, ErrorPara) # 计算误差值 + return loss + +''' +【编程16.14】编制程序:设置卷积核调整函数的参数SetAjConvPara()、卷积核调整函数AjConvProc()。 +【目的及编程说明】读者通过编程20.14可掌握更新卷积核的基本方法,反向传播到卷积层的输出,对于卷积核的每一个权重, +可以计算出它对误差的贡献,然后使用梯度下降算法更新该权重。SetAjConvPara()设置相关参数,AjConvProc()按相关参数完成卷积核调整相关的计算。 +SetAjConvPara()实现的具体要求为:(1)确定卷积调整的参数:卷积核信息,学习率,误差值; + (2)返回参数AjConvPara。4.028404024493524 +AjConvProc()的具体实现要求为:(1)使用误差值计算卷积层的误差项和梯度;(2)梯度下降算法更新卷积层参数;(3)返回新的卷积层参数。 +''' +def conv_ajconv(loss,images): + global ConvPara + kernel = ConvPara["kernel"] + bias = 0.5 + loss = np.array([[loss]]) + new_kernel, new_bias = ajconv_proc(images, kernel, bias, loss) + ConvPara["kernel"] = new_kernel + ConvPara["bias"] = new_bias + print('卷积参数更新后的卷积核:') + print(new_kernel) + print('卷积参数更新后的偏置向量:') + print(new_bias) +def ajconv_proc(input, kernel, bias, loss): + kernel_grad_list = [] + bias_grad = 0 # 初始化偏置项梯度为零 + for c in input: + # 计算卷积核和偏置项的梯度 + kernel_grad = np.zeros_like(kernel) # 初始化卷积核梯度为零矩阵 + for i in range(loss.shape[0]): # 遍历误差值矩阵的行 + for j in range(loss.shape[1]): # 遍历误差值矩阵的列 + # 将输入数据数组中对应的子矩阵旋转180度,与误差值相乘,累加到卷积核梯度上 + kernel_grad += np.rot90(c[i:i + kernel_grad.shape[0], j:j + kernel_grad.shape[0]], 2) * loss[i, j] + # 将误差值累加到偏置项梯度上 + bias_grad += loss[i, j] + kernel_grad_list.append(kernel_grad) + # 使用stack函数沿着第0个轴把一百个a数组堆叠起来 + result = np.stack(kernel_grad_list, axis=0) + kernel_grad = np.sum(result, axis=0) / len(input) # 沿着第0个维度求和 + # 设置学习率为0.01 + learning_rate = 0.01 + # 更新卷积核和偏置项参数 + kernel = kernel - learning_rate * kernel_grad # 卷积核参数减去学习率乘以卷积核梯度 + bias = bias - learning_rate * bias_grad # 偏置项参数减去学习率乘以偏置项梯度 + # 返回更新后的卷积核、偏置 + return kernel, bias +# if __name__ == '__main__': +# input = np.array([[[1,2,3],[4,5,6],[7,8,9]], +# [[10,11,12],[13,14,15],[16,17,18]], +# [[19,20,21],[22,23,24],[25,26,27]], +# [[28,29,30],[31,32,33],[34,35,36]]]) +# AjConvPara=setajconv_para() +# kernel_new, bias_new = ajconv_proc(input, AjConvPara) +# print("\nkernel_new =\n", kernel_new,"\n") +# print("bias_new =", bias_new) + +# 定义一个全连接层的权重矩阵和偏置向量的调整函数,可以选择不同的激活函数 +def update_parameters(weight_matrix, bias_vector, loss): + # 根据激活函数的参数选择相应的函数和导数 + # 计算权重矩阵和偏置向量的梯度,使用链式法则 + learning_rate = 0.01 + gradient_weights = np.outer(loss, learning_rate) + # 更新权重矩阵和偏置向量 + weight_matrix = weight_matrix - gradient_weights + bias_vector = bias_vector - learning_rate * bias_vector + # 返回更新后的权重矩阵和偏置向量 + return weight_matrix, bias_vector +def ajfullconn_proc(loss): + global FullConnPara + weight1 = FullConnPara["weights"] + bias1 = FullConnPara["bias"] + loss = np.array([loss]) + new_weight1, new_bias1 = update_parameters(weight1, bias1, loss) + FullConnPara["weights"] = new_weight1 + FullConnPara["bias"] = new_bias1 + print('全连接参数更新后的权重矩阵:') + print(new_weight1) + print('全连接参数更新后的偏置向量:') + print(new_bias1) +# if __name__ == '__main__': +# AjFCPara = setajfc_para()# 调用SetAjFCPara()设置参数 +# print("初始化的全连接层参数:", AjFCPara) +# newajfcpara = ajfullconn_proc(AjFCPara)# 调用AjFullconnProc()更新全连接层参数 +# print("更新后的全连接层参数:", newajfcpara) +def parameter(): + global DataPara + global ConvPara + global PoolPara + global NonLPara + global ClassifyPara + global LabelPara + global ErrorPara + DataPara = setload_data() # 调用setload_data()函数,获取加载数据集的参数 + ConvPara = setconv_para() # 调用SetConvPara()函数,获取卷积层参数 + PoolPara = setpool_para() # 调用设置池化层参数的函数,获取池化参数 + NonLPara = setnonl_para() # 调用设置非线性参数的函数,获取非线性参数 + ClassifyPara = setclassify_para() # 设置分类函数参数 + LabelPara = setlabel_para() # 设置标签类别参数 + ErrorPara = seterror_para() # 设置误差参数 +def main(): + # 创建一个tkinter根窗口,并隐藏它 + root = tk.Tk() + root.withdraw() + parameter() + global DataPara + train_images, test_images = load_data(DataPara) # 调用LoadData()函数,根据参数加载数据集 + for i in range(len(train_images) // DataPara['batch_size']): + train_image=train_images[i * DataPara['batch_size']:(i + 1) * DataPara['batch_size']] + conv_images = convolutional_operation(train_image) # 存储卷积处理后的图片的列表 + pool_images = pooling_treatment(conv_images) # 存储还回池化处理后的图片的列表 + global FullConnPara + FullConnPara = setfullconn_para(pool_images[0]) # 调用设置全连接层参数的函数,获取全连接参数 + fullconn_images = fullyconnected_operation(pool_images) # 存储全连接处理后的图片的列表 + nonlinear_images = activation(fullconn_images) # 存储非线性处理后的图片的列表 + classifier_images, prob_images = classify(nonlinear_images) # 存储分类处理后的图片的列表 + labeled_samples = label_proc(nonlinear_images, prob_images, classifier_images) # 读取之前的分类,每一行是一个样本,每一列是一个特征,将分类标签放在最后一列 + loss = loss_count(prob_images) + # 打印结果 + print('loss值:{}'.format(loss)) + conv_ajconv(loss,train_image) + ajfullconn_proc(loss) + +if __name__ == '__main__': + main() + + diff --git a/X4.py b/X4.py new file mode 100644 index 0000000..35c6ad3 --- /dev/null +++ b/X4.py @@ -0,0 +1,1220 @@ +import sys +import pickle +import subprocess +import tkinter as tk +import ttkbootstrap as ttk +from tkinter import messagebox +import tkinter.scrolledtext as st +from ttkbootstrap import * +from PIL import Image, ImageTk +from tkinter import Canvas, Frame, BOTH, PhotoImage, filedialog +from X3 import load_data +from X2 import ModelObj,connect_class + +# 网络模型正确的图元和连接关系的数据结构,用一个数组表示 +RIGHT_MODEL = [ + [0, 1, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 1, 0, 0, 0, 0, 0, 0], + [0, 1, 0, 1, 0, 0, 0, 0, 0], + [0, 0, 0, 1, 1, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 1, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 1, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 1, 1], + [0, 1, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 1, 0, 0, 0, 0, 0] +] + +# 创建三个空的卷积层图元实例和三个空的全连接层图元实例 +Conv1 = None +Conv2 = None +Conv3 = None +Pool1 = None +Pool2 = None +Pool3 = None +Fullconn1 = None +Fullconn2 = None +Fullconn3 = None + +global Viewcanvas # 定义画布 +global Text # 带滚动条 +global Root # 主窗口 +global AllModelObj #网络对象 + +List_image = [] # 存储图元的列表 +Prob_images = [] # 存储图元的列表 +Train_images = [] # 存储训练集的列表 +Test_images = [] # 存储测试集的列表 +Items1 = [] # 存储新图元的列表 +Items2 = [] # 存储新数据线的列表 +Items3 = [] # 存储被拖拽的图元的列表 +Items4 = [] # 存储新图元文字标签的列表 +Counts = {} # 用来存储Items3每个数字出现过的次数 +Conv_xy_list = [] # 存储卷积图元的坐标 +Fullconn_xy_list = [] # 存储全连接图元的坐标 +Train_list = [] # 存储训练设置参数 +Listinstance = [] # 图元对象实例 +Dragged_item = () # 记录被拖拽的图元id +Original_x = 0 # 记录图元原来的x坐标 +Original_y = 0 # 记录图元原来的y坐标 +Offset_x = 0 # 记录鼠标相对于图元的x偏移量 +Offset_y = 0 # 记录鼠标相对于图元的y偏移量 +Yt = 0 # 新图元的y坐标 +Batch = 0 #批次 + +def create_instance(): + # 创建图元对象实例 + DataSet = ModelObj("DataSet", 1, "数据集", "LoadData", "SetDataPara", ".", 120, 70).output() + Conv = ModelObj("Conv", 2, "卷积", "ConvProc", "SetConvPara", ".", 280, 70).output() + Pool = ModelObj("Pool", 3, "最大池化", "MaxPoolProc", "SetPollPara", ".", 120, 165).output() + FullConn = ModelObj("FullConn", 4, "全连接", "FullConnProc", "SetFullConnPara", ".", 280, 165).output() + Nonline = ModelObj("Nonline", 5, "非线性函数", "NonlinearProc", "SetNonLPara", ".", 120, 260).output() + Classifier = ModelObj("Classifier", 6, "分类", "ClassifierProc", "SetClassifyPara", ".", 280, 260).output() + Error = ModelObj("Error", 7, "误差计算", "ErrorProc", "SetErrorPara", ".", 120, 355).output() + AjConv = ModelObj("AjConv", 8, "卷积调整", "AjConvProc", "SetAjConvPara", ".", 280, 355).output() + AjFullconn = ModelObj("AjFullconn", 9, "全连接调整", "AjFullconnProc", "SetAjFCPara", ".", 120, 450).output() + AjNonline = ModelObj("AjNonline", 10, "非线性调整", "AjNonlineProc", "SetAjNLPara", ".", 280, 450).output() + listinstance = [DataSet, Conv, Pool, FullConn, Nonline, Classifier, Error, AjConv, AjFullconn, AjNonline] + return listinstance # 还回图元对象实例列表 + +def picture_frame(window_width,window_height): + gap = 20 # 设置矩形框之间的间隔为10像素 + # 计算矩形框的坐标和尺寸 + rect1_x = gap # 第一个矩形框的左上角x坐标 + rect1_y = gap # 第一个矩形框的左上角y坐标 + rect1_width = window_width * 1 / 3 - gap-50 # 第一个矩形框的宽度 + rect1_height = window_height * 3 / 4 - gap * 2-50 # 第一个矩形框的高度 + rect2_x = window_width * 1 / 3 + gap - 50 # 第二个矩形框的左上角x坐标 + rect2_y = gap # 第二个矩形框的左上角y坐标 + rect2_width = window_width * 2 / 3 - gap + 50 # 第二个矩形框的宽度 + rect2_height = window_height * 3 / 4 - gap * 2 -50 # 第二个矩形框的高度 + rect3_x = gap # 第三个矩形框的左上角x坐标 + rect3_y = window_height * 3 / 4 + gap - 50 # 第三个矩形框的左上角y坐标 + rect3_width = window_width - gap * 2 # 第三个矩形框的宽度 + rect3_height = window_height * 1 / 4 - gap * 2 + 50 # 第三个矩形框的高度 + global Viewcanvas + # 创建一个画布,用于绘制矩形框,设置画布的大小和背景色 + Viewcanvas = tk.Canvas(Root, width=window_width, height=window_height, bg="blue") + Viewcanvas.pack() # 将画布添加到主窗口中 + # 绘制矩形框,使用不同的颜色和线宽,指定矩形框的左上角和右下角坐标,填充色,边框色和边框宽度 + Viewcanvas.create_rectangle(rect1_x, rect1_y, rect1_x + rect1_width, rect1_y + rect1_height, + fill=None, outline="lightblue", width=2) + Viewcanvas.create_rectangle(rect2_x, rect2_y + 20, rect2_x + rect2_width - 20, rect2_y + rect2_height, + fill=None, outline="lightblue", width=2) + Viewcanvas.create_rectangle(rect3_x, rect3_y, rect3_x + rect3_width, rect3_y + rect3_height, + fill=None, outline="lightblue", width=2) + global Text + Text = st.ScrolledText(Root) # 创建一个带滚动条的文本框,用于展示计算过程 + Text.place(x=rect3_x, y=rect3_y, width=1160, height=rect3_height - 1) +# if __name__ == '__main__': +# Root = tk.Tk() +# # 设置窗口的大小为1200*750 +# window_width = 1200 # 窗口的宽度 +# window_height = 750 # 窗口的高度 +# Root.title("神经网络可视化") +# Root.geometry("1200x750") # 设置窗口的大小和位置 +# picture_frame(window_width, window_height) +# Root.mainloop() + +def element(path): + # 加载图元对应的图片文件 + img=Image.open(path) + # 使用resize方法调整图片 + img = img.resize((70, 60)) + # 把Image对象转换成PhotoImage对象 + img = ImageTk.PhotoImage(img) + # 保存图片的引用,防止被垃圾回收 + Root.img = img + return img + +def push_button(): + button = {} + # 指定按钮主题为 litera + style = Style(theme='litera') + # 设置blue.TButton样式的背景色为亮蓝灰,前景色为白色 + style.configure("blue.TButton", background="LightSlateGray", foreground="white", font=("黑体", 13)) + style.map("blue.TButton", + background=[('active', 'PowderBlue'), ('pressed', 'red')], # 设置激活状态下的背景色为粉蓝色,按下状态下的背景色为红色 + foreground=[('active', 'black'), ('pressed', 'white')]) # 设置激活状态下的前景色为黑色,按下状态下的前景色为白色 + # 设置green.TButton样式的背景色为中海洋绿,前景色为白色 + style.configure("green.TButton", background="MediumSeaGreen", foreground="white", font=("黑体", 13)) + style.map("green.TButton", + background=[('active', 'PaleGreen'), ('pressed', 'red')], # 设置激活状态下的背景色为弱绿色,按下状态下的背景色为红色 + foreground=[('active', 'black'), ('pressed', 'white')]) # 设置激活状态下的前景色为黑色,按下状态下的前景色为白色 + + # 创建三个按钮,用于触发训练参数的设置、训练、输出模型程序的操作 + button1 = ttk.Button(Root, text=" 训练参数设置 ", style="blue.TButton") + button1.place(x=20, y=500) + button['button1'] = button1 + button2 = ttk.Button(Root, text=" 训练 ", style="blue.TButton") + button2.place(x=190, y=500) + button['button2'] = button2 + button3 = ttk.Button(Root, text=" 输出模型程序 ", style="blue.TButton") + button3.place(x=300, y=500) + button['button3'] = button3 + # 创建五个按钮,用于触发操作 + button4 = ttk.Button(Root, text=" 加载已有模型 ", style="green.TButton") + button4.place(x=370, y=5) + button['button4'] = button4 + button5 = ttk.Button(Root, text=" 新建模型 ", style="green.TButton") + button5.place(x=530, y=5) + button['button5'] = button5 + button6 = ttk.Button(Root, text=" 图元参数设置 ", style="green.TButton") + button6.place(x=660, y=5) + button['button6'] = button6 + button7 = ttk.Button(Root, text=" 保存模型 ", style="green.TButton") + button7.place(x=820, y=5) + button['button7'] = button7 + button8 = ttk.Button(Root, text=" 模型正确性检查 ", style="green.TButton") + button8.place(x=940, y=5) + button['button8'] = button8 + button9 = ttk.Button(Root, text="退出", style="green.TButton") + button9.place(x=1120, y=5) + button['button9'] = button9 + return button + +def setload_data(): + # 设置数据集路径信息 + train_imgPath = filedialog.askdirectory(title="请选择训练集") + "/" # 训练集文件夹的位置 + test_imgPath = filedialog.askdirectory(title="请选择测试集") + "/" # 测试集文件夹的位置 + # 设置图片大小 + img_width = 48 # 图片宽度 + img_height = 48 # 图片高度 + # 设置每批次读入图片的数量 + batch_size = 32 # 批次大小 + # 返回DataPara参数,这里用一个字典来存储 + DataPara = {"train_imgPath": train_imgPath, + "test_imgPath": test_imgPath, + "img_width": img_width, + "img_height": img_height, + "batch_size": batch_size} + return DataPara + +# 定义图元拖拽开始的函数 +def on_drag_start(event): + global Dragged_item # 记录被拖拽的图元id + global Original_x # 记录图元原来的x坐标 + global Original_y # 记录图元原来的y坐标 + global Offset_x # 记录鼠标相对于图元的x偏移量 + global Offset_y # 记录鼠标相对于图元的y偏移量 + # 获取当前图元的id + # 这个物体的id是由tkinter自动分配的。当在画布上创建一个物体时,它会返回一个唯一的整数id,可以用它来引用这个物体 + Dragged_item = event.widget.find_closest(event.x, event.y) + + Original_x = event.widget.coords(Dragged_item)[0] # 获取当前图元的x坐标 + Original_y = event.widget.coords(Dragged_item)[1] # 获取当前图元的y坐标 + Offset_x = Original_x - event.x # 计算鼠标相对于图元的x偏移量 + Offset_y = Original_y - event.y # 计算鼠标相对于图元的y偏移量 + +# 定义图元拖拽移动的函数 +def on_drag_motion(event): + x = event.x + Offset_x # 计算图元新的x坐标 + y = event.y + Offset_y # 计算图元新的y坐标 + event.widget.coords(Dragged_item, x, y) # 更新图元的位置 + +def entity_loading_dataset(event): + global Viewcanvas + x = event.x + Offset_x + y = event.y + Offset_y + + Items3.append(0) # 记录被拖拽的原始图元的id,方便后续进行模型的正确性检查 + new_item1 = Viewcanvas.create_image(x, y, image=List_image[0]) # 复制一个图片,表示数据集1 + Viewcanvas.create_text(x, y + 45, text='数据集')# 复制图元对象的标签 + event.widget.coords(Dragged_item, Original_x, Original_y)# 恢复图元的原位置 + Items1.append((new_item1, x, y))# 将新图元的id和坐标添加到列表中 + global Yt + Items_y = Items1[0] # 将新图元的y坐标取出,方便后续图元水平排列 + Yt = Items_y[2] + # 创建一个tkinter根窗口,并隐藏它 + root1 = tk.Tk() + root1.withdraw() + + DataPara = setload_data() # 调用X3中setload_data()函数,获取加载数据集的参数 + global Train_images + global Test_images + Train_images, Test_images = load_data(DataPara) # 调用X3中load_data()函数,根据参数加载数据集 + # 打印一些信息,检查是否正确加载 + print("训练集图片的形状:", Train_images.shape) + print("测试集图片的形状:", Test_images.shape) + +# 创建弹出窗口 +def creat_window(title): + top = tk.Toplevel(Root) + top.geometry("300x350") + top.title(title) + return top +# 输入框 +def create_input_box(top, text,value): + box_label = tk.Label(top, text=text) + box_label.pack(padx=10, pady=10) + box_size = tk.IntVar(top, value=value) # 创建一个IntVar对象,并设置默认值为3 + box_size_entry = tk.Entry(top, textvariable=box_size) # 关联IntVar对象 + box_size_entry.pack(padx=20, pady=20) + return box_size_entry +# 下拉框 +def create_dropdown_box(top, text, listvalues): + # 创建一个下拉框,用于选择 + box_mode_label = tk.Label(top, text=text) + box_mode_label.pack(padx=10, pady=10) + box_mode_combobox = ttk.Combobox(top) + box_mode_combobox["values"] = listvalues + box_mode_combobox.pack(padx=20, pady=15) + return box_mode_combobox + +def convolution(event): + global Items3 + global Viewcanvas + x = event.x + Offset_x + Items3.append(1) # 记录被拖拽的原始图元的id,方便后续进行模型的正确性检查 + new_item1 = Viewcanvas.create_image(x, Yt, image=List_image[1]) # 复制一个图片,表示卷积层 + event.widget.coords(Dragged_item, Original_x, Original_y) # 恢复图元的原位置 + Items1.append((new_item1, x, Yt)) # 将新图元的id和坐标添加到列表中 + top = creat_window('卷积参数配置') # 创建弹出窗口 + kernel_size_entry = create_input_box(top,"卷积核大小:",3) # 创建一个输入框,获取卷积核大小 + stride_entry = create_input_box(top,"卷积核大小:",1) # 创建一个输入框,获取卷积步长 + def get_input(): # 创建 + global Listinstance + result1 = int(kernel_size_entry.get())# 获取输入框的内容 + result2 = int(stride_entry.get()) + Viewcanvas.create_text(x, Yt + 40, text=str(result1) + "*" + str(result1) + "卷积") # 创建图元对象的标签 + if Listinstance[1][5] == ".": + Listinstance[1][5] = str(result1) + "," + str(result2) + else: + Listinstance[1][5] = Listinstance[1][5] + " " + str(result1) + "," + str(result2) + top.destroy()# 关闭窗口 + button = tk.Button(top, text="获取信息", command=get_input) + button.pack() + +def pooling(event): + global Items3 + global Viewcanvas + x = event.x + Offset_x + # 记录被拖拽的原始图元的id,方便后续进行模型的正确性检查 + Items3.append(2) + # 复制一个图片,表示池化层 + new_item1 = Viewcanvas.create_image(x, Yt, image=List_image[2]) + # 恢复图元的原位置 + event.widget.coords(Dragged_item, Original_x, Original_y) + # 将新图元的id和坐标添加到列表中 + Items1.append((new_item1, x, Yt)) + # 创建弹出窗口 + top=creat_window("池化参数配置") + pool_type_combobox=create_dropdown_box(top, "池化池类型:", ["max", "avg", "min"])# 创建一个下拉框,用于选择池化类型 + pool_size_entry = create_input_box(top, "池化池大小:", 2)# 创建一个输入框,用于输入池大小 + # 创建 + def get_input(): + # 从下拉框中获取池化类型 + pool_type = pool_type_combobox.get() + # 从输入框中获取池大小 + pool_size = int(pool_size_entry.get()) + # 复制对象的标签 + Viewcanvas.create_text(x, Yt + 40, text=str(pool_size) + "*" + str(pool_size) + str(pool_type) + "池化") + if Listinstance[2][5] == ".": + Listinstance[2][5] = str(pool_type) + "," + str(pool_size) + else: + Listinstance[2][5] = Listinstance[2][5] + " " + str(pool_type) + "," + str(pool_size) + # 关闭窗口 + top.destroy() + + button = tk.Button(top, text="获取信息", command=get_input) + button.pack() + +def fully_connected(event): + global Items3 + global Viewcanvas + x = event.x + Offset_x + # 记录被拖拽的原始图元的id,方便后续进行模型的正确性检查 + Items3.append(3) + # 复制一个图片,表示全连接层 + new_item1 = Viewcanvas.create_image(x, Yt, image=List_image[3]) + # 恢复图元的原位置 + event.widget.coords(Dragged_item, Original_x, Original_y) + # 将新图元的id和坐标添加到列表中 + Items1.append((new_item1, x, Yt)) + # 创建弹出窗口 + top = creat_window("全连接参数配置") + fully_size_entry = create_input_box(top, "全连接输出维度:", 10) # 创建一个输入框,用于输入池大小 + # 创建 + def get_input(): + global Listinstance + # 从下拉框中获取输出维度 + num = int(fully_size_entry.get()) + # 复制对象的标签 + Viewcanvas.create_text(x, Yt + 40, text=str(num) + "--全连接") + if Listinstance[3][5] == ".": + Listinstance[3][5] = str(num) + else: + Listinstance[3][5] = Listinstance[3][5] + " " + str(num) + # 关闭窗口 + top.destroy() + + button = tk.Button(top, text="获取信息", command=get_input) + button.pack(padx=20, pady=50) + +def nonlinear(event): + global Items3 + global Viewcanvas + x = event.x + Offset_x + # 记录被拖拽的原始图元的id,方便后续进行模型的正确性检查 + Items3.append(4) + # 复制一个图片,表示非线性函数图元 + new_item1 = Viewcanvas.create_image(x, Yt, image=List_image[4]) + # 恢复图元的原位置 + event.widget.coords(Dragged_item, Original_x, Original_y) + # 将新图元的id和坐标添加到列表中 + Items1.append((new_item1, x, Yt)) + top = creat_window('非线性参数配置') # 创建弹出窗口 + # 创建一个下拉框,用于选择非线性类型 + nonlinear_mode_combobox = create_dropdown_box(top, "非线性类型", ["Sigmoid", "ReLU", "Tanh"])# 创建一个下拉框,用于选择池化类型 + # 创建 + def get_input(): + global Listinstance + # 从下拉框中获取池化类型 + nonlinear_mode = nonlinear_mode_combobox.get() + # 复制对象的标签 + Viewcanvas.create_text(x, Yt + 40, text=str(nonlinear_mode) + "处理") + if Listinstance[4][5] == ".": + Listinstance[4][5] = str(nonlinear_mode) + else: + Listinstance[4][5] = Listinstance[4][5] + " " + str(nonlinear_mode) + # 关闭窗口 + top.destroy() + button = tk.Button(top, text="获取信息", command=get_input) + button.pack() + +def class_ification(event): + global Listinstance + global Viewcanvas + global Items3 + x = event.x + Offset_x + # 记录被拖拽的原始图元的id,方便后续进行模型的正确性检查 + Items3.append(5) + # 复制一个图片,表示分类器 + new_item1 = Viewcanvas.create_image(x, Yt, image=List_image[5]) + # 恢复图元的原位置 + event.widget.coords(Dragged_item, Original_x, Original_y) + # 将新图元的id和坐标添加到列表中 + Items1.append((new_item1, x, Yt)) + top = creat_window("分类参数配置") + class_size_entry = create_input_box(top, "阈值:", 0.001) # 创建一个输入框,用于分类大小 + # 创建 + def get_input(): + # 从输入框中获取阈值 + threshold = float(class_size_entry.get()) + # 复制对象的标签 + Viewcanvas.create_text(x, Yt + 40, text="输出分类结果") + if Listinstance[5][5] == ".": + Listinstance[5][5] = str(threshold) + else: + Listinstance[5][5] = Listinstance[5][5] + " " + str(threshold) + # 关闭窗口 + top.destroy() + + button = tk.Button(top, text="获取信息", command=get_input) + button.pack() + +def error_calculation(event): + global Items3 + global Viewcanvas + x = event.x + Offset_x + y = event.y + Offset_y + # 记录被拖拽的原始图元的id,方便后续进行模型的正确性检查 + Items3.append(6) + # 复制一个图片,表示误差计算 + new_item1 = Viewcanvas.create_image(x, y, image=List_image[6]) + # 恢复图元的原位置 + event.widget.coords(Dragged_item, Original_x, Original_y) + # 将新图元的id和坐标添加到列表中 + Items1.append((new_item1, x, y)) + global x_loss + global y_loss + x_loss = x + y_loss = y + # 创建弹出窗口 + top = creat_window('误差参数配置') + # 创建一个下拉框,用于选择误差类型 + loss_type_combobox=create_dropdown_box(top, '', ["CEE", "MSE", "MAE"]) + # 创建 + def get_input(): + # 从下拉框中获取池化类型 + loss_type = loss_type_combobox.get() + # 复制对象的标签 + Viewcanvas.create_text(x, y_loss + 40, + text=str(loss_type) + "误差计算") + if Listinstance[6][5] == ".": + Listinstance[6][5] = str(loss_type) + else: + Listinstance[6][5] = Listinstance[6][5] + " " + str(loss_type) + # 关闭窗口 + top.destroy() + + button = tk.Button(top, text="获取信息", command=get_input) + button.pack() + +def adjust_one(event): + global Viewcanvas + global Items1 + global Items3 + x = event.x + Offset_x + y = event.y + Offset_y + # 记录被拖拽的原始图元的id,方便后续进行模型的正确性检查 + Items3.append(7) + # 复制一个图片,表示调整操作 + new_item1 = Viewcanvas.create_image(x, y_loss - 20, image=List_image[7]) + + Viewcanvas.create_text(x, y_loss + 20, text='调整1')# 复制对象的标签 + event.widget.coords(Dragged_item, Original_x, Original_y) # 恢复图元的原位置 + + Items1.append((new_item1, x, y))# 将新图元的id和坐标添加到列表中 + + +def adjust_two(event): + global Viewcanvas + global Items1 + global Items3 + x = event.x + Offset_x + y = event.y + Offset_y + # 记录被拖拽的原始图元的id,方便后续进行模型的正确性检查 + Items3.append(8) + # 复制一个图片,表示调整操作 + new_item1 = Viewcanvas.create_image(x, y_loss + 20, image=List_image[7]) + # 复制对象的标签 + Viewcanvas.create_text(x, y_loss + 60, text='调整2') + event.widget.coords(Dragged_item, Original_x, Original_y) # 恢复图元的原位置 + # 将新图元的id和坐标添加到列表中 + Items1.append((new_item1, x, y)) + + +def adjust_three(event): + global Viewcanvas + global Items1 + global Items3 + x = event.x + Offset_x + y = event.y + Offset_y + # 记录被拖拽的原始图元的id,方便后续进行模型的正确性检查 + Items3.append(9) + # 复制一个图片,表示调整操作 + new_item1 = Viewcanvas.create_image(x, y, image=List_image[7]) + # 复制对象的标签 + Viewcanvas.create_text(x, y + 40, text='调整3') + event.widget.coords(Dragged_item, Original_x, Original_y) # 恢复图元的原位置 + # 将新图元的id和坐标添加到列表中 + Items1.append((new_item1, x, y)) + +def train_setting(): + global Train_list + Train_list = [] + top = creat_window("训练参数配置")# 创建弹出的参数配置窗口 + epoch_entry = create_input_box(top,"训练轮数:", 4)# 创建一个输入框,获取训练轮数 + rate_entry=create_input_box(top, '学习率:', 0.1)# 创建一个输入框,获取学习率 + batch_size_entry=create_input_box(top, "批次:", 60)# 创建一个输入框,获取批次 + # 创建 + def get_input(): + # 获取输入框的内容 + result1 = int(epoch_entry.get()) + result2 = float(rate_entry.get()) + result3 = int(batch_size_entry.get()) + Train_list.append(result1) + Train_list.append(result2) + Train_list.append(result3) + # 关闭窗口 + top.destroy() + button = tk.Button(top, text="获取信息", command=get_input) + button.pack() + +def connecting_line(): + global Viewcanvas + global Items2 + last_item = Items1[-1] # 获取最后一个图元的id和坐标 + prev_item = Items1[-2] # 获取倒数第二个图元的id和坐标 + # 获取最后一个图元的边界框坐标,形式为(x1,y1,x2,y2),其中(x1,y1)是左上角,(x2,y2)是右下角 + last_bbox = Viewcanvas.bbox(last_item[0]) + # 获取倒数第二个图元的边界框坐标,形式同上 + prev_bbox = Viewcanvas.bbox(prev_item[0]) + # 计算线条的起点和终点,使其与图元的边界对齐,并留出一定距离以避免重叠 + start_x = prev_bbox[2] + 5 # 起点x坐标为倒数第二个图元右边界加10像素 + start_y = prev_bbox[3] - (prev_bbox[3] - prev_bbox[1]) / 2 # 起点y坐标为倒数第二个图元垂直中心 + end_x = last_bbox[0] # 终点x坐标为最后一个图元左边界 + end_y = last_bbox[3] - (last_bbox[3] - last_bbox[1]) / 2 # 终点y坐标为最后一个图元垂直中心 + # 创建一条线,带有箭头,并设置箭头形状、大小、颜色和平滑度等参数 + if Items3[-1] < 6: + new_item = Viewcanvas.create_line(start_x, start_y, end_x, end_y, arrow=tk.LAST, + arrowshape=(16, 20, 4), fill='lightblue', smooth=True) + if Items3[-1] == 1: + x = last_bbox[2] - (last_bbox[2] - last_bbox[0]) / 2 + y = last_bbox[1] + Conv_xy_list.append((x, y)) + if Items3[-1] == 3: + x = last_bbox[2] - (last_bbox[2] - last_bbox[0]) / 2 + y = last_bbox[1] + Fullconn_xy_list.append((x, y)) + + elif Items3[-1] == 6: + # 计算折线的中间点,使其与图元的边界对齐,并留出一定距离以避免重叠 + mid_x = prev_bbox[2] - (prev_bbox[2] - prev_bbox[0]) / 2 # 中间点x坐标为起点和终点的平均值 + mid_y = prev_bbox[1] - 80 # 中间点y坐标为起点y坐标减20像素 + # 创建一条折线,带有箭头,并设置箭头形状、大小、颜色和平滑度等参数 + x1 = prev_bbox[2] - (prev_bbox[2] - prev_bbox[0]) / 2 + y1 = prev_bbox[1] + x2 = last_bbox[2] + y2 = last_bbox[3] - (last_bbox[3] - last_bbox[1]) / 2 + new_item = Viewcanvas.create_line(x1, y1, mid_x, mid_y, x2, y2, arrow=tk.LAST, + arrowshape=(16, 20, 4), fill='lightblue', smooth=False) + elif Items3[-1] == 7: + x1 = x_loss + y1 = y_loss + x2, y2 = Conv_xy_list[0] + new_item = Viewcanvas.create_line(x1, y1, last_bbox[2] - (last_bbox[2] - last_bbox[0]) / 2, + last_bbox[3] - (last_bbox[3] - last_bbox[1]) / 2, x2, y2, arrow=tk.LAST, + arrowshape=(16, 20, 4), fill='lightblue', smooth=False) + Conv_xy_list.remove(Conv_xy_list[0]) + elif Items3[-1] == 8: + x1 = x_loss + y1 = y_loss + x2, y2 = Fullconn_xy_list[0] + new_item = Viewcanvas.create_line(x1, y1, last_bbox[2] - (last_bbox[2] - last_bbox[0]) / 2, + last_bbox[3] - (last_bbox[3] - last_bbox[1]) / 2, x2, y2, arrow=tk.LAST, + arrowshape=(16, 20, 4), fill='lightblue', smooth=False) + Fullconn_xy_list.remove(Fullconn_xy_list[0]) + Items2.append(new_item) + +def on_drag(obj_id1,event): + while obj_id1 == 4: # 如果拖拽的是图元加载数据集 + entity_loading_dataset(event) + break + while obj_id1 == 6: # 卷积 + convolution(event) + break + while obj_id1 == 8: # 池化 + pooling(event) + break + while obj_id1 == 10: # 全连接 + fully_connected(event) + break + while obj_id1 == 12: # 非线性 + nonlinear(event) + break + while obj_id1 == 14: # 分类 + class_ification(event) + break + while obj_id1 == 16: # 误差计算 + error_calculation(event) + break + while obj_id1 == 18: # 调整1 + adjust_one(event) + break + while obj_id1 == 20: # 调整2 + adjust_two(event) + break + while obj_id1 == 22: # 调整3 + adjust_three(event) + break + +# 定义图元拖拽结束的函数 +def on_drag_end(event): + obj_id1 = Dragged_item[0] # 获取被拖拽的图元的id + # 使用 print(obj_id1) 从而查看各个图元的id,此步省略 + # 根据图元的类型,复制相应的图片到右侧画布 + on_drag(obj_id1,event) + # 如果列表中有至少两个图元,就创建一条线,连接最后两个图元的中心点 + while len(Items1) >= 2: + connecting_line() + break +def element_binding(obj_x, obj_y, image, y, text): + global Viewcanvas + l1 = Viewcanvas.create_image(obj_x, obj_y, image=image) # 创建图元对象 + # 创建图元对象的标签 + Viewcanvas.create_text(obj_x - 70, obj_y + y, text=text, font=("黑体", 14)) + return l1 + +def create_left_element(AllModelObj,List_image): + global Viewcanvas + # 遍历AllModelObj列表,在窗口左侧创建图元菜单 + for obj in AllModelObj: + # 获取图元对象的类型、标签等信息 + obj_type = obj[1] + # 并且要根据需求调整每个对象的位置 + obj_x = obj[6] # 根据对象的id计算x坐标 + obj_y = obj[7] # 根据对象的id计算y坐标 + # 根据对象的类型,绘制相应的图形 + if obj_type == 1: # 加载数据集 + l1 = element_binding(obj_x, obj_y, List_image[0], 3, " 加载" + "\n" + "数据集") + elif obj_type == 2: # 卷积 + l1 = element_binding(obj_x, obj_y, List_image[1], 0, "卷积") + elif obj_type == 3: # 池化 + l1 = element_binding(obj_x, obj_y, List_image[2], 0, "池化") + elif obj_type == 4: # 全连接 + l1 = element_binding(obj_x, obj_y, List_image[3], 0, "全连接" + "\n" + " 函数") + elif obj_type == 5: # 非线性 + l1 = element_binding(obj_x, obj_y, List_image[4], 0, "非线性" + "\n" + " 函数") + elif obj_type == 6: # 分类 + l1 = element_binding(obj_x, obj_y, List_image[5], 0, "类别") + elif obj_type == 7: # 误差计算 + l1 = element_binding(obj_x, obj_y, List_image[6], 0, "误差") + elif obj_type == 8: # 调整 + l1 = element_binding(obj_x, obj_y, List_image[7], 0, "调整1") + elif obj_type == 9: # 调整 + l1 = element_binding(obj_x, obj_y, List_image[7], 0, "调整2") + elif obj_type == 10: # 调整 + l1 = element_binding(obj_x, obj_y, List_image[7], 0, "调整3") + elif obj_type == 11: # 调整 + l1 = element_binding(obj_x, obj_y, List_image[8], 3, "主数据连接线") + elif obj_type == 12: # 调整 + l1 = element_binding(obj_x, obj_y, List_image[9], 3, "参数连接线") + # 为左边菜单的每个图元绑定鼠标按下、移动和松开的事件 + Viewcanvas.tag_bind(l1, "", on_drag_start) + Viewcanvas.tag_bind(l1, "", on_drag_motion) + Viewcanvas.tag_bind(l1, "", on_drag_end) + +# if __name__ == '__main__': +# Root = tk.Tk() +# # 设置窗口的大小为1200*750 +# window_width = 1200 # 窗口的宽度 +# window_height = 750 # 窗口的高度 +# Root.title("神经网络可视化") +# Root.geometry("1200x750") # 设置窗口的大小和位置 +# picture_frame(window_width,window_height) +# Listinstance = create_instance() +# listclass = connect_class(Listinstance) +# # 创建网络对象总表和网络连接对象总表 +# AllModelObj = [Listinstance[0], Listinstance[1], Listinstance[2], Listinstance[3], Listinstance[4], Listinstance[5], +# Listinstance[6], Listinstance[7], Listinstance[8], Listinstance[9]] +# AllModelConn = [listclass[0], listclass[1], listclass[2], listclass[3], listclass[4], listclass[5], listclass[6], +# listclass[7], listclass[8], listclass[9]] +# img_path = ["img/data.png", "img/conv.png", "img/pool.png", "img/full_connect.png", "img/nonlinear.png", +# "img/classifier.png", "img/error.png", "img/adjust.png", "img/arrow1.png", "img/arrow2.png"] +# List_image = [] +# for path in img_path: +# List_image.append(element(path)) +# create_left_element(AllModelObj, List_image) +# button = push_button() +# Root.mainloop() +# if __name__ == '__main__': +# Root = tk.Tk() +# train_setting() +# Root.mainloop() +def check_connection(): + connection = [x for x in Items3 if x < 6] + length = len(connection) + if length == 0: + messagebox.showerror("错误", "请添加图元!") + return + for i in range(length-1): + right_model_x = connection[i] + right_model_y = connection[i+1] + if RIGHT_MODEL[right_model_x][right_model_y] == 0: + messagebox.showerror("错误", "连接不正确,请检查!") + return + messagebox.showinfo("成功", "连接正确,恭喜!") + + + +def number_judgments(lsts): + global Items3 + count = [] + sequence = [] + for index,lll in enumerate(lsts): + if type(lll) == list: + count.append(lll[1]) + sequence.append(index) + if lll[1]==9: + break + count_2,count_3,count_4=0,0,0 + list_count=[] + for i in count: + if i == 2: + count_2 += 1 + list_count.append(i*10+count_2) + elif i == 3: + count_3 += 1 + list_count.append(i * 10 + count_3) + elif i == 4: + count_4 += 1 + list_count.append(i * 10 + count_4) + else: + list_count.append(i * 10) + Items3 = [0] + for i in count: + Items3.append(i - 1) + return count,list_count,sequence + +def load_file(): + filename = filedialog.askopenfilename(filetypes=[("Pickle files", "*.pkl")]) + # 从本地文件中读取两个列表,用rb模式打开文件 + with open(filename, "rb") as f: + # 创建一个空列表,用来存储读取的列表 + lsts = [] + # 用一个循环来读取所有的列表,直到文件结束 + while True: + try: + # 读取一个列表,并追加到大列表中 + lst = pickle.load(f) + lsts.append(lst) + except EOFError: + # 如果遇到文件结束的错误,就跳出循环 + break + return lsts + +def connecting_lines(obj_x, obj_y, index, x, y, x1, x2, y1, y2, y3 , image, text, smooth, width): + # 创建图元对象 + Viewcanvas.create_image(obj_x+(index + x) * 110, obj_y, image=image) + # 创建图元对象的标签 + Viewcanvas.create_text(obj_x+(index + x) * 110, obj_y + y1, text=text, font=("黑体", 14)) + # 创建数据线箭头 + Viewcanvas.create_line(obj_x+(index + x) * 110 + x1, obj_y + y2, obj_x+(index + y) * 110 + x2, obj_y + y3, arrow=tk.LAST, + arrowshape=(16, 20, 4), fill='lightblue', smooth=smooth, width=1) + +def connecting(obj_x, obj_y, index, x, y1, image, text): + # 创建图元对象 + Viewcanvas.create_image(obj_x+(index + x) * 110, obj_y, image=image) + # 创建图元对象的标签 + Viewcanvas.create_text(obj_x+(index + x) * 110, obj_y + y1, text=text, font=("黑体", 14)) +# 加载已有模型 +def load_model(): + import copy + global Train_images + global Test_images + global Viewcanvas + global Listinstance + global Viewcanvas + lsts = load_file() + DataPara = setload_data() + create_left_element(AllModelObj, List_image) + Train_images, Test_images = load_data(DataPara) # load_data()函数,根据参数加载数据集 + # 打印一些信息,检查是否正确加载 + print("训练集图片的形状:", Train_images.shape) + print("测试集图片的形状:", Test_images.shape) + # 根据pkl文件的前向传播顺序列表,依次识别卷积层、池化层、全连接层、非线性层和分类层的操作 + count,counts,sequence = number_judgments(lsts) + x,y = 420,300 + connecting_lines(x, y, 0, 0, 0, 25, 60, 45, 0, 0, List_image[0], '数据集', True, 3) + for layer in range(len(count)): + if count[layer] == 2: # 如果是卷积层,将读取的卷积层的信息存储到Conv实例 + if counts[layer]%10 == 1: + global Conv1 + Listinstance[1] = copy.deepcopy(lsts[sequence[layer]]) + Conv1 = lsts[sequence[layer]] + connecting_lines(x, y, layer, 1, 2, 25, -25, 45, 0, 0, List_image[1], '卷积层1', True, 3) + if counts[layer]%10 == 2: + global Conv2 + Conv2 = lsts[sequence[layer]] + connecting_lines(x, y, layer, 1, 2, 25, -25, 45, 0, 0, List_image[1], '卷积层2', True, 3) + if counts[layer]%10 == 3: + global Conv3 + Conv3 = lsts[sequence[layer]] + connecting_lines(x, y, layer, 1, 2, 25, -25, 45, 0, 0, List_image[1], '卷积层3', True, 3) + if count[layer] == 3: # 如果是池化层,将读取的池化层的信息存储到Pool实例 + if counts[layer]%10 == 1: + global Pool1 + Listinstance[2] =copy.deepcopy(lsts[sequence[layer]]) + Pool1 = lsts[sequence[layer]] + connecting_lines(x, y, layer, 1, 2, 25, -25, 45, 0, 0, List_image[2], '池化1', True, 3) + if counts[layer]%10 == 2: + global Pool2 + Pool2 = lsts[sequence[layer]] + connecting_lines(x, y, layer, 1, 2, 25, -25, 45, 0, 0, List_image[2], '池化2', True, 3) + if counts[layer]%10 == 3: + global Pool3 + Pool3 = lsts[sequence[layer]] + connecting_lines(x, y, layer, 1, 2, 25, -25, 45, 0, 0, List_image[2], '池化3', True, 3) + if count[layer] == 4: # 如果是全连接层,将读取的全连接层的信息存储到Pool实例 + if counts[layer]%10 == 1: + global Fullconn1 + Listinstance[3] = lsts[sequence[layer]] + Fullconn1 = copy.deepcopy(lsts[sequence[layer]])# 深拷贝创建了一个全新的对象,要使用深拷贝,不然报错 + Listinstance[3][5] = str(Fullconn1[5][1]["num_outputs"]) + connecting_lines(x, y, layer, 1, 2, 25, -25, 45, 0, 0, List_image[3], '全连接1', True, 3) + if counts[layer]%10 == 2: + global Fullconn2 + Fullconn2 = lsts[sequence[layer]] + # FullConn[5] = FullConn[5] + " " + str(Fullconn2[5][2]["num_outputs"]) + connecting_lines(x, y, layer, 1, 2, 25, -25, 45, 0, 0, List_image[3], '全连接3', True, 3) + if counts[layer]%10 == 3: + global Fullconn3 + Fullconn3 = lsts[sequence[layer]] + # FullConn[5] = FullConn[5] + " " + str(Fullconn3[5][3]["num_outputs"]) + connecting_lines(x, y, layer, 1, 2, 25, -25, 45, 0, 0, List_image[3], '全连接3', True, 3) + if count[layer] == 5: # 如果是非线性层,将读取的非线性层的信息存储到Nonline实例 + Listinstance[4] = lsts[sequence[layer]] + connecting_lines(x, y, layer, 1, 2, 25, -25, 45, 0, 0, List_image[4], '非线性', True, 3) + if count[layer] == 6: # 如果是分类输出层,将读取的信息存储到Nonline实例 + Listinstance[5] = lsts[sequence[layer]] + connecting(x, y, layer, 1, 45,List_image[5], '分类') + if count[layer] == 7: # 如果是计算误差层,将读取的信息存储到Error实例 + Listinstance[6] = lsts[sequence[layer]] + connecting(x-30, y-120, layer, 0, 45, List_image[6], '计算误差') + Viewcanvas.create_line(x + layer * 110 + 25, y, x + layer * 110 + 10, y - 60, + x + 5 * 110 - 20, y - 120, arrow=tk.LAST, arrowshape=(16, 20, 4), + fill='lightblue', smooth=True, width=2) + # 创建图元对象 + Viewcanvas.create_image(600, 180, image=List_image[7]) + # 创建图元对象的标签 + Viewcanvas.create_text(600, 230, text='调整1', font=("黑体", 14)) + Viewcanvas.create_line(x + layer * 110 - 50, y - 140, 630, 165, arrow=tk.LAST, arrowshape=(16, 20, 4), + fill='lightblue', smooth=True, width=2) + Viewcanvas.create_line(600, 200, x + 1 * 110, y - 20, arrow=tk.LAST, arrowshape=(16, 20, 4), + fill='lightblue', smooth=True, width=2) + # 创建图元对象 + Viewcanvas.create_image(860, 200, image=List_image[7]) + # 创建图元对象的标签 + Viewcanvas.create_text(860, 250, text='调整2', font=("黑体", 14)) + Viewcanvas.create_line(x + layer * 110 - 60, y - 120, 875, 200, arrow=tk.LAST, arrowshape=(16, 20, 4), + fill='lightblue', smooth=True, width=2) + Viewcanvas.create_line(835, 200, x + (layer - 2) * 110 + 10, y - 20, arrow=tk.LAST, arrowshape=(16, 20, 4), + fill='lightblue', smooth=True, width=2) + +def create_window(number,count,list1,list2,list3,list4,list5,list6): + global Listinstance + if number == 1: + # 把数字的出现次数加一 + count[number] = count.get(number, 0) + 1 + if count[number] == 1: + # 获取第一层卷积层的参数 + para_list = list1[count[number] - 1].split(",") + para_list = [int(x) for x in para_list] + window = creat_window('卷积1参数调整') # 创建一个新的窗口 + kernel_size_entry = create_input_box(window, "卷积核大小:", para_list[0]) # 创建一个输入框,获取卷积核大小 + stride_entry = create_input_box(window, "卷积步长:", para_list[1]) # 创建一个输入框,获取卷积步 + def modify_para(): + # 获取输入框的内容 + result1 = int(kernel_size_entry.get()) + result2 = int(stride_entry.get()) + new_para = str(result1)+ ','+str(result2) + Listinstance[1][5] = Listinstance[1][5].replace(list1[count[number] - 1], new_para) + # 关闭窗口 + window.destroy() + # 创建一个按钮,文本为数字 + button = tk.Button(window, text="卷积参数修改") + # 绑定按钮的点击事件,使得点击后销毁窗口 + button.config(command=modify_para) + # 把按钮放在窗口中 + button.pack() + if count[number] == 2: + # 获取第一层卷积层的参数 + para_list = list1[count[number] - 1].split(",") + para_list = [int(x) for x in para_list] + window = creat_window('卷积2参数调整') # 创建一个新的窗口 + kernel_size_entry = create_input_box(window, "卷积核大小:", para_list[0]) # 创建一个输入框,获取卷积核大小 + stride_entry = create_input_box(window, "卷积步长:", para_list[1]) # 创建一个输入框,获取卷积步 + def modify_para(): + # 获取输入框的内容 + result1 = int(kernel_size_entry.get()) + result2 = int(stride_entry.get()) + new_para = str(result1)+ ','+str(result2) + Listinstance[1][5] = Listinstance[1][5].replace(list1[count[number] - 1], new_para) + # 关闭窗口 + window.destroy() + # 创建一个按钮,文本为数字 + button = tk.Button(window, text="卷积参数修改") + # 绑定按钮的点击事件,使得点击后销毁窗口 + button.config(command=modify_para) + # 把按钮放在窗口中 + button.pack() + if count[number] == 3: + # 获取第一层卷积层的参数 + para_list = list1[count[number] - 1].split(",") + para_list = [int(x) for x in para_list] + # 创建一个输入框,获取卷积核大小 + window = creat_window('卷积3参数调整') # 创建一个新的窗口 + kernel_size_entry = create_input_box(window, "卷积核大小:", para_list[0]) # 创建一个输入框,获取卷积核大小 + stride_entry = create_input_box(window, "卷积步长:", para_list[1]) # 创建一个输入框,获取卷积步 + def modify_para(): + # 获取输入框的内容 + result1 = int(kernel_size_entry.get()) + result2 = int(stride_entry.get()) + new_para = str(result1)+ ','+str(result2) + Listinstance[1][5] = Listinstance[1][5].replace(list1[count[number] - 1], new_para) + # 关闭窗口 + window.destroy() + + # 创建一个按钮,文本为数字 + button = tk.Button(window, text="卷积参数修改") + # 绑定按钮的点击事件,使得点击后销毁窗口 + button.config(command=modify_para) + # 把按钮放在窗口中 + button.pack() + # 返回窗口对象 + return window + # 如果是池化层 + if number == 2: + # 把数字的出现次数加一 + count[number] = count.get(number, 0) + 1 + if count[number] == 1: + # 获取第一层卷积层的参数 + para_list = list2[count[number] - 1].split(",") + para_list[1] = int(para_list[1]) + window = creat_window('池化1参数调整') # 创建一个新的窗口 + pool_type_combobox = create_dropdown_box(window, "池化池类型:", ["max", "avg", "min"]) # 创建一个下拉框,用于选择池化类型 + pool_size_entry = create_input_box(window, "池化池大小:", para_list[1]) # 创建一个输入框,获取卷积步 + def modify_para(): + # 从下拉框中获取池化类型 + pool_type = pool_type_combobox.get() + # 从输入框中获取池大小 + pool_size = int(pool_size_entry.get()) + # 关闭窗口 + new_para = str(pool_type)+ ','+str(pool_size) + Listinstance[2][5] = Listinstance[2][5].replace(list2[count[number] - 1], new_para) + # 关闭窗口 + window.destroy() + # 创建一个按钮,文本为数字 + button = tk.Button(window, text="池化参数修改") + # 绑定按钮的点击事件,使得点击后销毁窗口 + button.config(command=modify_para) + # 把按钮放在窗口中 + button.pack() + if count[number] == 2: + # 获取第一层卷积层的参数 + para_list = list2[count[number] - 1].split(",") + para_list[1] = int(para_list[1]) + window = creat_window('池化2参数调整') # 创建一个新的窗口 + pool_type_combobox = create_dropdown_box(window, "池化池类型:", ["max", "avg", "min"]) # 创建一个下拉框,用于选择池化类型 + pool_size_entry = create_input_box(window, "池化池大小:", para_list[1]) # 创建一个输入框,获取卷积步 + def modify_para(): + # 从下拉框中获取池化类型 + pool_type = pool_type_combobox.get() + # 从输入框中获取池大小 + pool_size = int(pool_size_entry.get()) + # 关闭窗口 + new_para = str(pool_type)+ ','+str(pool_size) + Listinstance[2][5] = Listinstance[2][5].replace(list2[count[number] - 1], new_para) + # 关闭窗口 + window.destroy() + # 创建一个按钮,文本为数字 + button = tk.Button(window, text="池化参数修改") + # 绑定按钮的点击事件,使得点击后销毁窗口 + button.config(command=modify_para) + # 把按钮放在窗口中 + button.pack() + if count[number] == 3: + # 获取第一层卷积层的参数 + para_list = list2[count[number] - 1].split(",") + para_list[1] = int(para_list[1]) + window = creat_window('池化3参数调整') # 创建一个新的窗口 + pool_type_combobox = create_dropdown_box(window, "池化池类型:", ["max", "avg", "min"]) # 创建一个下拉框,用于选择池化类型 + pool_size_entry = create_input_box(window, "池化池大小:", para_list[1]) # 创建一个输入框,获取卷积步 + def modify_para(): + # 从下拉框中获取池化类型 + pool_type = pool_type_combobox.get() + # 从输入框中获取池大小 + pool_size = int(pool_size_entry.get()) + # 关闭窗口 + new_para = str(pool_type)+ ','+str(pool_size) + Listinstance[2][5] = Listinstance[2][5].replace(list2[count[number] - 1], new_para) + # 关闭窗口 + window.destroy() + # 创建一个按钮,文本为数字 + button = tk.Button(window, text="池化参数修改") + # 绑定按钮的点击事件,使得点击后销毁窗口 + button.config(command=modify_para) + # 把按钮放在窗口中 + button.pack() + # 返回窗口对象 + return window + if number == 3: + # 把数字的出现次数加一 + count[number] = count.get(number, 0) + 1 + if count[number] == 1: + # 获取第一层全连接层的参数 + para = list3[count[number] - 1] + para = int(para) + window = creat_window('全连接1参数调整') # 创建一个新的窗口 + num_outputs_entry = create_input_box(window, "输出维度:", para) # 创建一个输入框,获取卷积步 + + def modify_para(): + # 获取输入框的内容 + num = int(num_outputs_entry.get()) + new_para = str(num) + Listinstance[3][5] = Listinstance[3][5].replace(list3[count[number] - 1], new_para) + # 关闭窗口 + window.destroy() + # 创建一个按钮,文本为数字 + button = tk.Button(window, text="全连接参数修改") + # 绑定按钮的点击事件,使得点击后销毁窗口 + button.config(command=modify_para) + # 把按钮放在窗口中 + button.pack() + if count[number] == 2: + # 获取第一层全连接层的参数 + para = list3[count[number] - 1] + para = int(para) + window = creat_window('全连接2参数调整') # 创建一个新的窗口 + num_outputs_entry = create_input_box(window, "输出维度:", para) # 创建一个输入框,获取全连接 + + def modify_para(): + # 获取输入框的内容 + num = int(num_outputs_entry.get()) + new_para = str(num) + Listinstance[3][5] = Listinstance[3][5].replace(list3[count[number] - 1], new_para) + # 关闭窗口 + window.destroy() + # 创建一个按钮,文本为数字 + button = tk.Button(window, text="全连接参数修改") + # 绑定按钮的点击事件,使得点击后销毁窗口 + button.config(command=modify_para) + # 把按钮放在窗口中 + button.pack() + if count[number] == 3: + # 获取第一层全连接层的参数 + para = list3[count[number] - 1] + para = int(para) + window = creat_window('全连接3参数调整') # 创建一个新的窗口 + num_outputs_entry = create_input_box(window, "输出维度:", para) # 创建一个输入框,获取全连接 + + def modify_para(): + # 获取输入框的内容 + num = int(num_outputs_entry.get()) + new_para = str(num) + Listinstance[3][5] = Listinstance[3][5].replace(list3[count[number] - 1], new_para) + # 关闭窗口 + window.destroy() + # 创建一个按钮,文本为数字 + button = tk.Button(window, text="全连接参数修改") + # 绑定按钮的点击事件,使得点击后销毁窗口 + button.config(command=modify_para) + # 把按钮放在窗口中 + button.pack() + # 返回窗口对象 + return window + if number == 4: + # 把数字的出现次数加一 + count[number] = count.get(number, 0) + 1 + if count[number] == 1: + # 获取第一层非线性层的参数 + para = list3[count[number] - 1] + window = creat_window('非线性1参数调整') # 创建一个新的窗口 + nonlinear_mode_combobox = create_dropdown_box(window, "非线性类型:", + ["Sigmoid", "ReLU", "Tanh"]) # 创建一个下拉框,用于选择非线性类型 + def modify_para(): + # 获取输入框的内容 + nonlinear_mode = nonlinear_mode_combobox.get() + new_para = f"{nonlinear_mode}" + Listinstance[4][5] = Listinstance[4][5].replace(list4[count[number] - 1], new_para) + # 关闭窗口 + window.destroy() + + # 创建一个按钮,文本为数字 + button = tk.Button(window, text="非线性参数修改") + # 绑定按钮的点击事件,使得点击后销毁窗口 + button.config(command=modify_para) + # 把按钮放在窗口中 + button.pack() + # 返回窗口对象 + return window + if number == 5: + # 把数字的出现次数加一 + count[number] = count.get(number, 0) + 1 + if count[number] == 1: + # 获取分类的参数 + para = list5 + para = float(para) + window = creat_window('分类参数调整') # 创建一个新的窗口 + threshold_entry = create_input_box(window, "阈值:", para) # 创建一个输入框,用于输入阈值 + def modify_para(): + # 获取输入框的内容 + threshold = threshold_entry.get() + new_para = str(threshold) + Listinstance[5][5] = Listinstance[5][5].replace(list5, new_para) + # 关闭窗口 + window.destroy() + + # 创建一个按钮,文本为数字 + button = tk.Button(window, text="分类参数修改") + # 绑定按钮的点击事件,使得点击后销毁窗口 + button.config(command=modify_para) + # 把按钮放在窗口中 + button.pack() + # 返回窗口对象 + return window + if number == 6: + # 把数字的出现次数加一 + count[number] = count.get(number, 0) + 1 + if count[number] == 1: + # 获取分类的参数 + para = list6 + window = creat_window('误差参数调整') # 创建一个新的窗口 + loss_type_combobox = create_dropdown_box(window, "误差类型:", + ["CEE", "MSE", "MAE"]) # 创建一个下拉框,用于选择误差类型 + def modify_para(): + # 获取输入框的内容 + loss_type = loss_type_combobox.get() + new_para = str(loss_type) + Listinstance[6][5] = Listinstance[6][5].replace(list6[count[number] - 1], new_para) + print(Listinstance[6]) + # 关闭窗口 + window.destroy() + + # 创建一个按钮,文本为数字 + button = tk.Button(window, text="误差参数修改") + # 绑定按钮的点击事件,使得点击后销毁窗口 + button.config(command=modify_para) + # 把按钮放在窗口中 + button.pack() + return window # 返回窗口对象 + +# 清空当前模型展示区 +def restart_new_model(): + # 这将在子进程中调用当前Python解释器,并传递当前文件的路径作为参数 + subprocess.call([sys.executable, __file__]) + +def setpara_func(): # 图元参数配置与修改 + global Viewcanvas + # 一个字典,用来记录每个数字出现的次数 + count = {} + list1 = Listinstance[1][5].split() + list2 = Listinstance[2][5].split() + list3 = Listinstance[3][5].split() + list4 = Listinstance[4][5].split() + list5 = Listinstance[5][5] + list6 = Listinstance[6][5].split() + for i in Items4: # 清除所有文字标签 + Viewcanvas.delete(i[0]) + numbers = [x for x in Items3 if x <= 6] # 一个函数,用来创建一个带有一个数字标签的按钮的窗口 + numbers = numbers[1:] + def iterate_numbers(): # 一个函数,用来遍历数字列表,依次创建窗口 + if numbers: # 如果数字列表不为空 + number = numbers.pop(0) # 从列表中弹出第一个数字 + window = create_window(number, count, list1, list2, list3, list4, list5, list6) + window.wait_window() # 等待窗口被关闭 + iterate_numbers() # 再次调用这个函数,创建下一个窗口 + + iterate_numbers() # 调用遍历数字的函数 + +def redirector(inputStr): + global Text + Text.configure(state="normal") # 设置文本框为可编辑状态 + Text.insert("end", inputStr) # 在文本框末尾插入内容 + Text.see("end") # 滚动到末尾 + Text.configure(state="disabled") # 设置文本框为只读状态 +def close_program(): + sys.exit() + +if __name__ == '__main__': + # 创建一个主窗口 + Root = tk.Tk() + # 设置窗口的大小为1200*750 + window_width = 1200 # 窗口的宽度 + window_height = 750 # 窗口的高度 + Root.title("神经网络可视化") + Root.geometry("1200x750") # 设置窗口的大小和位置 + picture_frame(window_width,window_height) + Listinstance = create_instance() + listclass = connect_class(Listinstance) + # 创建网络对象总表和网络连接对象总表 + AllModelObj = [Listinstance[0], Listinstance[1], Listinstance[2], Listinstance[3], Listinstance[4], Listinstance[5], + Listinstance[6], Listinstance[7], Listinstance[8], Listinstance[9]] + AllModelConn = [listclass[0], listclass[1], listclass[2], listclass[3], listclass[4], listclass[5], listclass[6], + listclass[7], listclass[8], listclass[9]] + img_path = ["img/data.png", "img/conv.png", "img/pool.png", "img/full_connect.png", "img/nonlinear.png", + "img/classifier.png", "img/error.png", "img/adjust.png", "img/arrow1.png", "img/arrow2.png"] + List_image = [] + for path in img_path: + List_image.append(element(path)) + create_left_element(AllModelObj, List_image) + button = push_button() + button['button1'].config(command=train_setting) + button['button4'].config(command=load_model) + button['button5'].config(command=restart_new_model) + button['button6'].config(command=setpara_func) + button['button8'].config(command=check_connection) + button['button9'].config(command=close_program) + sys.stdout.write = redirector + Root.mainloop() \ No newline at end of file diff --git a/X5.py b/X5.py new file mode 100644 index 0000000..026d133 --- /dev/null +++ b/X5.py @@ -0,0 +1,1977 @@ +# coding = UTF-8 +import os +import sys +import pickle +import subprocess +import functools +import numpy as np +import pandas as pd +import tkinter as tk +import ttkbootstrap as ttk +from tkinter import messagebox +import tkinter.scrolledtext as st +from PIL import Image, ImageTk +from ttkbootstrap import * +from tkinter import Canvas, Frame, BOTH, PhotoImage, filedialog +from X4 import setload_data +from X3 import load_data +from X2 import ModelObj +# 网络模型正确的图元和连接关系的数据结构,用一个字典表示 +RIGHT_MODEL = [ + [0, 1, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 1, 0, 0, 0, 0, 0, 0], + [0, 1, 0, 1, 0, 0, 0, 0, 0], + [0, 0, 0, 1, 1, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 1, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 1, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 1, 1], + [0, 1, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 1, 0, 0, 0, 0, 0] +] + +# 创建三个空的卷积层图元实例和三个空的全连接层图元实例 +Conv1 = None +Conv2 = None +Conv3 = None +Pool1 = None +Pool2 = None +Pool3 = None +Fullconn1 = None +Fullconn2 = None +Fullconn3 = None + +global Viewcanvas # 定义画布 +global Text # 带滚动条 +global Root # 主窗口 +global AllModelObj #网络对象 + +List_image = [] # 存储图元的列表 +Prob_images = [] # 存储图元的列表 +Train_images = [] # 存储训练集的列表 +Test_images = [] # 存储测试集的列表 +Items1 = [] # 存储新图元的列表 +Items2 = [] # 存储新数据线的列表 +Items3 = [] # 存储被拖拽的图元的列表 +Items4 = [] # 存储新图元文字标签的列表 +Counts = {} # 用来存储Items3每个数字出现过的次数 +Conv_xy_list = [] # 存储卷积图元的坐标 +Fullconn_xy_list = [] # 存储全连接图元的坐标 +Train_list = [] # 存储训练设置参数 +Listinstance = [] # 图元对象实例 +Dragged_item = () # 记录被拖拽的图元id +Original_x = 0 # 记录图元原来的x坐标 +Original_y = 0 # 记录图元原来的y坐标 +Offset_x = 0 # 记录鼠标相对于图元的x偏移量 +Offset_y = 0 # 记录鼠标相对于图元的y偏移量 +Yt = 0 # 新图元的y坐标 +Batch = 0 #批次 + +def create_instance(): + # 创建图元对象实例 + DataSet = ModelObj("DataSet", 1, "数据集", "LoadData", "SetDataPara", ".", 120, 70).output() + Conv = ModelObj("Conv", 2, "卷积", "ConvProc", "SetConvPara", ".", 280, 70).output() + Pool = ModelObj("Pool", 3, "最大池化", "MaxPoolProc", "SetPollPara", ".", 120, 165).output() + FullConn = ModelObj("FullConn", 4, "全连接", "FullConnProc", "SetFullConnPara", ".", 280, 165).output() + Nonline = ModelObj("Nonline", 5, "非线性函数", "NonlinearProc", "SetNonLPara", ".", 120, 260).output() + Classifier = ModelObj("Classifier", 6, "分类", "ClassifierProc", "SetClassifyPara", ".", 280, 260).output() + Error = ModelObj("Error", 7, "误差计算", "ErrorProc", "SetErrorPara", ".", 120, 355).output() + AjConv = ModelObj("AjConv", 8, "卷积调整", "AjConvProc", "SetAjConvPara", ".", 280, 355).output() + AjFullconn = ModelObj("AjFullconn", 9, "全连接调整", "AjFullconnProc", "SetAjFCPara", ".", 120, 450).output() + AjNonline = ModelObj("AjNonline", 10, "非线性调整", "AjNonlineProc", "SetAjNLPara", ".", 280, 450).output() + listinstance = [DataSet, Conv, Pool, FullConn, Nonline, Classifier, Error, AjConv, AjFullconn, AjNonline] + return listinstance # 还回图元对象实例列表 + +def picture_frame(window_width,window_height): + gap = 20 # 设置矩形框之间的间隔为10像素 + # 计算矩形框的坐标和尺寸 + rect1_x = gap # 第一个矩形框的左上角x坐标 + rect1_y = gap # 第一个矩形框的左上角y坐标 + rect1_width = window_width * 1 / 3 - gap-50 # 第一个矩形框的宽度 + rect1_height = window_height * 3 / 4 - gap * 2-50 # 第一个矩形框的高度 + rect2_x = window_width * 1 / 3 + gap - 50 # 第二个矩形框的左上角x坐标 + rect2_y = gap # 第二个矩形框的左上角y坐标 + rect2_width = window_width * 2 / 3 - gap +50 # 第二个矩形框的宽度 + rect2_height = window_height * 3 / 4 - gap * 2 -50 # 第二个矩形框的高度 + rect3_x = gap # 第三个矩形框的左上角x坐标 + rect3_y = window_height * 3 / 4 + gap -50 # 第三个矩形框的左上角y坐标 + rect3_width = window_width - gap * 2 # 第三个矩形框的宽度 + rect3_height = window_height * 1 / 4 - gap * 2 +50 # 第三个矩形框的高度 + global Viewcanvas + # 创建一个画布,用于绘制矩形框,设置画布的大小和背景色 + Viewcanvas = tk.Canvas(Root, width=window_width, height=window_height, bg="white") + Viewcanvas.pack() # 将画布添加到主窗口中 + # 绘制矩形框,使用不同的颜色和线宽,指定矩形框的左上角和右下角坐标,填充色,边框色和边框宽度 + Viewcanvas.create_rectangle(rect1_x, rect1_y, rect1_x + rect1_width, rect1_y + rect1_height, + fill=None, outline="lightblue", width=2) + Viewcanvas.create_rectangle(rect2_x, rect2_y + 20, rect2_x + rect2_width - 20, rect2_y + rect2_height, + fill=None, outline="lightblue", width=2) + Viewcanvas.create_rectangle(rect3_x, rect3_y, rect3_x + rect3_width, rect3_y + rect3_height, + fill=None, outline="lightblue", width=2) + global Text + Text = st.ScrolledText(Root) # 创建一个带滚动条的文本框,用于展示计算过程 + Text.place(x=rect3_x, y=rect3_y, width=1160, height=rect3_height - 1) +# if __name__ == '__main__': +# Root = tk.Tk() +# # 设置窗口的大小为1200*750 +# window_width = 1200 # 窗口的宽度 +# window_height = 750 # 窗口的高度 +# Root.title("神经网络可视化") +# Root.geometry("1200x750") # 设置窗口的大小和位置 +# picture_frame(window_width, window_height) +# Root.mainloop() + +def element(path): + # 加载图元对应的图片文件 + img=Image.open(path) + # 使用resize方法调整图片 + img = img.resize((70, 60)) + # 把Image对象转换成PhotoImage对象 + img = ImageTk.PhotoImage(img) + # 保存图片的引用,防止被垃圾回收 + Root.img = img + return img + +def push_button(): + button = {} + # 指定按钮主题为 litera + style = Style(theme='litera') + # 设置blue.TButton样式的背景色为亮蓝灰,前景色为白色 + style.configure("blue.TButton", background="LightSlateGray", foreground="white", font=("黑体", 13)) + style.map("blue.TButton", + background=[('active', 'PowderBlue'), ('pressed', 'red')], # 设置激活状态下的背景色为粉蓝色,按下状态下的背景色为红色 + foreground=[('active', 'black'), ('pressed', 'white')]) # 设置激活状态下的前景色为黑色,按下状态下的前景色为白色 + # 设置green.TButton样式的背景色为中海洋绿,前景色为白色 + style.configure("green.TButton", background="MediumSeaGreen", foreground="white", font=("黑体", 13)) + style.map("green.TButton", + background=[('active', 'PaleGreen'), ('pressed', 'red')], # 设置激活状态下的背景色为弱绿色,按下状态下的背景色为红色 + foreground=[('active', 'black'), ('pressed', 'white')]) # 设置激活状态下的前景色为黑色,按下状态下的前景色为白色 + + # 创建三个按钮,用于触发训练参数的设置、训练、输出模型程序的操作 + button1 = ttk.Button(Root, text=" 训练参数设置 ", style="blue.TButton") + button1.place(x=20, y=500) + button['button1'] = button1 + button2 = ttk.Button(Root, text=" 训练 ", style="blue.TButton") + button2.place(x=190, y=500) + button['button2'] = button2 + button3 = ttk.Button(Root, text=" 输出模型程序 ", style="blue.TButton") + button3.place(x=300, y=500) + button['button3'] = button3 + # 创建五个按钮,用于触发操作 + button4 = ttk.Button(Root, text=" 加载已有模型 ", style="green.TButton") + button4.place(x=370, y=5) + button['button4'] = button4 + button5 = ttk.Button(Root, text=" 新建模型 ", style="green.TButton") + button5.place(x=530, y=5) + button['button5'] = button5 + button6 = ttk.Button(Root, text=" 图元参数设置 ", style="green.TButton") + button6.place(x=660, y=5) + button['button6'] = button6 + button7 = ttk.Button(Root, text=" 保存模型 ", style="green.TButton") + button7.place(x=820, y=5) + button['button7'] = button7 + button8 = ttk.Button(Root, text=" 模型正确性检查 ", style="green.TButton") + button8.place(x=940, y=5) + button['button8'] = button8 + button9 = ttk.Button(Root, text="退出", style="green.TButton") + button9.place(x=1120, y=5) + button['button9'] = button9 + return button + +''' +【编程16.19】编制程序:训练函数。 +【目的及编程说明】读者通过编程16.19可掌握卷积神经网络的训练过程。其基本流程为输入数据通过前向传播预测出标签值,预测标签与真实标签进行比较得出误差, +反向传播误差值更新卷积层、全连接层参数,直到误差值达到阈值或迭代次数完毕。 +基本实践内容: +(1)使用 AllModelObj 中的 SetParaFunc 函数初始化所有需要学习的网络参数。 +(2)对于每个 epoch,使用AllModelConn 中的连接对象确定图元或是操作函数之间的关系,使用 AllModelObj 中的 ProcFunc + 函数进行前向传播,并使用 AllModelObj 中的 ProcFunc 函数计算误差。再使用 AllModelObj 中的 ProcFunc 函数进行反向传播, + 并使用 AllModelObj 中的 SetParaFunc函数更新网络参数。 + (3)直到迭代次数停止,将生成的网络结构保存到一个文件中,以便以后使用或加载到其他神经网络中。 + (4)若更新训练过程参数,请用户点击训练参数设置,进行更改参数,设置完毕,用户点击保存。 + (5)获取训练参数展示区的字符串,解析字符串,对训练函数进行设置。 +(6)点击训练按钮,进行训练。 +''' +# X3所有基本图元函数 +# 定义加载数据集的参数SetLoadData() + +# 定义设置卷积参数的函数SetConvPara() +def setconv_para(numbers): + # 从Conv的ParaString得到一个包含所有卷积参数的列表 + conv_list = Listinstance[1][5].split() + height, stride = conv_list[numbers - 1].split(',') + height = int(height)# 设置卷积核大小 + stride = int(stride)# 设置步长 + # 卷积核为3x3的单位矩阵(高斯分布),通常再乘上一个小的数,比如0.01 + kernel = np.random.randn(height, height)*0.1 + padding = 0# 设置填充,这里假设是0 + bias = 0.5# 设置偏置,这里假设是0.5 + # 返回ConvPara参数,这里用一个字典来存储 + ConvPara = {numbers: {"kernel": kernel, + "kernel_h": height, + "kernel_w": height, + "stride": stride, + "padding": padding, + "bias": bias}} + Conv0 = ModelObj("Conv", 2, "卷积", "ConvProc", "SetConvPara", ".", 340, 60).output() + # 若为第一个卷积层: + if numbers == 1: + # 创建全局变量的卷积图元对象实例 + global Conv1 + Conv1 = Conv0 + # 令Conv1[5]等于{1: {'kernel': array(), 'kernel_h': 5, 'kernel_w': 5, 'stride': 1, 'padding': 0} + Conv1[5] = ConvPara + # 将Conv1[5][1]重新赋值到ConvPara + ConvPara = Conv1[5][1] + # 若为第二个卷积层: + elif numbers == 2: + global Conv2 + Conv2 = Conv0 + Conv2[5] = ConvPara + ConvPara = Conv2[5][2] + # 若为第三个卷积层: + elif numbers == 3: + global Conv3 + Conv3 = Conv0 + Conv3[5] = ConvPara + ConvPara = Conv3[5][3] + # 返回ConvPara,即{'kernel': array(), 'kernel_h': 5, 'kernel_w': 5, 'stride': 1, 'padding': 0} + return ConvPara + +# 定义卷积函数ConvProc() +def conv_proc(image, ConvPara): + # 获取输入数据的大小,这里假设是单通道的图片 + c, image_h, image_w = image.shape + # 获取卷积核的大小和卷积核 + kernel_h = ConvPara["kernel_h"] + kernel_w = ConvPara["kernel_w"] + kernel = ConvPara["kernel"] + # 计算输出数据的大小 + out_h = (image_h - kernel_h) // ConvPara["stride"] + 1 + out_w = (image_w - kernel_w) // ConvPara["stride"] + 1 + # 初始化输出数据为零矩阵 + output = np.zeros((c, out_h, out_w)) + # 对于每一个输出位置,进行卷积操作 + # 遍历每个通道 + for k in range(c): + # 遍历每个输出位置 + for i in range(out_h): + for j in range(out_w): + # 获得步长和偏置 + stride = ConvPara["stride"] + bias = ConvPara["bias"] + # 计算卷积操作 + output[k, i, j] = np.sum( + image[k, i * stride:i * stride + kernel_h, j * stride:j * stride + kernel_w] * kernel) + bias + # 返回卷积计算后的数组(特征向量) + return output + +# 定义设置池化参数的函数 +def setpool_para(numbers): + # 从Pool的ParaString得到一个包含所有池化参数的列表 + pool_list = Listinstance[2][5].split() + # 池大小和池类型 + pool_mode, pool_size = pool_list[numbers-1].split(',') + pool_size = int(pool_size) + stride = 2 # 设置步长,这里假设是2 + PoolPara = {numbers:{"pool_mode": pool_mode, # 返回PoolPara参数,这里用一个字典来存储 + "pool_size": pool_size, + "stride": stride}} + Pool0 = ModelObj("Pool", 3, "最大池化", "MaxPoolProc", "SetPollPara", ".", 150, 150).output() + # 若为第一个池化层: + if numbers == 1: + # 创建全局变量的卷积图元对象实例 + global Pool1 + Pool1 = Pool0 + Pool1[5] = PoolPara + PoolPara = Pool1[5][1] + # 若为第二个卷积层: + elif numbers == 2: + global Pool2 + Pool2 = Pool0 + Pool2[5] = PoolPara + PoolPara = Pool2[5][2] + # 若为第三个卷积层: + elif numbers == 3: + global Pool3 + Pool3 = Pool0 + Pool3[5] = PoolPara + PoolPara = Pool3[5][3] + + # 返回PoolPara参数 + return PoolPara + +# 定义池化函数 +def pool_proc(image, PoolPara): + # 输入:输入特征图image,PoolPara参数(字典) + # 输出:池化后特征图(数组) + # 从PoolPara参数中获取池化类型,池化窗口大小和步长 + pool_mode = PoolPara["pool_mode"] + pool_size = PoolPara["pool_size"] + stride = PoolPara["stride"] + # 计算输出特征图out大小: + c, h, w = image.shape # 获取输入特征图的高度和宽度 + out_h = int((h - pool_size) / stride) + 1 # 计算输出特征图的高度 + out_w = int((w - pool_size) / stride) + 1 # 计算输出特征图的宽度 + out = np.zeros((c, out_h, out_w)) # 初始化输出特征图为全零数组 + # 对于输出的每一个位置上计算: + for k in range(c): + for i in range(out_h): + for j in range(out_w): + # 计算输出特征图中每个位置对应的输入特征图中的窗口区域 + window = image[k, i * stride:i * stride + pool_size, j * stride:j * stride + pool_size] + # 根据池化类型,取出中间最大值或平均值或最小值, + if pool_mode == "max": # 最大池化 + out[k][i][j] = np.max(window) + elif pool_mode == "avg": # 平均池化 + out[k][i][j] = np.mean(window) + elif pool_mode == "min": # 最小池化 + out[k][i][j] = np.min(window) + else: # 无效的池化类型 + raise ValueError("Invalid pooling mode") + # 返回特征图。 + return out + +# 定义一个函数来设置全连接层的相关参数,这里可以根据实际情况修改或随机生成 +def setfullconn_para(image, numbers): + # 获取池化后的图片数组的长度和宽度 + data = image + dim = len(data.shape) + if dim == 2 : + height, width = data.shape + elif dim == 3: + c, height, width = data.shape + # 从FullConn的ParaString得到一个包含所有全连接参数的列表 + fullconn_list = Listinstance[3][5].split() + # 设置权重矩阵及其输出维度和偏置向量 + num_outputs = fullconn_list[numbers - 1] + num_outputs = int(num_outputs) + weights = np.random.randn(num_outputs, height * width) + bias = np.random.randn(1, num_outputs) + # 返回FullConnPara参数,这里用一个字典来存储 + FullConnPara = {numbers: {"weights": weights, + "bias": bias, + "num_outputs": num_outputs}} + FullConn0 = ModelObj("FullConn", 4, "全连接", "FullConnProc", "SetFullConnPara", ".", 340, 150).output() + # 第一个卷积层: + if numbers == 1: + # 创建全局变量的全连接图元实例 + global Fullconn1 + Fullconn1 = FullConn0 + # 令Fullconn1[5]等于{1: {'weight': array(), 'bias': array(), 'num_outputs': 7} + Fullconn1[5] = FullConnPara + # 将Fullconn1[5][1]即{'weight': array(), 'bias': array(), 'num_outputs': 7}重新赋值到FullConnPara + FullConnPara = Fullconn1[5][1] + # 第二个卷积层: + elif numbers == 2: + global Fullconn2 + Fullconn2 = FullConn0 + Fullconn2[5] = FullConnPara + FullConnPara = Fullconn2[5][2] + # 第三个卷积层: + elif numbers == 3: + global Fullconn3 + Fullconn3 = FullConn0 + Fullconn3[5] = FullConnPara + FullConnPara = Fullconn3[5][3] + # 返回FullConnPara参数 + return FullConnPara + +# 定义一个函数来完成全连接操作 +def fullconn_proc(inputdata, FullConnPara): + # 从FullConnPara参数中获取权重矩阵和偏置向量 + weights = FullConnPara["weights"] + bias = FullConnPara["bias"] + # 对输入进行展平处理,变换为单通道的一维数组格式 + dim = len(inputdata.shape) + if dim == 2: + inputdata = inputdata.reshape(1, inputdata.shape[0] * inputdata.shape[1]) + elif dim == 3: + inputdata = inputdata.reshape(1, inputdata.shape[1] * inputdata.shape[2]) + # 计算全连接层的线性变换:inputdata与权重矩阵w进行乘法,再加上偏置向量b + output = np.dot(inputdata, weights.T) + bias + # 返回全连接计算后的数组 + return output + +# 定义设置非线性参数的函数 +def setnonl_para(): + # 可以选择"Sigmoid", "ReLU" 或 "Tanh" + # 从Nonline的ParaString得到一个包含所有非线性参数的列表 + nonlinearmode = Listinstance[4][5] + # 返回NonLPara参数,这里用一个字典来存储 + NonLPara = {"nonlinearmode": nonlinearmode} + # 返回NonLPara参数 + return NonLPara + +# 定义非线性函数 +def nonlinear_proc(inputdata, NonLPara): + # 从NonLPara参数中获取非线性函数类型 + nonlinearmode = NonLPara["nonlinearmode"] + # 判断nonlinearmode,进行相应的计算 + if nonlinearmode == "Sigmoid": + # Sigmoid函数,将任何实数的输入映射到0和1之间的输出 + output = 1 / (1 + np.exp(-inputdata)) + # 求出Sigmoid函数的导数,用于全连接层权重矩阵和偏执向量的调整 + output_derivative = (1 / (1 + np.exp(-inputdata))) * (1 - (1 / (1 + np.exp(-inputdata)))) + elif nonlinearmode == "ReLU": + # ReLU函数,将负数输入置为0,而正数输入保持不变 + output = np.maximum(inputdata, 0) + # 求出ReLU函数的导数,用于全连接层权重矩阵和偏执向量的调整 + output_derivative = np.where(inputdata > 0, 1, 0) + elif nonlinearmode == "Tanh": + # Tanh函数,将任何实数的输入映射到-1和1之间的输出 + output = np.tanh(inputdata) + # 求出Tanh函数的导数,用于全连接层权重矩阵和偏执向量的调整 + output_derivative = 1 - np.tanh(inputdata) ** 2 + else: + # 非法的非线性类型,抛出异常 + raise ValueError("Invalid nonlinear mode") + # 返回计算后的值 + return output,output_derivative + +# 定义设置分类函数参数的函数 +def setclassify_para(): + # 设定阈值,可以根据你的数据和任务来调整阈值 + threshold = float(Listinstance[5][5]) + # 返回ClassifyPara参数,这里用一个字典来存储 + ClassifyPara = {"threshold": threshold} + # 返回ClassifyPara参数 + return ClassifyPara + +# 定义分类函数 +def classifier_proc(inputdata, ClassifyPara): + # 找到概率超过阈值的标签分类,就是分类结果 + # 假设输入数据是一个一维数组,表示每个类别的概率 + # 假设输出数据是一个整数,表示预测的类别编号 + # 如果没有任何类别的概率超过阈值,就返回-1表示无法分类 + # 定义softmax函数 + def softmax(x): + # 减去最大值,防止数值溢出 + x -= np.max(x) + # 计算指数和归一化 + return np.exp(x) / np.sum(np.exp(x)) + # 从ClassifyPara参数中获取阈值 + threshold = ClassifyPara["threshold"] + # 调用softmax函数,得到概率分布向量 + prob = softmax(inputdata) + # 如果概率高于阈值,就将该类别加入输出结果 + prob1 = prob[prob >= threshold] + # 使用where()函数来返回等于概率最大值的元素的索引 + index = np.where(prob == max(prob1)) + # 使用item()方法来将索引转换为标准Python标量 + output = index[1].item(0) + 1 + # 返回分类标签 + return output + +# 定义设置误差参数的函数 +def seterror_para(): + # 确定参数信息: 标签类别,损失函数类型 + # 从FullConn的ParaString得到一个包含所有全连接参数的列表 + fullconn_list = Listinstance[3][5].split() + # 标签类别为最后一个全连接层的输出维度 + num_outputs = fullconn_list[-1] + num_outputs = int(num_outputs) + label_list = list(range(1, num_outputs + 1)) + # 假设损失函数类型为交叉熵(Cross Entropy Error,CEE) + # 从Error的ParaString得到一个包含所有全连接参数的列表 + error_list = Listinstance[6][5].split() + # 设置权重矩阵及其输出维度和偏置向量 + loss_type = error_list[-1] + # 返回ErrorProc参数,这里用一个元组来存储 + ErrorPara = (label_list, loss_type) + # 返回ErrorPara参数 + return ErrorPara + +# 定义计算误差的函数 +def error_proc(input, right_label, ErrorPara): + # 将真实标签类别label转换为one-hot编码形式 + # 读取标签列表和损失函数类型 + label_list, loss_type = ErrorPara + # 创建一个单位矩阵,大小为标签类别的个数 + one_hot_matrix = np.eye(len(label_list)) + # 找到标签在标签列表中的索引位置 + index = [label_list.index(l) for l in right_label] + index = [x-1 for x in right_label] + # 从one-hot矩阵中取出对应的向量 + label_one_hot = np.take(one_hot_matrix, index, axis=0) + # 确定损失函数类别,实现不同的损失函数,计算输入值与label之间的误差 + if loss_type == "CEE": + # 使用交叉熵损失函数,公式为:-sum(label_one_hot * log(input)) / n + loss = -np.sum(label_one_hot * np.log(input)) / len(input) + elif loss_type == "MSE": + # 使用均方误差损失函数,公式为:sum((input - label_one_hot) ** 2) / n + loss = np.sum((input - label_one_hot) ** 2) / len(input) + elif loss_type == "MAE": + # 使用平均绝对误差损失函数,公式为:sum(abs(input - label_one_hot)) / n + loss = np.sum(np.abs(input - label_one_hot)) / len(input) + else: + # 如果损失函数类型不在以上三种中,抛出异常 + raise ValueError("Invalid loss type") + # 返回误差值loss + return loss + +# 定义一个卷积核调整函数,输入为卷积层的输入数据数组、卷积核、偏置、误差值,输出为更新后的卷积核、偏置 +def update_conv_layer(input, kernel, bias, loss): + kernel_grad_list = [] + bias_grad = 0 # 初始化偏置项梯度为零 + for c in input: + # 计算卷积核和偏置项的梯度 + kernel_grad = np.zeros_like(kernel) # 初始化卷积核梯度为零矩阵 + for i in range(loss.shape[0]): # 遍历误差值矩阵的行 + for j in range(loss.shape[1]): # 遍历误差值矩阵的列 + # 将输入数据数组中对应的子矩阵旋转180度,与误差值相乘,累加到卷积核梯度上 + kernel_grad += np.rot90(c[i:i + kernel_grad.shape[0], j:j + kernel_grad.shape[0]], 2) * loss[i, j] + # 将误差值累加到偏置项梯度上 + bias_grad += loss[i, j] + kernel_grad_list.append(kernel_grad) + # 使用stack函数沿着第0个轴把一百个a数组堆叠起来 + result = np.stack(kernel_grad_list, axis=0) + kernel_grad = np.sum(result, axis=0)/len(input) # 沿着第0个维度求和 + # 设置学习率为0.01 + learning_rate = 0.01 + # 更新卷积核和偏置项参数 + kernel = kernel - learning_rate * kernel_grad # 卷积核参数减去学习率乘以卷积核梯度 + bias = bias - learning_rate * bias_grad # 偏置项参数减去学习率乘以偏置项梯度 + # 返回更新后的卷积核、偏置 + return kernel, bias +def conv_one(loss,images): + global Conv1 + kernel = Conv1[5][1]["kernel"] + bias = 0.5 + loss = np.array([[loss]]) + new_kernel, new_bias = update_conv_layer(images, kernel, bias, loss) + Conv1[5][1]["kernel"] = new_kernel + Conv1[5][1]["bias"] = new_bias + +def conv_two(loss, images): + global Conv1 + global Conv2 + kernel1 = Conv1[5][1]["kernel"] + bias1 = 0.5 + loss = np.array([[loss]]) + new_kernel1, new_bias1 = update_conv_layer(images, kernel1, bias1, loss) + Conv1[5][1]["kernel"] = new_kernel1 + Conv1[5][1]["bias"] = new_bias1 + + kernel2 = Conv2[5][2]["kernel"] + bias2 = 0.5 + loss = np.array([[loss]]) + new_kernel2, new_bias2 = update_conv_layer(Pool1[-1], kernel2, bias2, loss) + Conv2[5][2]["kernel"] = new_kernel2 + Conv2[5][2]["bias"] = new_bias2 + +def conv_three(loss, images): + global Conv1 + global Conv2 + global Conv3 + kernel1 = Conv1[5][1]["kernel"] + bias1 = 0.5 + loss = np.array([[loss]]) + new_kernel1, new_bias1 = update_conv_layer(images, kernel1, bias1, loss) + Conv1[5][1]["kernel"] = new_kernel1 + Conv1[5][1]["bias"] = new_bias1 + kernel2 = Conv2[5][2]["kernel"] + bias2 = 0.5 + loss = np.array([[loss]]) + new_kernel2, new_bias2 = update_conv_layer(Pool1[-1], kernel2, bias2, loss) + Conv2[5][2]["kernel"] = new_kernel2 + Conv2[5][2]["bias"] = new_bias2 + kernel3 = Conv3[5][3]["kernel"] + bias3 = 0.5 + loss = np.array([[loss]]) + new_kernel3, new_bias3 = update_conv_layer(Pool2[-1], kernel3, bias3, loss) + Conv3[5][3]["kernel"] = new_kernel3 + Conv3[5][3]["bias"] = new_bias3 + +# 定义一个全连接层的权重矩阵和偏置向量的调整函数,可以选择不同的激活函数 +def update_parameters(weight_matrix, bias_vector, loss): + # 根据激活函数的参数选择相应的函数和导数 + # 计算权重矩阵和偏置向量的梯度,使用链式法则 + learning_rate = 0.01 + gradient_weights = np.outer(loss, learning_rate) + # 更新权重矩阵和偏置向量 + weight_matrix = weight_matrix - gradient_weights + bias_vector = bias_vector - learning_rate * bias_vector + # 返回更新后的权重矩阵和偏置向量 + return weight_matrix, bias_vector +def fully_one(loss): + global Fullconn1 + weight1 = Fullconn1[5][1]["weights"] + bias1 = Fullconn1[5][1]["bias"] + loss = np.array([loss]) + new_weight1, new_bias1 = update_parameters(weight1, bias1, loss) + Fullconn1[5][1]["weights"] = new_weight1 + Fullconn1[5][1]["bias"] = new_bias1 + +def fully_two(loss): + global Fullconn1 + global Fullconn2 + weight1 = Fullconn1[5][1]["weights"] + bias1 = Fullconn1[5][1]["bias"] + loss = np.array([loss]) + new_weight1, new_bias1 = update_parameters(weight1, bias1, loss) + Fullconn1[5][1]["weights"] = new_weight1 + Fullconn1[5][1]["bias"] = new_bias1 + + weight2 = Fullconn2[5][1]["weights"] + bias2 = Fullconn2[5][1]["bias"] + new_weight2, new_bias2 = update_parameters(weight2, bias2, loss) + Fullconn2[5][1]["weights"] = new_weight2 + Fullconn2[5][1]["bias"] = new_bias2 + +def fully_three(loss): + global Fullconn1 + global Fullconn2 + global Fullconn3 + weight1 = Fullconn1[5][1]["weights"] + bias1 = Fullconn1[5][1]["bias"] + loss = np.array([loss]) + new_weight1, new_bias1 = update_parameters(weight1, bias1, loss) + Fullconn1[5][1]["weights"] = new_weight1 + Fullconn1[5][1]["bias"] = new_bias1 + + weight2 = Fullconn2[5][1]["weights"] + bias2 = Fullconn2[5][1]["bias"] + new_weight2, new_bias2 = update_parameters(weight2, bias2, loss) + Fullconn2[5][1]["weights"] = new_weight2 + Fullconn2[5][1]["bias"] = new_bias2 + + weight3 = Fullconn3[5][3]["weights"] + bias3 = Fullconn3[5][1]["bias"] + new_weight3, new_bias3 = update_parameters(weight3, bias3, loss) + Fullconn3[5][3]["weights"] = new_weight3 + Fullconn3[5][3]["bias"] = new_bias3 +# X4交互式构建卷积神经网络模型 +# 定义图元拖拽开始的函数 +def on_drag_start(event): + global Dragged_item # 记录被拖拽的图元id + global Original_x # 记录图元原来的x坐标 + global Original_y # 记录图元原来的y坐标 + global Offset_x # 记录鼠标相对于图元的x偏移量 + global Offset_y # 记录鼠标相对于图元的y偏移量 + # 获取当前图元的id + # 这个物体的id是由tkinter自动分配的。当在画布上创建一个物体时,它会返回一个唯一的整数id,可以用它来引用这个物体 + Dragged_item = event.widget.find_closest(event.x, event.y) + + Original_x = event.widget.coords(Dragged_item)[0] # 获取当前图元的x坐标 + Original_y = event.widget.coords(Dragged_item)[1] # 获取当前图元的y坐标 + Offset_x = Original_x - event.x # 计算鼠标相对于图元的x偏移量 + Offset_y = Original_y - event.y # 计算鼠标相对于图元的y偏移量 + +# 定义图元拖拽移动的函数 +def on_drag_motion(event): + x = event.x + Offset_x # 计算图元新的x坐标 + y = event.y + Offset_y # 计算图元新的y坐标 + event.widget.coords(Dragged_item, x, y) # 更新图元的位置 + +def entity_loading_dataset(event): + global Viewcanvas + x = event.x + Offset_x + y = event.y + Offset_y + + Items3.append(0) # 记录被拖拽的原始图元的id,方便后续进行模型的正确性检查 + new_item1 = Viewcanvas.create_image(x, y, image=List_image[0]) # 复制一个图片,表示数据集1 + Viewcanvas.create_text(x, y + 45, text='数据集')# 复制图元对象的标签 + event.widget.coords(Dragged_item, Original_x, Original_y)# 恢复图元的原位置 + Items1.append((new_item1, x, y))# 将新图元的id和坐标添加到列表中 + global Yt + Items_y = Items1[0] # 将新图元的y坐标取出,方便后续图元水平排列 + Yt = Items_y[2] + # 创建一个tkinter根窗口,并隐藏它 + root1 = tk.Tk() + root1.withdraw() + + DataPara = setload_data() # 调用X3中setload_data()函数,获取加载数据集的参数 + global Train_images + global Test_images + Train_images, Test_images = load_data(DataPara) # 调用X3中load_data()函数,根据参数加载数据集 + # 打印一些信息,检查是否正确加载 + print("训练集图片的形状:", Train_images.shape) + print("测试集图片的形状:", Test_images.shape) + +# 创建弹出窗口 +def creat_window(title): + top = tk.Toplevel(Root) + top.geometry("300x350") + top.title(title) + return top +# 输入框 +def create_input_box(top, text,value): + box_label = tk.Label(top, text=text) + box_label.pack(padx=10, pady=10) + box_size = tk.IntVar(top, value=value) # 创建一个IntVar对象,并设置默认值为3 + box_size_entry = tk.Entry(top, textvariable=box_size) # 关联IntVar对象 + box_size_entry.pack(padx=20, pady=20) + return box_size_entry +# 下拉框 +def create_dropdown_box(top, text, listvalues): + # 创建一个下拉框,用于选择 + box_mode_label = tk.Label(top, text=text) + box_mode_label.pack(padx=10, pady=10) + box_mode_combobox = ttk.Combobox(top) + box_mode_combobox["values"] = listvalues + box_mode_combobox.pack(padx=20, pady=15) + return box_mode_combobox + +def convolution(event): + global Items3 + global Viewcanvas + x = event.x + Offset_x + Items3.append(1) # 记录被拖拽的原始图元的id,方便后续进行模型的正确性检查 + new_item1 = Viewcanvas.create_image(x, Yt, image=List_image[1]) # 复制一个图片,表示卷积层 + event.widget.coords(Dragged_item, Original_x, Original_y) # 恢复图元的原位置 + Items1.append((new_item1, x, Yt)) # 将新图元的id和坐标添加到列表中 + top = creat_window('卷积参数配置') # 创建弹出窗口 + kernel_size_entry = create_input_box(top,"卷积核大小:",3) # 创建一个输入框,获取卷积核大小 + stride_entry = create_input_box(top,"卷积步长:",1) # 创建一个输入框,获取卷积步长 + def get_input(): # 创建 + # 获取输入框的内容 + global Listinstance + result1 = int(kernel_size_entry.get()) + result2 = int(stride_entry.get()) + Viewcanvas.create_text(x, Yt + 40, text=str(result1) + "*" + str(result1) + "卷积") # 创建图元对象的标签 + if Listinstance[1][5] == ".": + Listinstance[1][5] = str(result1) + "," + str(result2) + else: + Listinstance[1][5] = Listinstance[1][5] + " " + str(result1) + "," + str(result2) + top.destroy()# 关闭窗口 + button = tk.Button(top, text="获取信息", command=get_input) + button.pack() + +def pooling(event): + global Items3 + global Viewcanvas + x = event.x + Offset_x + # 记录被拖拽的原始图元的id,方便后续进行模型的正确性检查 + Items3.append(2) + # 复制一个图片,表示池化层 + new_item1 = Viewcanvas.create_image(x, Yt, image=List_image[2]) + # 恢复图元的原位置 + event.widget.coords(Dragged_item, Original_x, Original_y) + # 将新图元的id和坐标添加到列表中 + Items1.append((new_item1, x, Yt)) + # 创建弹出窗口 + top=creat_window("池化参数配置") + pool_type_combobox=create_dropdown_box(top, "池化池类型:", ["max", "avg", "min"])# 创建一个下拉框,用于选择池化类型 + pool_size_entry = create_input_box(top, "池化池大小:", 2)# 创建一个输入框,用于输入池大小 + # 创建 + def get_input(): + # 从下拉框中获取池化类型 + pool_type = pool_type_combobox.get() + # 从输入框中获取池大小 + pool_size = int(pool_size_entry.get()) + # 复制对象的标签 + Viewcanvas.create_text(x, Yt + 40, text=str(pool_size) + "*" + str(pool_size) + str(pool_type) + "池化") + if Listinstance[2][5] == ".": + Listinstance[2][5] = str(pool_type) + "," + str(pool_size) + else: + Listinstance[2][5] = Listinstance[2][5] + " " + str(pool_type) + "," + str(pool_size) + # 关闭窗口 + top.destroy() + + button = tk.Button(top, text="获取信息", command=get_input) + button.pack() + +def fully_connected(event): + global Items3 + global Viewcanvas + x = event.x + Offset_x + # 记录被拖拽的原始图元的id,方便后续进行模型的正确性检查 + Items3.append(3) + # 复制一个图片,表示全连接层 + new_item1 = Viewcanvas.create_image(x, Yt, image=List_image[3]) + # 恢复图元的原位置 + event.widget.coords(Dragged_item, Original_x, Original_y) + # 将新图元的id和坐标添加到列表中 + Items1.append((new_item1, x, Yt)) + top = creat_window("全连接参数配置") + num_outputs_entry = create_input_box(top, "全连接输出维度:", 10) + # 创建 + def get_input(): + global Listinstance + # 从下拉框中获取输出维度 + num = int(num_outputs_entry.get()) + # 复制对象的标签 + Viewcanvas.create_text(x, Yt + 40, text=str(num) + "--全连接") + if Listinstance[3][5] == ".": + Listinstance[3][5] = str(num) + else: + Listinstance[3][5] = Listinstance[3][5] + " " + str(num) + # 关闭窗口 + top.destroy() + + button = tk.Button(top, text="获取信息", command=get_input) + button.pack(padx=20, pady=50) + +def nonlinear(event): + global Items3 + global Viewcanvas + x = event.x + Offset_x + # 记录被拖拽的原始图元的id,方便后续进行模型的正确性检查 + Items3.append(4) + # 复制一个图片,表示非线性函数图元 + new_item1 = Viewcanvas.create_image(x, Yt, image=List_image[4]) + # 恢复图元的原位置 + event.widget.coords(Dragged_item, Original_x, Original_y) + # 将新图元的id和坐标添加到列表中 + Items1.append((new_item1, x, Yt)) + top = creat_window('非线性参数配置') # 创建弹出窗口 + # 创建一个下拉框,用于选择非线性类型 + nonlinear_mode_combobox = create_dropdown_box(top, "非线性类型", ["Sigmoid", "ReLU", "Tanh"])# 创建一个下拉框,用于选择池化类型 + # 创建 + def get_input(): + global Listinstance + # 从下拉框中获取池化类型 + nonlinear_mode = nonlinear_mode_combobox.get() + # 复制对象的标签 + Viewcanvas.create_text(x, Yt + 40, text=str(nonlinear_mode) + "处理") + if Listinstance[4][5] == ".": + Listinstance[4][5] = str(nonlinear_mode) + else: + Listinstance[4][5] = Listinstance[4][5] + " " + str(nonlinear_mode) + # 关闭窗口 + top.destroy() + button = tk.Button(top, text="获取信息", command=get_input) + button.pack() + +def class_ification(event): + global Listinstance + global Viewcanvas + global Items3 + x = event.x + Offset_x + # 记录被拖拽的原始图元的id,方便后续进行模型的正确性检查 + Items3.append(5) + # 复制一个图片,表示分类器 + new_item1 = Viewcanvas.create_image(x, Yt, image=List_image[5]) + # 恢复图元的原位置 + event.widget.coords(Dragged_item, Original_x, Original_y) + # 将新图元的id和坐标添加到列表中 + Items1.append((new_item1, x, Yt)) + top = creat_window('分类参数配置') # 创建弹出窗口 + # 创建一个下拉框,用于选择非线性类型 + class_box_combobox = create_input_box(top, "阈值:", 0.001) # 创建一个下拉框,用于选择池化类型 + # 创建 + def get_input(): + # 从输入框中获取阈值 + threshold = float(class_box_combobox.get()) + # 复制对象的标签 + Viewcanvas.create_text(x, Yt + 40, text="输出分类结果") + if Listinstance[5][5] == ".": + Listinstance[5][5] = str(threshold) + else: + Listinstance[5][5] = Listinstance[5][5] + " " + str(threshold) + # 关闭窗口 + top.destroy() + + button = tk.Button(top, text="获取信息", command=get_input) + button.pack() + +def error_calculation(event): + global Items3 + global Viewcanvas + x = event.x + Offset_x + y = event.y + Offset_y + # 记录被拖拽的原始图元的id,方便后续进行模型的正确性检查 + Items3.append(6) + # 复制一个图片,表示误差计算 + new_item1 = Viewcanvas.create_image(x, y, image=List_image[6]) + # 恢复图元的原位置 + event.widget.coords(Dragged_item, Original_x, Original_y) + # 将新图元的id和坐标添加到列表中 + Items1.append((new_item1, x, y)) + global x_loss + global y_loss + x_loss = x + y_loss = y + # 创建弹出窗口 + top = creat_window('误差参数配置') + # 创建一个下拉框,用于选择误差类型 + loss_type_combobox=create_dropdown_box(top, '', ["CEE", "MSE", "MAE"]) + # 创建 + def get_input(): + # 从下拉框中获取池化类型 + loss_type = loss_type_combobox.get() + # 复制对象的标签 + Viewcanvas.create_text(x, y_loss + 40, + text=str(loss_type) + "误差计算") + if Listinstance[6][5] == ".": + Listinstance[6][5] = str(loss_type) + else: + Listinstance[6][5] = Listinstance[6][5] + " " + str(loss_type) + # 关闭窗口 + top.destroy() + + button = tk.Button(top, text="获取信息", command=get_input) + button.pack() + +def adjust_one(event): + global Viewcanvas + global Items1 + global Items3 + x = event.x + Offset_x + y = event.y + Offset_y + # 记录被拖拽的原始图元的id,方便后续进行模型的正确性检查 + Items3.append(7) + # 复制一个图片,表示调整操作 + new_item1 = Viewcanvas.create_image(x, y_loss - 20, image=List_image[7]) + # 复制对象的标签 + Viewcanvas.create_text(x, y_loss + 20, text='调整1') + event.widget.coords(Dragged_item, Original_x, Original_y) # 恢复图元的原位置 + # 将新图元的id和坐标添加到列表中 + Items1.append((new_item1, x, y)) + +def adjust_two(event): + global Viewcanvas + global Items1 + global Items3 + x = event.x + Offset_x + y = event.y + Offset_y + # 记录被拖拽的原始图元的id,方便后续进行模型的正确性检查 + Items3.append(8) + # 复制一个图片,表示调整操作 + new_item1 = Viewcanvas.create_image(x, y_loss + 20, image=List_image[7]) + # 复制对象的标签 + Viewcanvas.create_text(x, y_loss + 60, text='调整2') + event.widget.coords(Dragged_item, Original_x, Original_y) # 恢复图元的原位置 + # 将新图元的id和坐标添加到列表中 + Items1.append((new_item1, x, y)) + + +def adjust_three(event): + global Viewcanvas + global Items1 + global Items3 + x = event.x + Offset_x + y = event.y + Offset_y + # 记录被拖拽的原始图元的id,方便后续进行模型的正确性检查 + Items3.append(9) + # 复制一个图片,表示调整操作 + new_item1 = Viewcanvas.create_image(x, y, image=List_image[7]) + # 复制对象的标签 + Viewcanvas.create_text(x, y + 40, text='调整3') + event.widget.coords(Dragged_item, Original_x, Original_y) # 恢复图元的原位置 + # 将新图元的id和坐标添加到列表中 + Items1.append((new_item1, x, y)) + +def connecting_line(): + global Viewcanvas + global Items2 + last_item = Items1[-1] # 获取最后一个图元的id和坐标 + prev_item = Items1[-2] # 获取倒数第二个图元的id和坐标 + # 获取最后一个图元的边界框坐标,形式为(x1,y1,x2,y2),其中(x1,y1)是左上角,(x2,y2)是右下角 + last_bbox = Viewcanvas.bbox(last_item[0]) + # 获取倒数第二个图元的边界框坐标,形式同上 + prev_bbox = Viewcanvas.bbox(prev_item[0]) + # 计算线条的起点和终点,使其与图元的边界对齐,并留出一定距离以避免重叠 + start_x = prev_bbox[2] + 5 # 起点x坐标为倒数第二个图元右边界加10像素 + start_y = prev_bbox[3] - (prev_bbox[3] - prev_bbox[1]) / 2 # 起点y坐标为倒数第二个图元垂直中心 + end_x = last_bbox[0] # 终点x坐标为最后一个图元左边界 + end_y = last_bbox[3] - (last_bbox[3] - last_bbox[1]) / 2 # 终点y坐标为最后一个图元垂直中心 + # 创建一条线,带有箭头,并设置箭头形状、大小、颜色和平滑度等参数 + if Items3[-1] < 6: + new_item = Viewcanvas.create_line(start_x, start_y, end_x, end_y, arrow=tk.LAST, + arrowshape=(16, 20, 4), fill='lightblue', smooth=True) + if Items3[-1] == 1: + x = last_bbox[2] - (last_bbox[2] - last_bbox[0]) / 2 + y = last_bbox[1] + Conv_xy_list.append((x, y)) + if Items3[-1] == 3: + x = last_bbox[2] - (last_bbox[2] - last_bbox[0]) / 2 + y = last_bbox[1] + Fullconn_xy_list.append((x, y)) + + elif Items3[-1] == 6: + # 计算折线的中间点,使其与图元的边界对齐,并留出一定距离以避免重叠 + mid_x = prev_bbox[2] - (prev_bbox[2] - prev_bbox[0]) / 2 # 中间点x坐标为起点和终点的平均值 + mid_y = prev_bbox[1] - 80 # 中间点y坐标为起点y坐标减20像素 + # 创建一条折线,带有箭头,并设置箭头形状、大小、颜色和平滑度等参数 + x1 = prev_bbox[2] - (prev_bbox[2] - prev_bbox[0]) / 2 + y1 = prev_bbox[1] + x2 = last_bbox[2] + y2 = last_bbox[3] - (last_bbox[3] - last_bbox[1]) / 2 + new_item = Viewcanvas.create_line(x1, y1, mid_x, mid_y, x2, y2, arrow=tk.LAST, + arrowshape=(16, 20, 4), fill='lightblue', smooth=False) + elif Items3[-1] == 7: + x1 = x_loss + y1 = y_loss + x2, y2 = Conv_xy_list[0] + new_item = Viewcanvas.create_line(x1, y1, last_bbox[2] - (last_bbox[2] - last_bbox[0]) / 2, + last_bbox[3] - (last_bbox[3] - last_bbox[1]) / 2, x2, y2, arrow=tk.LAST, + arrowshape=(16, 20, 4), fill='lightblue', smooth=False) + Conv_xy_list.remove(Conv_xy_list[0]) + elif Items3[-1] == 8: + x1 = x_loss + y1 = y_loss + x2, y2 = Fullconn_xy_list[0] + new_item = Viewcanvas.create_line(x1, y1, last_bbox[2] - (last_bbox[2] - last_bbox[0]) / 2, + last_bbox[3] - (last_bbox[3] - last_bbox[1]) / 2, x2, y2, arrow=tk.LAST, + arrowshape=(16, 20, 4), fill='lightblue', smooth=False) + Fullconn_xy_list.remove(Fullconn_xy_list[0]) + Items2.append(new_item) + +def on_drag(obj_id1,event): + while obj_id1 == 4: # 如果拖拽的是图元加载数据集 + entity_loading_dataset(event) + break + while obj_id1 == 6: # 卷积 + convolution(event) + break + while obj_id1 == 8: # 池化 + pooling(event) + break + while obj_id1 == 10: # 全连接 + fully_connected(event) + break + while obj_id1 == 12: # 非线性 + nonlinear(event) + break + while obj_id1 == 14: # 分类 + class_ification(event) + break + while obj_id1 == 16: # 误差计算 + error_calculation(event) + break + while obj_id1 == 18: # 调整1 + adjust_one(event) + break + while obj_id1 == 20: # 调整2 + adjust_two(event) + break + while obj_id1 == 22: # 调整3 + adjust_three(event) + break + +# 定义图元拖拽结束的函数 +def on_drag_end(event): + obj_id1 = Dragged_item[0] # 获取被拖拽的图元的id + # 使用 print(obj_id1) 从而查看各个图元的id,此步省略 + # 根据图元的类型,复制相应的图片到右侧画布 + on_drag(obj_id1,event) + # 如果列表中有至少两个图元,就创建一条线,连接最后两个图元的中心点 + while len(Items1) >= 2: + connecting_line() + break +def element_binding(obj_x, obj_y, image, y, text): + global Viewcanvas + # 创建图元对象 + l1 = Viewcanvas.create_image(obj_x, obj_y, image=image) + # 创建图元对象的标签 + Viewcanvas.create_text(obj_x - 70, obj_y + y, text=text, font=("黑体", 14)) + return l1 + +def create_left_element(AllModelObj,List_image): + global Viewcanvas + # 遍历AllModelObj列表,在窗口左侧创建图元菜单 + for obj in AllModelObj: + # 获取图元对象的类型、标签等信息 + obj_id = obj[0] + obj_type = obj[1] + obj_label = obj[2] + # 并且要根据需求调整每个对象的位置 + obj_x = obj[6] # 根据对象的id计算x坐标 + obj_y = obj[7] # 根据对象的id计算y坐标 + # 根据对象的类型,绘制相应的图形 + if obj_type == 1: # 加载数据集 + l1 = element_binding(obj_x, obj_y, List_image[0], 3, " 加载" + "\n" + "数据集") + elif obj_type == 2: # 卷积 + l1 = element_binding(obj_x, obj_y, List_image[1], 0, "卷积") + elif obj_type == 3: # 池化 + l1 = element_binding(obj_x, obj_y, List_image[2], 0, "池化") + elif obj_type == 4: # 全连接 + l1 = element_binding(obj_x, obj_y, List_image[3], 0, "全连接" + "\n" + " 函数") + elif obj_type == 5: # 非线性 + l1 = element_binding(obj_x, obj_y, List_image[4], 0, "非线性" + "\n" + " 函数") + elif obj_type == 6: # 分类 + l1 = element_binding(obj_x, obj_y, List_image[5], 0, "类别") + elif obj_type == 7: # 误差计算 + l1 = element_binding(obj_x, obj_y, List_image[6], 0, "误差") + elif obj_type == 8: # 调整 + l1 = element_binding(obj_x, obj_y, List_image[7], 0, "调整1") + elif obj_type == 9: # 调整 + l1 = element_binding(obj_x, obj_y, List_image[7], 0, "调整2") + elif obj_type == 10: # 调整 + l1 = element_binding(obj_x, obj_y, List_image[7], 0, "调整3") + elif obj_type == 11: # 调整 + l1 = element_binding(obj_x, obj_y, List_image[8], 3, "主数据连接线") + elif obj_type == 12: # 调整 + l1 = element_binding(obj_x, obj_y, List_image[9], 3, "参数连接线") + # 为左边菜单的每个图元绑定鼠标按下、移动和松开的事件 + Viewcanvas.tag_bind(l1, "", on_drag_start) + Viewcanvas.tag_bind(l1, "", on_drag_motion) + Viewcanvas.tag_bind(l1, "", on_drag_end) + +def train_setting(): + global Train_list + Train_list = [] + top = creat_window("训练参数配置")# 创建弹出的参数配置窗口 + epoch_entry = create_input_box(top,"训练轮数:", 4)# 创建一个输入框,获取训练轮数 + rate_entry=create_input_box(top, '学习率:', 0.1)# 创建一个输入框,获取学习率 + batch_size_entry=create_input_box(top, "批次:", 60)# 创建一个输入框,获取批次 + # 创建 + def get_input(): + # 获取输入框的内容 + result1 = int(epoch_entry.get()) + result2 = float(rate_entry.get()) + result3 = int(batch_size_entry.get()) + Train_list.append(result1) + Train_list.append(result2) + Train_list.append(result3) + # 关闭窗口 + top.destroy() + button = tk.Button(top, text="获取信息", command=get_input) + button.pack() + +def conn_forward(count,layer,outputs): + # 若为第一层卷积层且该层的图元实例Conv1还未创建 + if count[layer] == 1 and Conv1 == None: + # 调用SetConvPara()函数,获取卷积层1参数 + ConvPara = setconv_para(1) + # 若图元实例Conv1已经被定义,说明需要根据反向传播调整卷积核 + if count[layer] == 1 and Conv1 != None: + ConvPara = Conv1[5][1] + if count[layer] == 2 and Conv2 == None: + ConvPara = setconv_para(count[layer]) + if count[layer] == 2 and Conv2 != None: + ConvPara = Conv2[5][2] + if count[layer] == 3 and Conv3 == None: + ConvPara = setconv_para(count[layer]) + if count[layer] == 3 and Conv3 != None: + ConvPara = Conv3[5][3] + # 初始化一个空列表来存储池化后的结果 + new_outputs = [] + # 对每一张图片进行前向传播 + for output in outputs: + # 获取矩阵的维度 + dim = len(output.shape) + # 如果是二维矩阵,则转化为三维矩阵 + if dim == 2: + image_h, image_w = output.shape + output = np.reshape(output, (1, image_h, image_w)) + # 调用ConvProc()函数,根据ConvPara参数完成卷积计算 + output = conv_proc(output, ConvPara) + new_outputs.append(output) + # 若为三维矩阵,则保持不变直接卷积处理 + elif dim == 3: + output = conv_proc(output, ConvPara) + new_outputs.append(output) + # 将new_outputs赋值给outputs + outputs = new_outputs + # 只打印第一张图片信息,检查是否正确计算 + print("卷积处理结果:") + print(outputs[0]) + print("") + return outputs +def pool_forward(count,layer,outputs): + global Pool1 + global Pool2 + global Pool3 + if count[layer] == 1 and Pool1 == None: + # 调用设置池化层参数的函数,获取池化参数 + PoolPara = setpool_para(count[layer]) + if count[layer] == 1 and Pool1 != None: + PoolPara = Pool1[5][1] + if count[layer] == 2 and Pool2 == None: + PoolPara = setpool_para(count[layer]) + if count[layer] == 2 and Pool2 != None: + PoolPara = Pool2[5][2] + if count[layer] == 3 and Pool3 == None: + PoolPara = setpool_para(count[layer]) + if count[layer] == 3 and Pool3 != None: + PoolPara = Pool3[5][3] + # 初始化一个空列表来存储池化后的结果 + new_outputs = [] + # 对outputs列表中的每个元素调用PoolProc函数,并将结果添加到new_outputs列表中 + for output in outputs: + new_outputs.append(pool_proc(output, PoolPara)) + # 将new_outputs赋值给outputs + outputs = new_outputs + if count[layer] == 1: + Pool1.append(outputs) + if count[layer] == 2: + Pool2.append(outputs) + if count[layer] == 3: + Pool3.append(outputs) + print("池化处理结果:") + print(outputs[0]) + print("") + return outputs + +def fullconn_forward(count,layer,outputs): + output = outputs[0] + # 若图元实例Fullconn1未被定义 + if count[layer] == 1 and Fullconn1 == None: + # 调用设置全连接层参数的函数,获取全连接参数 + FullConnPara = setfullconn_para(output, count[layer]) + # 若图元实例Fullconn1已经被定义,说明需要根据反向传播调整权重矩阵和偏置向量 + if count[layer] == 1 and Fullconn1 != None: + FullConnPara = Fullconn1[5][1] + if count[layer] == 2 and Fullconn2 == None: + FullConnPara = setfullconn_para(output, count[layer]) + if count[layer] == 2 and Fullconn2 != None: + FullConnPara = Fullconn2[5][2] + if count[layer] == 3 and Fullconn3 == None: + FullConnPara = setfullconn_para(output, count[layer]) + if count[layer] == 3 and Fullconn3 != None: + FullConnPara = Fullconn3[5][3] + # 初始化一个空列表来存储池化后的结果 + new_outputs = [] + # 对outputs列表中的每个元素调用FullConnProc函数,并将结果添加到new_outputs列表中 + for output in outputs: + new_outputs.append(fullconn_proc(output, FullConnPara)) + # 将new_outputs赋值给outputs + outputs = new_outputs + # 只打印第一张图片信息,检查是否正确计算 + + print("全连接处理结果:") + print(outputs[0]) + print("") + return outputs + +def nonlinear_forward(outputs): + # 调用设置非线性参数的函数,获取非线性参数 + NonLPara = setnonl_para() + # 初始化一个空列表来存储池化后的结果 + new_outputs = [] + # 对outputs列表中的每个元素调用NonlinearProc函数,并将结果添加到new_outputs列表中 + for output in outputs: + output, output_derivative = nonlinear_proc(output, NonLPara) + new_outputs.append(output) + # 将new_outputs赋值给outputs + outputs = new_outputs + # 只打印第一张图片信息,检查是否正确计算 + print("非线性处理结果:") + print(outputs[0]) + print("") + + return outputs + +def classifier_forward(outputs): + # 设置分类函数参数 + ClassifyPara = setclassify_para() + # 初始化一个空列表来存储池化后的结果 + new_outputs = [] + global Prob_images + Prob_images = [] + # 定义softmax函数 + def softmax(x): + # 减去最大值,防止数值溢出 + x -= np.max(x) + # 计算指数和归一化 + return np.exp(x) / np.sum(np.exp(x)) + # 对outputs列表中的每个元素调用ClassifierProc函数,并将结果添加到new_outputs列表中 + for output in outputs: + new_outputs.append(classifier_proc(output, ClassifyPara)) + # 调用softmax函数,得到概率分布向量 + prob = softmax(output) + # 将概率向量结果存储到列表 + Prob_images.append(prob) + # 将new_outputs赋值给outputs + outputs = new_outputs + # 只打印第一张图片信息,检查是否正确计算 + print("输出示例概率向量:") + print(Prob_images[0:3]) + print("") + + return outputs +# 前向传播 +def forward_propagation(Train_images): + images = Train_images# 获取训练集 + outputs = images# 存储每一层的输出结果的列表 + Counts = {}# 根据前向传播顺序列表,依次进行卷积层、池化层、全连接层、非线性层和分类层的操作 + for layer in Items3[1:]: + if layer not in Counts:# 如果layer是第一次出现,就把它加入字典,并设置计数器为1 + Counts[layer] = 1 + else:# 如果layer已经出现过,就把它的计数器加一 + Counts[layer] += 1 + if layer == 1:# 如果是卷积层,就调用ConvProc函数,根据卷积核和步长进行卷积计算,并更新输出结果 + outputs = conn_forward(Counts,layer,outputs) + elif layer == 2:# 如果是池化层,就调用PoolProc函数,进行池化计算,并更新输出结果 + outputs = pool_forward(Counts,layer,outputs) + elif layer == 3:# 如果是全连接层,就调用FullConnProc函数,根据权重矩阵和偏置向量进行全连接计算,并更新输出结果 + outputs= fullconn_forward(Counts,layer,outputs) + elif layer == 4: # 如果是非线性层,就调用NonlinearProc函数,根据激活函数进行非线性变换,并更新输出结果 + outputs = nonlinear_forward(outputs) + elif layer == 5:# 如果是分类层,就调用ClassifierProc函数,根据权重矩阵和偏置向量进行分类计算,并更新输出结果 + outputs=classifier_forward(outputs) + outputs = np.array(outputs)# 将输出结果列表转换为数组形式,方便后续处理 + return outputs# 返回输出结果数组 + +def determine(Train_list,Items3): + if len(Train_list) == 0: + messagebox.showerror("错误", "请设置训练参数!") + return 0 + if len(Items3) == 0: + messagebox.showerror("错误", "请添加图元!") + return 0 + return 1 +def label_array(i): + # 读取标签数据 + df = pd.read_csv('data/emotion.csv', header=None, skiprows=range(0, i * batch), nrows=(i + 1) * batch - i * batch) + # 将标签数据转化成数组 + right_label = df.iloc[:, 0].tolist() + right_label = list(map(int, right_label)) + right_label = [x + 1 for x in right_label] + return right_label + +def train():# 训练 + if determine(Train_list, Items3) == 0: + return + epoch,rate,batch_size = Train_list + first_epoch = 1 + while first_epoch <= epoch: + first_epoch = first_epoch + 1 + for i in range(len(Train_images) // batch_size): + images = Train_images[i * batch_size:(i + 1) * batch_size] + forward_propagation(images) + global Prob_images + Prob_images = np.squeeze(Prob_images) # 获取分类结果的概率向量数组 + global batch + batch = len(Prob_images) + right_label = label_array(i) # 读取标签数据,将标签数据转化成数组 + ErrorPara = seterror_para() # 设置误差参数 + loss = error_proc(Prob_images, right_label, ErrorPara) * 0.1 # 计算误差值 + print("当前epoch:",first_epoch,i * batch_size,":",(i + 1) * batch_size,"误差值:",loss) + print("") + if (Conv2 == None) and (Conv3 == None): + conv_one(loss,images) + elif (Conv2 != None) and (Conv3 == None): + conv_two(loss,images) + elif (Conv3 != None): + conv_three(loss,images) + if (Fullconn2 == None) and (Fullconn3 == None): + fully_one(loss) + elif (Fullconn2 != None) and (Fullconn3 == None): + fully_two(loss) + elif (Fullconn3 != None): + fully_three(loss) +# 输出模型程序 +def model_show(): + pixel = ['数据集','卷积','池化','全连接','非线性','分类','误差','调整1','调整2','调整3'] + pixel_items3 = [] + for i in Items3: + pixel_items3.append(pixel[i]) + print(pixel_items3) + +def connecting_lines(obj_x, obj_y, index, x, y, x1, x2, y1, y2, y3 , image, text, smooth, width): + # 创建图元对象 + Viewcanvas.create_image(obj_x+(index + x) * 110, obj_y, image=image) + # 创建图元对象的标签 + Viewcanvas.create_text(obj_x+(index + x) * 110, obj_y + y1, text=text, font=("黑体", 14)) + # 创建数据线箭头 + Viewcanvas.create_line(obj_x+(index + x) * 110 +x1, obj_y + y2, obj_x+(index + y) * 110 +x2, obj_y + y3, arrow=tk.LAST, + arrowshape=(16, 20, 4), fill='lightblue', smooth=smooth, width=width) + +def number_judgments(lsts): + global Items3 + count = [] + sequence = [] + for index,lll in enumerate(lsts): + if type(lll) == list: + count.append(lll[1]) + sequence.append(index) + if lll[1]==7: + break + count_2,count_3,count_4=0,0,0 + list_count=[] + for i in count: + if i == 2: + count_2 += 1 + list_count.append(i*10+count_2) + elif i == 3: + count_3 += 1 + list_count.append(i * 10 + count_3) + elif i == 4: + count_4 += 1 + list_count.append(i * 10 + count_4) + else: + list_count.append(i * 10) + Items3 = [0] + for i in count: + Items3.append(i - 1) + return count,list_count,sequence +def load_file(): + filename = filedialog.askopenfilename(filetypes=[("Pickle files", "*.pkl")]) + # 从本地文件中读取两个列表,用rb模式打开文件 + with open(filename, "rb") as f: + # 创建一个空列表,用来存储读取的列表 + lsts = [] + # 用一个循环来读取所有的列表,直到文件结束 + while True: + try: + # 读取一个列表,并追加到大列表中 + lst = pickle.load(f) + lsts.append(lst) + except EOFError: + # 如果遇到文件结束的错误,就跳出循环 + break + return lsts + +def connecting(obj_x, obj_y, index, x, y1, image, text): + # 创建图元对象 + Viewcanvas.create_image(obj_x+(index + x) * 110, obj_y, image=image) + # 创建图元对象的标签 + Viewcanvas.create_text(obj_x+(index + x) * 110, obj_y + y1, text=text, font=("黑体", 14)) +# 加载已有模型 +def load_model(): + import copy + lsts = load_file() + DataPara = setload_data() + global Train_images + global Test_images + global Viewcanvas + global Listinstance + global Viewcanvas + create_left_element(AllModelObj, List_image) + Train_images, Test_images = load_data(DataPara) # load_data()函数,根据参数加载数据集 + # 打印一些信息,检查是否正确加载 + print("训练集图片的形状:", Train_images.shape) + print("测试集图片的形状:", Test_images.shape) + # 根据pkl文件的前向传播顺序列表,依次识别卷积层、池化层、全连接层、非线性层和分类层的操作 + count,counts,sequence = number_judgments(lsts) + x,y = 420,300 + connecting_lines(x, y, 0, 0, 0, 25, 60, 45, 0, 0, List_image[0], '数据集', True, 2) + for layer in range(len(count)): + if count[layer] == 2: # 如果是卷积层,将读取的卷积层的信息存储到Conv实例 + if counts[layer]%10 == 1: + global Conv1 + Listinstance[1] = copy.deepcopy(lsts[sequence[layer]]) + Conv1 = lsts[sequence[layer]] + connecting_lines(x, y, layer, 1, 2, 25, -25, 45, 0, 0, List_image[1], '卷积层1', True, 2) + if counts[layer]%10 == 2: + global Conv2 + Conv2 = lsts[sequence[layer]] + connecting_lines(x, y, layer, 1, 2, 25, -25, 45, 0, 0, List_image[1], '卷积层2', True, 2) + if counts[layer]%10 == 3: + global Conv3 + Conv3 = lsts[sequence[layer]] + connecting_lines(x, y, layer, 1, 2, 25, -25, 45, 0, 0, List_image[1], '卷积层3', True, 2) + if count[layer] == 3: # 如果是池化层,将读取的池化层的信息存储到Pool实例 + if counts[layer]%10 == 1: + global Pool1 + Listinstance[2] =copy.deepcopy(lsts[sequence[layer]]) + Pool1 = lsts[sequence[layer]] + connecting_lines(x, y, layer, 1, 2, 25, -25, 45, 0, 0, List_image[2], '池化1', True, 2) + if counts[layer]%10 == 2: + global Pool2 + Pool2 = lsts[sequence[layer]] + connecting_lines(x, y, layer, 1, 2, 25, -25, 45, 0, 0, List_image[2], '池化2', True, 2) + if counts[layer]%10 == 3: + global Pool3 + Pool3 = lsts[sequence[layer]] + connecting_lines(x, y, layer, 1, 2, 25, -25, 45, 0, 0, List_image[2], '池化3', True, 2) + if count[layer] == 4: # 如果是全连接层,将读取的全连接层的信息存储到Pool实例 + if counts[layer]%10 == 1: + global Fullconn1 + Listinstance[3] = lsts[sequence[layer]] + Fullconn1 = copy.deepcopy(lsts[sequence[layer]])# 深拷贝创建了一个全新的对象,要使用深拷贝,不然报错 + Listinstance[3][5] = str(Fullconn1[5][1]["num_outputs"]) + connecting_lines(x, y, layer, 1, 2, 25, -25, 45, 0, 0, List_image[3], '全连接1', True, 2) + if counts[layer]%10 == 2: + global Fullconn2 + Fullconn2 = lsts[sequence[layer]] + # FullConn[5] = FullConn[5] + " " + str(Fullconn2[5][2]["num_outputs"]) + connecting_lines(x, y, layer, 1, 2, 25, -25, 45, 0, 0, List_image[3], '全连接3', True, 2) + if counts[layer]%10 == 3: + global Fullconn3 + Fullconn3 = lsts[sequence[layer]] + # FullConn[5] = FullConn[5] + " " + str(Fullconn3[5][3]["num_outputs"]) + connecting_lines(x, y, layer, 1, 2, 25, -25, 45, 0, 0, List_image[3], '全连接3', True, 2) + if count[layer] == 5: # 如果是非线性层,将读取的非线性层的信息存储到Nonline实例 + Listinstance[4] = lsts[sequence[layer]] + connecting_lines(x, y, layer, 1, 2, 25, -25, 45, 0, 0, List_image[4], '非线性', True, 2) + if count[layer] == 6: # 如果是分类输出层,将读取的信息存储到Nonline实例 + Listinstance[5] = lsts[sequence[layer]] + connecting(x, y, layer, 1, 45,List_image[5], '分类') + if count[layer] == 7: # 如果是计算误差层,将读取的信息存储到Error实例 + Listinstance[6] = lsts[sequence[layer]] + connecting(x - 30, y - 120, layer, 0, 45, List_image[6], '计算误差') + Viewcanvas.create_line(x + layer * 110 + 25, y, x + layer * 110 + 10, y - 60, + x + 5 * 110 - 20, y - 120, arrow=tk.LAST, arrowshape=(16, 20, 4), + fill='lightblue', smooth=True, width=2) + # 创建图元对象 + Viewcanvas.create_image(600, 180, image=List_image[7]) + # 创建图元对象的标签 + Viewcanvas.create_text(600, 230, text='调整1', font=("黑体", 14)) + Viewcanvas.create_line(x + layer * 110 -50, y - 140, 630, 165,arrow=tk.LAST, arrowshape=(16, 20, 4), + fill='lightblue', smooth=True, width=2) + Viewcanvas.create_line(600, 200, x + 1 * 110 ,y-20, arrow=tk.LAST, arrowshape=(16, 20, 4), + fill='lightblue', smooth=True, width=2) + # 创建图元对象 + Viewcanvas.create_image(860, 200, image=List_image[7]) + # 创建图元对象的标签 + Viewcanvas.create_text(860, 250, text='调整2', font=("黑体", 14)) + Viewcanvas.create_line(x + layer * 110 -60, y - 120, 875, 200,arrow=tk.LAST, arrowshape=(16, 20, 4), + fill='lightblue', smooth=True, width=2) + Viewcanvas.create_line(835, 200, x + (layer-2) * 110 + 10, y - 20, arrow=tk.LAST, arrowshape=(16, 20, 4), + fill='lightblue', smooth=True, width=2) + +def create_window(number,count,list1,list2,list3,list4,list5,list6): + global Listinstance + if number == 1: + # 把数字的出现次数加一 + count[number] = count.get(number, 0) + 1 + if count[number] == 1: + # 获取第一层卷积层的参数 + para_list = list1[count[number] - 1].split(",") + para_list = [int(x) for x in para_list] + window = creat_window('卷积1参数调整') # 创建一个新的窗口 + kernel_size_entry = create_input_box(window, "卷积核大小:", para_list[0]) # 创建一个输入框,获取卷积核大小 + stride_entry = create_input_box(window, "卷积步长:", para_list[1]) # 创建一个输入框,获取卷积步 + def modify_para(): + # 获取输入框的内容 + result1 = int(kernel_size_entry.get()) + result2 = int(stride_entry.get()) + new_para = str(result1)+','+str(result2) + Listinstance[1][5] = Listinstance[1][5].replace(list1[count[number] - 1], new_para) + # 关闭窗口 + window.destroy() + # 创建一个按钮,文本为数字 + button = tk.Button(window, text="卷积参数修改") + # 绑定按钮的点击事件,使得点击后销毁窗口 + button.config(command=modify_para) + # 把按钮放在窗口中 + button.pack() + if count[number] == 2: + # 获取第一层卷积层的参数 + para_list = list1[count[number] - 1].split(",") + para_list = [int(x) for x in para_list] + window = creat_window('卷积2参数调整') # 创建一个新的窗口 + kernel_size_entry = create_input_box(window, "卷积核大小:", para_list[0]) # 创建一个输入框,获取卷积核大小 + stride_entry = create_input_box(window, "卷积步长:", para_list[1]) # 创建一个输入框,获取卷积步 + def modify_para(): + # 获取输入框的内容 + result1 = int(kernel_size_entry.get()) + result2 = int(stride_entry.get()) + new_para = str(result1)+','+str(result2) + Listinstance[1][5] = Listinstance[1][5].replace(list1[count[number] - 1], new_para) + # 关闭窗口 + window.destroy() + # 创建一个按钮,文本为数字 + button = tk.Button(window, text="卷积参数修改") + # 绑定按钮的点击事件,使得点击后销毁窗口 + button.config(command=modify_para) + # 把按钮放在窗口中 + button.pack() + if count[number] == 3: + # 获取第一层卷积层的参数 + para_list = list1[count[number] - 1].split(",") + para_list = [int(x) for x in para_list] + # 创建一个输入框,获取卷积核大小 + window = creat_window('卷积3参数调整') # 创建一个新的窗口 + kernel_size_entry = create_input_box(window, "卷积核大小:", para_list[0]) # 创建一个输入框,获取卷积核大小 + stride_entry = create_input_box(window, "卷积步长:", para_list[1]) # 创建一个输入框,获取卷积步 + def modify_para(): + # 获取输入框的内容 + result1 = int(kernel_size_entry.get()) + result2 = int(stride_entry.get()) + new_para = str(result1)+','+str(result2) + Listinstance[1][5] = Listinstance[1][5].replace(list1[count[number] - 1], new_para) + # 关闭窗口 + window.destroy() + + # 创建一个按钮,文本为数字 + button = tk.Button(window, text="卷积参数修改") + # 绑定按钮的点击事件,使得点击后销毁窗口 + button.config(command=modify_para) + # 把按钮放在窗口中 + button.pack() + # 返回窗口对象 + return window + # 如果是池化层 + if number == 2: + # 把数字的出现次数加一 + count[number] = count.get(number, 0) + 1 + if count[number] == 1: + # 获取第一层卷积层的参数 + para_list = list2[count[number] - 1].split(",") + para_list[1] = int(para_list[1]) + window = creat_window('池化1参数调整') # 创建一个新的窗口 + pool_type_combobox = create_dropdown_box(window, "池化池类型:", ["max", "avg", "min"]) # 创建一个下拉框,用于选择池化类型 + pool_size_entry = create_input_box(window, "池化池大小:", para_list[1]) # 创建一个输入框,获取卷积步 + def modify_para(): + # 从下拉框中获取池化类型 + pool_type = pool_type_combobox.get() + # 从输入框中获取池大小 + pool_size = int(pool_size_entry.get()) + # 关闭窗口 + new_para = str(pool_type)+','+str(pool_size) + Listinstance[2][5] = Listinstance[2][5].replace(list2[count[number] - 1], new_para) + # 关闭窗口 + window.destroy() + # 创建一个按钮,文本为数字 + button = tk.Button(window, text="池化参数修改") + # 绑定按钮的点击事件,使得点击后销毁窗口 + button.config(command=modify_para) + # 把按钮放在窗口中 + button.pack() + if count[number] == 2: + # 获取第一层卷积层的参数 + para_list = list2[count[number] - 1].split(",") + para_list[1] = int(para_list[1]) + window = creat_window('池化2参数调整') # 创建一个新的窗口 + pool_type_combobox = create_dropdown_box(window, "池化池类型:", ["max", "avg", "min"]) # 创建一个下拉框,用于选择池化类型 + pool_size_entry = create_input_box(window, "池化池大小:", para_list[1]) # 创建一个输入框,获取卷积步 + def modify_para(): + # 从下拉框中获取池化类型 + pool_type = pool_type_combobox.get() + # 从输入框中获取池大小 + pool_size = int(pool_size_entry.get()) + # 关闭窗口 + new_para = str(pool_type)+','+str(pool_size) + Listinstance[2][5] = Listinstance[2][5].replace(list2[count[number] - 1], new_para) + # 关闭窗口 + window.destroy() + # 创建一个按钮,文本为数字 + button = tk.Button(window, text="池化参数修改") + # 绑定按钮的点击事件,使得点击后销毁窗口 + button.config(command=modify_para) + # 把按钮放在窗口中 + button.pack() + if count[number] == 3: + # 获取第一层卷积层的参数 + para_list = list2[count[number] - 1].split(",") + para_list[1] = int(para_list[1]) + window = creat_window('池化3参数调整') # 创建一个新的窗口 + pool_type_combobox = create_dropdown_box(window, "池化池类型:", ["max", "avg", "min"]) # 创建一个下拉框,用于选择池化类型 + pool_size_entry = create_input_box(window, "池化池大小:", para_list[1]) # 创建一个输入框,获取卷积步 + def modify_para(): + # 从下拉框中获取池化类型 + pool_type = pool_type_combobox.get() + # 从输入框中获取池大小 + pool_size = int(pool_size_entry.get()) + # 关闭窗口 + new_para = str(pool_type)+','+str(pool_size) + Listinstance[2][5] = Listinstance[2][5].replace(list2[count[number] - 1], new_para) + # 关闭窗口 + window.destroy() + # 创建一个按钮,文本为数字 + button = tk.Button(window, text="池化参数修改") + # 绑定按钮的点击事件,使得点击后销毁窗口 + button.config(command=modify_para) + # 把按钮放在窗口中 + button.pack() + # 返回窗口对象 + return window + if number == 3: + # 把数字的出现次数加一 + count[number] = count.get(number, 0) + 1 + if count[number] == 1: + # 获取第一层全连接层的参数 + para = list3[count[number] - 1] + para = int(para) + window = creat_window('全连接1参数调整') # 创建一个新的窗口 + num_outputs_entry = create_input_box(window, "输出维度:", para) # 创建一个输入框,获取卷积步 + + def modify_para(): + # 获取输入框的内容 + num = int(num_outputs_entry.get()) + new_para = str(num) + Listinstance[3][5] = Listinstance[3][5].replace(list3[count[number] - 1], new_para) + # 关闭窗口 + window.destroy() + # 创建一个按钮,文本为数字 + button = tk.Button(window, text="全连接参数修改") + # 绑定按钮的点击事件,使得点击后销毁窗口 + button.config(command=modify_para) + # 把按钮放在窗口中 + button.pack() + if count[number] == 2: + # 获取第一层全连接层的参数 + para = list3[count[number] - 1] + para = int(para) + window = creat_window('全连接2参数调整') # 创建一个新的窗口 + num_outputs_entry = create_input_box(window, "输出维度:", para) # 创建一个输入框,获取全连接 + + def modify_para(): + # 获取输入框的内容 + num = int(num_outputs_entry.get()) + new_para = str(num) + Listinstance[3][5] = Listinstance[3][5].replace(list3[count[number] - 1], new_para) + # 关闭窗口 + window.destroy() + # 创建一个按钮,文本为数字 + button = tk.Button(window, text="全连接参数修改") + # 绑定按钮的点击事件,使得点击后销毁窗口 + button.config(command=modify_para) + # 把按钮放在窗口中 + button.pack() + if count[number] == 3: + # 获取第一层全连接层的参数 + para = list3[count[number] - 1] + para = int(para) + window = creat_window('全连接3参数调整') # 创建一个新的窗口 + num_outputs_entry = create_input_box(window, "输出维度:", para) # 创建一个输入框,获取全连接 + + def modify_para(): + # 获取输入框的内容 + num = int(num_outputs_entry.get()) + new_para = str(num) + Listinstance[3][5] = Listinstance[3][5].replace(list3[count[number] - 1], new_para) + # 关闭窗口 + window.destroy() + + # 创建一个按钮,文本为数字 + button = tk.Button(window, text="全连接参数修改") + # 绑定按钮的点击事件,使得点击后销毁窗口 + button.config(command=modify_para) + # 把按钮放在窗口中 + button.pack() + # 返回窗口对象 + return window + if number == 4: + # 把数字的出现次数加一 + count[number] = count.get(number, 0) + 1 + if count[number] == 1: + # 获取第一层非线性层的参数 + para = list3[count[number] - 1] + window = creat_window('非线性1参数调整') # 创建一个新的窗口 + nonlinear_mode_combobox = create_dropdown_box(window, "非线性类型:", + ["Sigmoid", "ReLU", "Tanh"]) # 创建一个下拉框,用于选择非线性类型 + + def modify_para(): + # 获取输入框的内容 + nonlinear_mode = nonlinear_mode_combobox.get() + new_para = str(nonlinear_mode) + Listinstance[4][5] = Listinstance[4][5].replace(list4[count[number] - 1], new_para) + # 关闭窗口 + window.destroy() + + # 创建一个按钮,文本为数字 + button = tk.Button(window, text="非线性参数修改") + # 绑定按钮的点击事件,使得点击后销毁窗口 + button.config(command=modify_para) + # 把按钮放在窗口中 + button.pack() + # 返回窗口对象 + return window + if number == 5: + # 把数字的出现次数加一 + count[number] = count.get(number, 0) + 1 + if count[number] == 1: + # 获取分类的参数 + para = list5 + para = float(para) + window = creat_window('分类参数调整') # 创建一个新的窗口 + threshold_entry = create_input_box(window, "阈值:", para) # 创建一个输入框,用于输入阈值 + + def modify_para(): + # 获取输入框的内容 + threshold = threshold_entry.get() + new_para = str(threshold) + Listinstance[5][5] = Listinstance[5][5].replace(list5, new_para) + # 关闭窗口 + window.destroy() + # 创建一个按钮,文本为数字 + button = tk.Button(window, text="分类参数修改") + # 绑定按钮的点击事件,使得点击后销毁窗口 + button.config(command=modify_para) + # 把按钮放在窗口中 + button.pack() + # 返回窗口对象 + return window + if number == 6: + # 把数字的出现次数加一 + count[number] = count.get(number, 0) + 1 + if count[number] == 1: + # 获取分类的参数 + para = list6 + window = creat_window('误差参数调整') # 创建一个新的窗口 + loss_type_combobox = create_dropdown_box(window, "误差类型:", + ["CEE", "MSE", "MAE"]) # 创建一个下拉框,用于选择误差类型 + def modify_para(): + # 获取输入框的内容 + loss_type = loss_type_combobox.get() + new_para = str(loss_type) + Listinstance[6][5] = Listinstance[6][5].replace(list6[count[number] - 1], new_para) + # print(Listinstance[6]) + # 关闭窗口 + window.destroy() + + # 创建一个按钮,文本为数字 + button = tk.Button(window, text="误差参数修改") + # 绑定按钮的点击事件,使得点击后销毁窗口 + button.config(command=modify_para) + # 把按钮放在窗口中 + button.pack() + return window # 返回窗口对象 + +# 清空当前模型展示区 +def restart_new_model(): + # 这将在子进程中调用当前Python解释器,并传递当前文件的路径作为参数 + subprocess.call([sys.executable, __file__]) + +def setpara_func(): # 图元参数配置与修改 + global Viewcanvas + # 一个字典,用来记录每个数字出现的次数 + count = {} + list1 = Listinstance[1][5].split() + list2 = Listinstance[2][5].split() + list3 = Listinstance[3][5].split() + list4 = Listinstance[4][5].split() + list5 = Listinstance[5][5] + list6 = Listinstance[6][5].split() + for i in Items4: # 清除所有文字标签 + Viewcanvas.delete(i[0]) + numbers = [x for x in Items3 if x <= 6] # 一个函数,用来创建一个带有一个数字标签的按钮的窗口 + numbers = numbers[1:] + def iterate_numbers(): # 一个函数,用来遍历数字列表,依次创建窗口 + if numbers: # 如果数字列表不为空 + number = numbers.pop(0) # 从列表中弹出第一个数字 + window = create_window(number, count, list1, list2, list3, list4, list5, list6) + window.wait_window() # 等待窗口被关闭 + iterate_numbers() # 再次调用这个函数,创建下一个窗口 + + iterate_numbers() # 调用遍历数字的函数 +''' +【编程16.20】编制程序:输出函数。 +【目的及编程说明】读者通过编程16.20,可掌握图片分类过程。该函数的输入为1000幅图像的集合,输出为模型结构(模型的参数)。 +基本实践内容: +(1)定义输入数据格式,即图像数据的维度和格式,然后加载数据集对象,使用加载数据集对象的ProcFunc将图像数据加载到网络模型中。 +(2)使用SetParaFunc函数对每个节点进行参数赋值,通过AllModelConn表中的连接信息,使用训练好的神经网络进行预测。 +(3)计算预测误差:使用AllModelObj表中的ProcFunc函数对预测结果与真实标签进行比较,计算误差。 +(4)进行网络优化:使用AllModelObj表中的ProcFunc函数对误差进行反向传播,并调整神经网络中的参数和连接权重,以最小化误差。 +(5)使用AllModelObj表中的ProcFunc函数对1000幅图像数据进行分类,得到最终的分类结果。 +''' + +def count_model(layer): + # 如果layer是第一次出现,就把它加入字典,并设置计数器为1 + if layer not in Counts: + Counts[layer] = 1 + # 如果layer已经出现过,就把它的计数器加一 + else: + Counts[layer] += 1 + # 如果是卷积层 + if layer == 1: + if Counts[layer] == 1: + with open("list.pkl", "ab") as f: + pickle.dump(Conv1, f) + elif Counts[layer] == 2: + with open("list.pkl", "ab") as f: + pickle.dump(Conv2, f) + elif Counts[layer] == 3: + with open("list.pkl", "ab") as f: + pickle.dump(Conv3, f) + # 如果是池化层 + if layer == 2: + if Counts[layer] == 1: + with open("list.pkl", "ab") as f: + pickle.dump(Pool1, f) + elif Counts[layer] == 2: + with open("list.pkl", "ab") as f: + pickle.dump(Pool2, f) + elif Counts[layer] == 3: + with open("list.pkl", "ab") as f: + pickle.dump(Pool3, f) + # 如果是全连接层 + if layer == 3: + if Counts[layer] == 1: + with open("list.pkl", "ab") as f: + pickle.dump(Fullconn1, f) + elif Counts[layer] == 2: + with open("list.pkl", "ab") as f: + pickle.dump(Fullconn2, f) + elif Counts[layer] == 3: + with open("list.pkl", "ab") as f: + pickle.dump(Fullconn3, f) + # 如果是非线性处理层 + if layer == 4: + with open("list.pkl", "ab") as f: + pickle.dump(Listinstance[4], f) + # 如果是输出分类层 + if layer == 5: + with open("list.pkl", "ab") as f: + pickle.dump(Listinstance[5], f) + # 如果是计算误差层 + if layer == 6: + with open("list.pkl", "ab") as f: + pickle.dump(Listinstance[6], f) +# 保存网络模型 +def save_model(): + if len(Items3) == 0: + messagebox.showerror("错误", "请添加图元!") + return + file_path = 'list.pkl' + # 检查文件是否存在 + if os.path.exists(file_path): + # 删除文件 + os.remove(file_path) + # 生成试验数据集,用于保存模型 + Test_images = np.random.rand(100, 48, 48) * 0.01 + # 对试验数据集进行前向传播的计算 + print(forward_propagation(Test_images)) + # 打开一个本地文件,用w模式或者wb模式 + with open("model.pkl", "wb") as f: + pickle.dump(Items3, f)# 保存模型 + # 遍历网络结构 + for layer in Items3[1:]: + count_model(layer) + messagebox.showinfo("成功", "保存正确,恭喜!") + +def check_connection(): + connection = [x for x in Items3 if x < 6] + length = len(connection) + if length == 0: + messagebox.showerror("错误", "请添加图元!") + return + for i in range(length-1): + right_model_x = connection[i] + right_model_y = connection[i+1] + if RIGHT_MODEL[right_model_x][right_model_y] == 0: + messagebox.showerror("错误", "连接不正确,请检查!") + return + messagebox.showinfo("成功", "连接正确,恭喜!") + +def redirector(inputStr): + global Text + Text.configure(state="normal") # 设置文本框为可编辑状态 + Text.insert("end", inputStr) # 在文本框末尾插入内容 + Text.see("end") # 滚动到末尾 + Text.configure(state="disabled") # 设置文本框为只读状态 + +def close_program(): + sys.exit() + +def button_link(): + global button + # 替每个主界面的按钮绑定各自的函数 + button['button1'].config(command=train_setting) + button['button2'].config(command=train) + button['button3'].config(command=model_show) + button['button4'].config(command=load_model) + button['button5'].config(command=restart_new_model) + button['button6'].config(command=setpara_func) + button['button7'].config(command=save_model) + button['button8'].config(command=check_connection) + button['button9'].config(command=close_program) + +def main(): + # X1-X2编制赋值程序及输出界面 + # 创建一个主窗口 + global Root + global Listinstance + global List_image + global AllModelObj + global button + Root = tk.Tk() + # 设置窗口的大小为1200*750 + window_width = 1200 # 窗口的宽度 + window_height = 750 # 窗口的高度 + Root.title("神经网络可视化") + Root.geometry("1200x750") # 设置窗口的大小和位置 + picture_frame(window_width, window_height) + Listinstance = create_instance() + # 创建网络对象总表和网络连接对象总表 + AllModelObj = [Listinstance[0], Listinstance[1], Listinstance[2], Listinstance[3], Listinstance[4], Listinstance[5], + Listinstance[6], Listinstance[7], Listinstance[8], Listinstance[9]] + + img_path = ["img/data.png", "img/conv.png", "img/pool.png", "img/full_connect.png", "img/nonlinear.png", + "img/classifier.png", "img/error.png", "img/adjust.png", "img/arrow1.png", "img/arrow2.png"] + List_image = [] + for path in img_path: + List_image.append(element(path)) + button = push_button() + create_left_element(AllModelObj, List_image) + button_link() + sys.stdout.write = redirector + Root.mainloop() +if __name__ == '__main__': + main() diff --git a/data/emotion.csv b/data/emotion.csv new file mode 100644 index 0000000..1312ed8 --- /dev/null +++ b/data/emotion.csv @@ -0,0 +1,28709 @@ +0 +0 +2 +4 +6 +2 +4 +3 +3 +2 +0 +6 +6 +6 +3 +5 +3 +2 +6 +4 +4 +2 +0 +0 +3 +3 +5 +0 +3 +5 +3 +6 +3 +2 +3 +6 +6 +6 +0 +5 +0 +3 +4 +0 +6 +2 +3 +6 +2 +2 +2 +5 +5 +6 +4 +5 +0 +3 +4 +2 +6 +5 +3 +4 +3 +0 +4 +3 +0 +5 +4 +2 +4 +2 +0 +6 +0 +0 +5 +4 +3 +5 +3 +6 +2 +2 +4 +4 +5 +4 +0 +0 +6 +0 +6 +2 +2 +3 +4 +3 +3 +2 +6 +3 +4 +3 +2 +0 +2 +3 +2 +3 +6 +6 +3 +4 +4 +0 +3 +3 +0 +2 +0 +0 +3 +3 +0 +4 +5 +2 +4 +2 +5 +3 +0 +6 +6 +2 +2 +3 +2 +3 +3 +3 +3 +3 +4 +2 +2 +0 +0 +2 +6 +3 +4 +5 +3 +0 +2 +4 +5 +2 +3 +4 +6 +3 +4 +3 +6 +0 +4 +4 +4 +2 +6 +5 +5 +6 +5 +2 +3 +2 +3 +4 +0 +2 +0 +3 +0 +2 +2 +5 +3 +5 +5 +4 +3 +0 +6 +5 +2 +6 +0 +0 +4 +5 +6 +3 +5 +5 +3 +2 +2 +3 +3 +3 +3 +6 +3 +6 +3 +0 +6 +3 +2 +0 +6 +5 +6 +0 +5 +4 +3 +0 +3 +0 +4 +5 +4 +3 +3 +0 +0 +6 +2 +0 +6 +3 +0 +0 +6 +0 +5 +6 +3 +2 +5 +5 +2 +0 +2 +6 +6 +0 +2 +3 +4 +2 +6 +5 +2 +2 +6 +6 +6 +2 +5 +3 +0 +5 +0 +4 +3 +3 +3 +3 +6 +3 +2 +4 +6 +3 +2 +4 +0 +0 +3 +2 +0 +1 +2 +2 +5 +3 +5 +4 +4 +0 +2 +3 +4 +6 +4 +2 +2 +3 +5 +4 +4 +5 +6 +4 +5 +0 +3 +3 +3 +2 +5 +5 +5 +3 +5 +3 +3 +3 +5 +6 +0 +4 +2 +2 +0 +4 +5 +5 +6 +6 +3 +2 +4 +2 +4 +0 +5 +0 +3 +5 +2 +4 +0 +4 +5 +6 +3 +2 +3 +5 +0 +0 +3 +3 +2 +6 +0 +2 +6 +0 +3 +2 +3 +2 +6 +4 +3 +4 +4 +0 +1 +2 +4 +6 +5 +0 +4 +6 +6 +6 +2 +6 +4 +3 +2 +4 +0 +6 +3 +2 +3 +0 +6 +5 +0 +5 +2 +6 +1 +3 +2 +6 +2 +0 +4 +6 +4 +5 +4 +4 +2 +0 +4 +0 +2 +0 +0 +5 +3 +3 +5 +3 +3 +4 +6 +5 +3 +3 +3 +4 +4 +6 +3 +4 +2 +3 +2 +2 +3 +4 +3 +6 +2 +6 +4 +3 +0 +3 +4 +6 +6 +0 +0 +5 +3 +1 +2 +4 +2 +2 +3 +2 +5 +0 +6 +2 +4 +3 +2 +3 +5 +0 +6 +6 +5 +6 +5 +3 +0 +5 +6 +0 +2 +6 +6 +6 +2 +4 +6 +2 +6 +0 +5 +3 +3 +4 +4 +0 +0 +2 +5 +0 +6 +0 +6 +5 +4 +0 +0 +3 +5 +5 +4 +3 +3 +1 +4 +6 +6 +3 +2 +3 +3 +6 +6 +4 +6 +0 +2 +6 +5 +4 +2 +6 +6 +3 +5 +6 +4 +6 +0 +4 +2 +3 +3 +0 +0 +6 +2 +6 +3 +3 +6 +5 +3 +1 +3 +2 +2 +4 +2 +2 +4 +0 +3 +5 +6 +3 +3 +2 +3 +0 +4 +2 +6 +2 +3 +5 +6 +2 +4 +2 +2 +6 +6 +4 +6 +6 +3 +4 +0 +3 +4 +4 +0 +3 +4 +6 +4 +0 +4 +6 +3 +5 +2 +3 +0 +0 +3 +6 +3 +3 +6 +4 +5 +0 +2 +3 +0 +3 +5 +3 +4 +3 +4 +6 +6 +3 +4 +5 +3 +6 +4 +6 +5 +3 +0 +3 +2 +3 +3 +3 +5 +5 +6 +2 +3 +0 +3 +3 +3 +2 +5 +0 +6 +6 +3 +5 +0 +0 +3 +6 +4 +3 +3 +5 +3 +3 +5 +3 +4 +2 +3 +3 +5 +3 +6 +5 +4 +4 +5 +6 +0 +2 +2 +4 +0 +6 +3 +2 +5 +2 +2 +4 +2 +3 +0 +6 +0 +6 +2 +5 +3 +3 +3 +2 +3 +6 +5 +0 +3 +2 +4 +2 +6 +4 +3 +4 +3 +3 +3 +2 +0 +2 +5 +0 +2 +2 +2 +6 +2 +4 +5 +5 +4 +4 +4 +2 +0 +6 +1 +5 +3 +4 +6 +5 +0 +0 +6 +6 +2 +2 +4 +5 +6 +2 +3 +3 +4 +5 +0 +4 +3 +6 +4 +5 +5 +6 +3 +6 +5 +5 +0 +3 +3 +6 +2 +6 +5 +0 +4 +2 +4 +6 +3 +3 +2 +4 +2 +1 +4 +3 +3 +2 +4 +3 +5 +2 +0 +3 +4 +5 +3 +3 +4 +0 +0 +2 +1 +3 +4 +3 +3 +4 +6 +2 +0 +0 +2 +5 +6 +4 +3 +6 +0 +5 +4 +1 +2 +2 +5 +3 +0 +0 +6 +5 +0 +6 +3 +5 +6 +2 +0 +0 +2 +3 +1 +5 +4 +5 +5 +2 +3 +2 +2 +3 +6 +6 +0 +6 +4 +0 +3 +0 +4 +0 +6 +6 +2 +3 +5 +4 +2 +6 +3 +5 +5 +3 +2 +3 +3 +4 +0 +6 +4 +4 +2 +6 +3 +2 +0 +5 +4 +2 +6 +6 +2 +3 +6 +6 +4 +6 +2 +3 +4 +0 +2 +6 +3 +4 +0 +4 +6 +6 +0 +4 +4 +0 +6 +6 +0 +4 +2 +2 +3 +3 +4 +6 +0 +5 +3 +2 +0 +3 +6 +4 +2 +4 +6 +4 +6 +2 +5 +0 +0 +0 +5 +0 +0 +6 +3 +3 +6 +0 +5 +3 +0 +6 +4 +4 +2 +6 +0 +3 +2 +2 +3 +0 +4 +4 +4 +6 +4 +6 +6 +5 +2 +3 +6 +3 +0 +6 +6 +4 +6 +4 +3 +4 +3 +4 +2 +4 +4 +4 +3 +2 +3 +0 +0 +3 +0 +4 +3 +6 +4 +3 +0 +2 +4 +3 +5 +3 +4 +4 +3 +5 +2 +4 +2 +6 +3 +0 +5 +4 +5 +5 +3 +6 +3 +3 +3 +3 +5 +0 +3 +3 +6 +4 +3 +3 +3 +5 +6 +0 +6 +2 +2 +3 +0 +4 +6 +4 +5 +0 +3 +1 +3 +2 +3 +3 +4 +2 +6 +3 +3 +3 +5 +3 +2 +5 +3 +2 +0 +4 +2 +6 +6 +3 +1 +3 +0 +3 +2 +6 +0 +3 +2 +0 +0 +5 +0 +5 +6 +3 +4 +3 +6 +1 +2 +3 +5 +6 +5 +3 +0 +0 +0 +4 +6 +0 +2 +4 +3 +3 +5 +2 +4 +5 +6 +2 +4 +4 +3 +3 +6 +2 +4 +5 +3 +0 +4 +3 +0 +3 +3 +4 +2 +3 +4 +5 +0 +3 +0 +6 +5 +2 +3 +3 +0 +3 +0 +2 +0 +2 +5 +4 +3 +4 +5 +0 +0 +6 +3 +0 +3 +6 +4 +5 +3 +3 +4 +6 +3 +4 +0 +2 +0 +6 +3 +3 +4 +6 +0 +5 +3 +3 +0 +3 +6 +4 +4 +3 +0 +0 +3 +0 +5 +0 +0 +3 +6 +3 +6 +0 +6 +4 +5 +0 +0 +6 +2 +4 +6 +2 +5 +0 +4 +0 +6 +3 +2 +5 +2 +3 +0 +4 +2 +6 +3 +4 +6 +5 +0 +6 +0 +2 +3 +0 +6 +3 +3 +6 +3 +5 +3 +4 +4 +1 +3 +0 +0 +3 +1 +6 +3 +2 +2 +3 +4 +6 +5 +6 +6 +4 +3 +3 +6 +3 +6 +4 +3 +5 +6 +5 +6 +4 +4 +3 +6 +3 +4 +0 +6 +2 +2 +6 +6 +2 +6 +4 +0 +3 +1 +0 +4 +6 +4 +4 +3 +0 +5 +3 +5 +2 +2 +6 +6 +2 +3 +5 +6 +4 +3 +4 +2 +6 +3 +3 +6 +4 +0 +6 +0 +3 +2 +2 +6 +2 +2 +6 +4 +0 +0 +2 +6 +4 +3 +3 +4 +6 +0 +5 +3 +4 +4 +3 +4 +0 +2 +2 +3 +5 +0 +3 +0 +0 +0 +0 +5 +2 +3 +5 +3 +3 +4 +6 +0 +3 +0 +3 +3 +2 +2 +4 +0 +0 +3 +3 +0 +0 +2 +5 +5 +2 +5 +5 +3 +4 +3 +6 +4 +3 +2 +6 +0 +0 +6 +6 +6 +6 +3 +3 +4 +3 +0 +6 +6 +3 +3 +6 +3 +2 +5 +2 +3 +6 +6 +3 +2 +2 +0 +6 +3 +2 +3 +0 +0 +6 +4 +3 +0 +5 +0 +5 +4 +0 +3 +4 +2 +5 +2 +3 +0 +4 +0 +4 +5 +2 +2 +5 +0 +2 +6 +2 +6 +4 +2 +3 +3 +0 +3 +2 +2 +4 +4 +0 +3 +2 +4 +3 +3 +5 +0 +3 +2 +6 +4 +5 +2 +3 +2 +3 +6 +6 +3 +6 +3 +2 +2 +3 +0 +2 +4 +4 +3 +0 +5 +5 +3 +3 +5 +6 +0 +4 +0 +3 +3 +3 +4 +3 +5 +2 +2 +4 +4 +0 +2 +5 +4 +3 +3 +3 +3 +3 +1 +3 +2 +3 +6 +3 +3 +4 +3 +2 +5 +6 +2 +0 +0 +4 +0 +4 +4 +4 +4 +4 +0 +6 +4 +2 +3 +6 +3 +6 +6 +4 +5 +0 +2 +2 +6 +3 +4 +3 +0 +5 +0 +3 +0 +0 +0 +2 +6 +3 +4 +0 +2 +0 +6 +0 +4 +2 +3 +2 +4 +3 +4 +2 +2 +6 +2 +4 +0 +6 +4 +3 +2 +5 +3 +5 +6 +1 +4 +4 +3 +3 +2 +3 +4 +3 +3 +6 +3 +0 +2 +4 +2 +4 +6 +6 +6 +0 +3 +0 +3 +3 +3 +4 +4 +0 +4 +6 +5 +0 +6 +5 +2 +3 +6 +2 +6 +6 +2 +1 +3 +6 +3 +5 +5 +2 +0 +6 +3 +6 +0 +3 +0 +6 +3 +3 +4 +3 +3 +5 +3 +6 +3 +6 +4 +3 +6 +3 +3 +6 +6 +4 +0 +6 +3 +3 +3 +3 +6 +5 +6 +2 +3 +4 +4 +3 +3 +6 +5 +0 +4 +4 +6 +4 +6 +0 +4 +5 +2 +2 +2 +6 +4 +5 +0 +2 +2 +4 +2 +0 +3 +6 +0 +5 +0 +6 +6 +3 +3 +2 +4 +2 +6 +6 +3 +4 +5 +3 +5 +4 +2 +6 +6 +3 +2 +5 +4 +6 +3 +2 +3 +3 +5 +3 +0 +5 +3 +4 +3 +2 +4 +3 +6 +3 +0 +1 +4 +6 +2 +3 +3 +6 +6 +6 +3 +3 +4 +3 +0 +2 +5 +3 +0 +2 +2 +5 +2 +2 +5 +3 +0 +2 +3 +3 +0 +5 +3 +3 +0 +4 +4 +3 +2 +3 +3 +6 +3 +6 +2 +3 +5 +5 +5 +0 +3 +2 +3 +2 +6 +6 +3 +3 +4 +6 +5 +2 +2 +4 +6 +0 +3 +1 +4 +3 +4 +0 +3 +0 +3 +4 +4 +3 +4 +5 +0 +2 +6 +5 +3 +3 +6 +0 +5 +4 +3 +6 +2 +3 +3 +6 +5 +2 +6 +4 +2 +4 +5 +6 +0 +3 +5 +6 +2 +3 +3 +3 +3 +2 +6 +4 +6 +3 +5 +6 +4 +6 +3 +0 +3 +4 +5 +0 +5 +3 +4 +5 +0 +5 +0 +5 +6 +3 +5 +3 +6 +2 +2 +3 +3 +4 +3 +4 +0 +3 +4 +0 +3 +2 +2 +4 +3 +0 +3 +4 +3 +4 +3 +2 +0 +2 +3 +4 +0 +5 +4 +4 +6 +3 +6 +4 +5 +3 +3 +3 +5 +0 +6 +4 +5 +6 +5 +3 +6 +6 +0 +2 +3 +3 +3 +0 +6 +4 +3 +1 +6 +5 +3 +6 +3 +4 +3 +0 +4 +4 +2 +6 +6 +6 +2 +4 +5 +3 +0 +0 +2 +5 +0 +5 +6 +3 +2 +4 +2 +1 +0 +4 +4 +6 +6 +2 +3 +4 +6 +5 +3 +4 +5 +6 +0 +0 +3 +5 +0 +3 +4 +3 +4 +4 +3 +0 +5 +2 +5 +4 +3 +6 +0 +4 +3 +2 +2 +6 +6 +3 +4 +2 +4 +3 +0 +2 +6 +6 +0 +0 +0 +2 +3 +5 +5 +2 +6 +3 +3 +3 +0 +0 +6 +3 +0 +3 +5 +3 +2 +4 +3 +4 +6 +0 +4 +0 +2 +3 +4 +2 +6 +4 +3 +5 +5 +4 +6 +2 +6 +0 +3 +2 +2 +2 +0 +4 +6 +0 +6 +4 +4 +6 +0 +6 +3 +0 +2 +3 +5 +3 +3 +0 +2 +5 +3 +2 +3 +3 +4 +3 +0 +6 +0 +2 +5 +0 +2 +6 +2 +3 +3 +3 +4 +4 +5 +3 +0 +4 +0 +6 +5 +2 +0 +6 +0 +1 +3 +2 +2 +6 +6 +4 +6 +3 +0 +2 +2 +1 +5 +0 +4 +3 +5 +6 +3 +6 +6 +5 +4 +4 +4 +2 +2 +0 +2 +0 +3 +6 +3 +0 +3 +4 +5 +2 +3 +0 +3 +0 +0 +5 +2 +4 +6 +3 +5 +0 +3 +3 +3 +2 +3 +6 +4 +6 +3 +3 +6 +3 +6 +4 +6 +2 +3 +3 +0 +4 +3 +6 +3 +0 +2 +6 +5 +0 +4 +3 +2 +2 +5 +4 +6 +4 +4 +4 +3 +6 +0 +6 +2 +5 +0 +0 +4 +4 +2 +2 +2 +3 +6 +4 +4 +3 +6 +5 +0 +4 +4 +6 +0 +0 +5 +3 +0 +2 +2 +6 +3 +6 +6 +1 +6 +5 +4 +6 +2 +6 +3 +5 +3 +3 +3 +3 +0 +0 +0 +5 +2 +3 +6 +6 +3 +2 +2 +6 +2 +0 +0 +6 +6 +3 +3 +3 +3 +2 +3 +3 +4 +4 +0 +0 +3 +4 +6 +2 +2 +1 +6 +3 +3 +0 +3 +3 +3 +6 +2 +6 +2 +5 +6 +3 +5 +0 +3 +4 +0 +3 +4 +5 +5 +4 +3 +4 +6 +4 +3 +5 +5 +2 +0 +3 +2 +2 +5 +6 +2 +3 +0 +0 +5 +4 +6 +4 +6 +6 +6 +6 +4 +2 +3 +2 +6 +3 +2 +6 +6 +0 +4 +0 +6 +3 +0 +3 +2 +1 +2 +2 +5 +5 +0 +6 +0 +3 +0 +2 +0 +6 +2 +3 +3 +6 +6 +0 +2 +6 +0 +3 +4 +3 +2 +6 +2 +2 +4 +1 +5 +3 +3 +6 +3 +0 +2 +6 +4 +6 +0 +4 +3 +6 +5 +3 +3 +3 +2 +3 +6 +2 +3 +6 +3 +5 +6 +6 +5 +4 +3 +4 +6 +3 +6 +0 +3 +4 +6 +4 +4 +5 +4 +3 +3 +3 +5 +4 +3 +6 +4 +2 +3 +3 +3 +5 +4 +3 +4 +4 +5 +3 +5 +3 +0 +4 +0 +0 +6 +6 +3 +4 +3 +6 +3 +2 +4 +6 +0 +4 +2 +5 +4 +0 +6 +0 +3 +3 +4 +3 +6 +0 +0 +5 +4 +4 +2 +0 +3 +5 +6 +3 +3 +6 +6 +0 +4 +3 +3 +5 +4 +3 +6 +4 +3 +6 +3 +3 +4 +4 +6 +3 +1 +3 +4 +2 +4 +3 +5 +3 +2 +4 +4 +2 +3 +4 +3 +0 +0 +3 +2 +3 +6 +3 +6 +4 +5 +0 +4 +4 +2 +4 +2 +4 +4 +6 +4 +6 +6 +0 +6 +0 +4 +6 +6 +6 +4 +4 +6 +3 +4 +3 +2 +2 +0 +2 +5 +3 +4 +0 +6 +6 +6 +3 +3 +6 +3 +4 +6 +4 +3 +3 +3 +6 +2 +4 +5 +6 +4 +5 +3 +2 +5 +2 +2 +1 +6 +2 +4 +3 +0 +6 +6 +4 +5 +4 +3 +6 +2 +2 +3 +2 +3 +3 +2 +3 +0 +3 +4 +3 +3 +2 +3 +2 +0 +3 +0 +2 +4 +0 +6 +2 +2 +6 +6 +0 +3 +6 +0 +4 +3 +4 +0 +6 +3 +4 +4 +6 +3 +4 +3 +2 +4 +2 +0 +3 +6 +0 +4 +4 +4 +2 +3 +2 +4 +1 +0 +5 +4 +6 +6 +3 +3 +5 +2 +6 +3 +4 +0 +0 +6 +0 +0 +6 +4 +3 +5 +4 +2 +4 +2 +2 +5 +3 +2 +2 +2 +6 +4 +3 +3 +4 +1 +3 +6 +2 +5 +6 +3 +6 +6 +2 +1 +0 +5 +3 +1 +6 +4 +0 +6 +4 +6 +6 +3 +5 +3 +3 +5 +5 +2 +6 +0 +5 +0 +3 +3 +3 +3 +6 +0 +3 +2 +6 +3 +4 +4 +4 +0 +3 +4 +0 +2 +3 +3 +4 +5 +1 +4 +2 +3 +0 +6 +3 +3 +1 +3 +4 +6 +2 +4 +2 +4 +5 +5 +3 +3 +3 +6 +5 +3 +3 +4 +3 +0 +4 +3 +3 +0 +6 +3 +6 +6 +0 +3 +4 +0 +4 +4 +6 +0 +2 +5 +3 +2 +5 +0 +5 +4 +6 +4 +5 +2 +0 +1 +4 +5 +0 +6 +3 +4 +3 +3 +5 +3 +4 +6 +3 +2 +0 +2 +3 +3 +4 +3 +6 +3 +3 +4 +3 +6 +6 +3 +6 +4 +2 +6 +3 +5 +4 +3 +0 +6 +5 +0 +3 +5 +6 +6 +0 +0 +0 +4 +6 +3 +6 +4 +0 +3 +5 +3 +6 +4 +0 +3 +2 +2 +5 +5 +0 +3 +3 +4 +3 +6 +2 +4 +3 +3 +0 +3 +3 +3 +6 +3 +0 +6 +2 +2 +4 +3 +3 +6 +0 +4 +6 +5 +6 +3 +1 +2 +2 +4 +2 +4 +4 +5 +3 +3 +5 +4 +3 +4 +6 +3 +6 +5 +6 +3 +0 +3 +5 +6 +5 +4 +3 +4 +6 +5 +3 +5 +3 +3 +6 +6 +2 +0 +6 +6 +3 +4 +2 +0 +4 +6 +3 +6 +2 +2 +4 +3 +3 +4 +5 +4 +6 +4 +5 +6 +4 +2 +6 +5 +5 +2 +3 +6 +4 +5 +3 +3 +2 +4 +4 +6 +3 +3 +5 +6 +4 +5 +0 +3 +2 +3 +6 +2 +5 +4 +3 +2 +4 +0 +4 +0 +0 +2 +4 +3 +4 +5 +6 +3 +4 +3 +3 +3 +5 +5 +6 +6 +6 +4 +0 +5 +6 +4 +2 +6 +4 +5 +6 +4 +1 +6 +4 +6 +3 +0 +3 +3 +6 +6 +5 +4 +4 +6 +3 +4 +6 +0 +6 +4 +3 +5 +3 +3 +2 +4 +3 +3 +0 +3 +6 +4 +6 +0 +2 +6 +0 +0 +1 +0 +0 +3 +0 +3 +3 +5 +6 +3 +4 +2 +0 +6 +6 +3 +3 +4 +0 +3 +0 +3 +6 +2 +4 +4 +6 +6 +2 +2 +3 +3 +2 +3 +5 +3 +0 +3 +4 +6 +4 +0 +4 +3 +3 +3 +5 +6 +4 +5 +0 +5 +6 +4 +6 +6 +5 +3 +3 +4 +6 +3 +4 +3 +6 +6 +4 +4 +4 +2 +0 +6 +6 +6 +3 +0 +6 +3 +6 +2 +5 +3 +0 +2 +4 +0 +4 +0 +3 +6 +6 +5 +5 +3 +1 +4 +2 +6 +3 +3 +5 +3 +0 +6 +4 +4 +3 +0 +3 +3 +4 +3 +5 +2 +3 +3 +3 +3 +0 +2 +6 +4 +5 +5 +4 +0 +0 +6 +3 +5 +6 +5 +3 +3 +4 +6 +4 +2 +5 +4 +2 +2 +3 +6 +3 +3 +6 +0 +0 +3 +3 +0 +2 +2 +5 +4 +3 +6 +2 +3 +3 +5 +4 +4 +4 +6 +3 +6 +2 +5 +4 +6 +0 +0 +0 +6 +0 +3 +2 +6 +3 +4 +5 +5 +5 +1 +3 +6 +3 +6 +5 +1 +3 +0 +3 +2 +2 +3 +5 +3 +3 +4 +0 +4 +6 +4 +6 +4 +3 +3 +3 +6 +3 +2 +3 +4 +4 +3 +0 +0 +6 +2 +6 +3 +6 +4 +0 +4 +6 +0 +0 +2 +6 +0 +3 +6 +4 +3 +4 +6 +4 +4 +5 +4 +3 +6 +1 +3 +4 +0 +3 +4 +6 +5 +6 +2 +4 +3 +2 +4 +3 +6 +4 +3 +4 +3 +4 +0 +3 +0 +6 +2 +0 +5 +6 +2 +0 +4 +6 +6 +4 +4 +6 +6 +4 +0 +0 +4 +3 +4 +2 +5 +0 +4 +6 +6 +4 +4 +4 +2 +6 +2 +4 +6 +3 +6 +3 +3 +2 +3 +3 +0 +2 +3 +0 +3 +3 +4 +6 +4 +3 +3 +5 +6 +2 +3 +3 +2 +4 +2 +3 +2 +4 +2 +2 +2 +4 +2 +2 +3 +6 +0 +2 +6 +5 +2 +3 +0 +0 +4 +5 +3 +2 +3 +3 +2 +3 +2 +5 +3 +2 +3 +4 +5 +3 +5 +0 +3 +4 +5 +2 +2 +5 +3 +3 +6 +4 +3 +5 +4 +3 +0 +3 +3 +6 +2 +3 +3 +0 +3 +4 +4 +3 +6 +4 +3 +6 +6 +3 +6 +3 +6 +2 +3 +6 +4 +4 +4 +5 +6 +6 +5 +3 +3 +2 +1 +2 +4 +3 +0 +1 +0 +3 +3 +5 +3 +6 +3 +4 +3 +3 +3 +2 +4 +6 +5 +6 +3 +4 +0 +2 +2 +3 +4 +6 +4 +0 +4 +3 +5 +0 +3 +0 +0 +2 +5 +6 +0 +3 +6 +1 +3 +3 +0 +2 +6 +4 +6 +5 +3 +6 +4 +5 +3 +6 +3 +2 +3 +3 +0 +6 +0 +2 +2 +3 +0 +0 +6 +6 +3 +2 +6 +4 +0 +3 +3 +6 +3 +0 +6 +2 +0 +5 +3 +0 +0 +5 +3 +4 +6 +4 +3 +2 +6 +5 +0 +6 +4 +6 +3 +5 +2 +6 +4 +0 +1 +5 +3 +4 +4 +3 +0 +6 +4 +5 +3 +2 +3 +3 +2 +3 +3 +2 +0 +2 +0 +3 +2 +4 +0 +0 +3 +4 +3 +3 +6 +4 +4 +4 +4 +4 +3 +3 +3 +6 +2 +0 +0 +3 +3 +4 +6 +3 +6 +5 +6 +6 +3 +3 +3 +6 +2 +3 +3 +0 +3 +3 +6 +3 +1 +5 +4 +5 +2 +5 +6 +6 +3 +0 +6 +3 +0 +3 +3 +4 +6 +2 +0 +2 +3 +6 +3 +4 +2 +6 +0 +2 +6 +2 +3 +0 +2 +2 +4 +3 +6 +3 +3 +6 +4 +4 +6 +6 +4 +6 +2 +3 +3 +2 +4 +4 +2 +3 +3 +6 +2 +4 +2 +2 +2 +5 +4 +4 +3 +3 +5 +4 +1 +0 +3 +6 +4 +3 +4 +5 +3 +4 +4 +4 +4 +6 +3 +4 +6 +3 +4 +2 +1 +6 +5 +5 +2 +2 +3 +2 +3 +0 +3 +2 +6 +3 +6 +4 +0 +6 +0 +3 +6 +5 +3 +0 +0 +6 +4 +6 +6 +2 +0 +6 +0 +3 +2 +3 +0 +0 +6 +0 +3 +0 +0 +2 +0 +4 +2 +4 +3 +3 +2 +4 +6 +6 +6 +3 +4 +0 +2 +2 +0 +0 +4 +4 +3 +3 +6 +2 +4 +3 +2 +6 +0 +3 +3 +3 +4 +4 +6 +4 +5 +4 +3 +2 +0 +3 +4 +1 +4 +3 +3 +4 +0 +6 +4 +3 +5 +3 +5 +5 +5 +5 +4 +4 +4 +3 +4 +4 +6 +2 +5 +3 +6 +3 +3 +4 +3 +0 +0 +5 +6 +6 +2 +4 +3 +3 +5 +0 +3 +6 +3 +6 +4 +0 +6 +0 +2 +3 +0 +3 +3 +2 +4 +2 +4 +3 +6 +5 +3 +3 +5 +6 +3 +2 +6 +5 +6 +0 +3 +2 +6 +3 +3 +5 +3 +6 +6 +2 +6 +4 +6 +3 +2 +4 +3 +6 +6 +6 +0 +3 +3 +3 +0 +5 +3 +3 +5 +4 +2 +3 +4 +3 +0 +5 +4 +0 +4 +3 +0 +3 +3 +0 +6 +0 +3 +2 +2 +2 +6 +3 +4 +3 +0 +3 +3 +2 +2 +0 +6 +6 +3 +5 +4 +2 +1 +6 +1 +4 +3 +6 +0 +0 +3 +0 +5 +2 +3 +0 +3 +4 +0 +5 +3 +0 +2 +4 +2 +3 +6 +3 +4 +3 +2 +2 +4 +2 +2 +2 +5 +3 +0 +0 +2 +3 +3 +4 +5 +4 +4 +3 +4 +5 +3 +0 +3 +3 +0 +3 +2 +6 +4 +3 +0 +6 +6 +0 +2 +0 +5 +3 +2 +6 +2 +2 +5 +0 +4 +3 +5 +0 +1 +2 +5 +6 +0 +6 +3 +0 +5 +6 +1 +2 +3 +3 +6 +2 +3 +2 +2 +5 +2 +5 +0 +4 +0 +2 +3 +6 +3 +3 +3 +3 +3 +3 +4 +0 +3 +3 +5 +3 +0 +5 +3 +3 +6 +0 +6 +3 +3 +6 +3 +4 +4 +2 +6 +3 +3 +2 +2 +6 +6 +2 +2 +4 +0 +4 +6 +6 +2 +5 +3 +2 +5 +6 +3 +4 +0 +3 +3 +2 +5 +3 +6 +6 +6 +3 +4 +3 +6 +4 +2 +3 +2 +3 +3 +4 +3 +3 +3 +4 +6 +3 +0 +3 +3 +0 +6 +3 +3 +6 +2 +2 +6 +3 +4 +0 +6 +6 +0 +4 +5 +5 +2 +0 +6 +5 +3 +0 +4 +4 +0 +3 +4 +6 +0 +6 +6 +3 +4 +2 +6 +6 +0 +5 +5 +6 +3 +2 +3 +4 +6 +0 +4 +6 +0 +4 +2 +2 +4 +4 +4 +0 +5 +6 +6 +5 +4 +2 +3 +6 +3 +0 +4 +5 +5 +6 +4 +3 +4 +4 +6 +3 +3 +4 +3 +6 +3 +1 +6 +4 +6 +3 +6 +0 +2 +4 +4 +3 +3 +5 +2 +6 +5 +4 +6 +5 +3 +4 +6 +0 +3 +5 +4 +5 +4 +2 +4 +3 +2 +2 +4 +3 +3 +2 +6 +3 +4 +0 +0 +6 +2 +6 +3 +4 +1 +5 +6 +4 +2 +0 +0 +2 +6 +2 +0 +3 +0 +6 +4 +3 +6 +2 +5 +3 +5 +3 +5 +2 +0 +2 +3 +6 +2 +0 +3 +3 +5 +3 +6 +5 +6 +0 +6 +2 +5 +5 +6 +2 +3 +4 +3 +4 +3 +6 +3 +3 +0 +3 +3 +2 +0 +2 +3 +3 +6 +4 +2 +5 +4 +3 +2 +4 +6 +4 +2 +6 +0 +5 +6 +6 +6 +4 +5 +3 +2 +2 +6 +4 +0 +0 +5 +3 +4 +2 +3 +2 +2 +0 +4 +5 +2 +6 +3 +2 +4 +6 +3 +4 +5 +0 +4 +4 +4 +4 +0 +2 +3 +4 +5 +2 +6 +0 +5 +5 +3 +3 +0 +0 +5 +6 +0 +4 +2 +4 +3 +6 +2 +3 +2 +4 +1 +6 +4 +3 +0 +2 +3 +3 +0 +3 +3 +0 +3 +5 +5 +6 +4 +6 +3 +3 +0 +2 +3 +2 +3 +2 +0 +0 +4 +2 +3 +3 +3 +1 +4 +3 +4 +3 +5 +3 +0 +3 +2 +0 +3 +0 +3 +5 +0 +2 +6 +6 +4 +0 +0 +0 +2 +4 +3 +2 +2 +5 +4 +5 +3 +5 +0 +4 +2 +3 +4 +6 +0 +6 +2 +2 +6 +3 +3 +2 +4 +5 +0 +2 +3 +6 +4 +6 +5 +1 +3 +2 +2 +0 +0 +0 +4 +3 +3 +2 +4 +3 +6 +6 +6 +6 +0 +4 +3 +3 +3 +3 +5 +6 +3 +6 +3 +5 +3 +3 +5 +3 +5 +5 +4 +6 +6 +4 +3 +5 +2 +0 +3 +5 +4 +5 +6 +0 +5 +1 +2 +3 +4 +6 +4 +2 +4 +5 +4 +0 +2 +6 +3 +2 +2 +4 +3 +3 +3 +3 +0 +4 +3 +4 +2 +5 +4 +4 +0 +3 +3 +2 +3 +5 +4 +3 +4 +6 +3 +2 +5 +3 +5 +0 +3 +3 +3 +3 +5 +0 +0 +3 +3 +2 +3 +3 +0 +0 +2 +4 +5 +3 +2 +0 +5 +3 +0 +2 +0 +5 +2 +4 +0 +0 +4 +3 +3 +0 +3 +4 +5 +3 +0 +6 +6 +0 +2 +2 +3 +4 +0 +5 +0 +2 +3 +0 +4 +5 +4 +5 +2 +3 +2 +6 +5 +0 +3 +2 +2 +4 +5 +6 +0 +0 +6 +4 +6 +4 +1 +0 +0 +6 +3 +6 +3 +3 +4 +3 +2 +0 +6 +3 +4 +5 +6 +2 +3 +3 +3 +0 +5 +4 +6 +0 +5 +2 +4 +6 +4 +1 +4 +5 +3 +3 +0 +3 +6 +6 +2 +5 +6 +3 +0 +0 +6 +3 +3 +2 +0 +2 +2 +5 +6 +4 +0 +2 +4 +3 +4 +0 +6 +6 +6 +4 +2 +4 +4 +3 +5 +6 +5 +3 +3 +6 +0 +2 +2 +2 +3 +6 +3 +6 +6 +3 +3 +5 +2 +4 +2 +3 +6 +6 +3 +0 +6 +3 +4 +1 +0 +0 +0 +5 +3 +4 +5 +4 +3 +5 +3 +0 +0 +2 +6 +2 +6 +0 +2 +6 +3 +3 +5 +6 +4 +3 +3 +0 +3 +0 +6 +3 +3 +3 +5 +2 +0 +5 +0 +6 +3 +0 +0 +3 +5 +4 +0 +0 +5 +4 +6 +4 +2 +3 +4 +3 +3 +0 +4 +0 +2 +6 +6 +2 +6 +2 +4 +6 +4 +3 +6 +0 +0 +3 +0 +3 +1 +6 +6 +3 +3 +3 +6 +1 +6 +2 +5 +3 +6 +5 +6 +1 +6 +5 +3 +2 +4 +6 +4 +0 +6 +0 +1 +4 +3 +2 +5 +3 +4 +5 +3 +2 +2 +6 +3 +0 +6 +6 +6 +3 +5 +3 +3 +3 +0 +3 +5 +6 +0 +6 +4 +0 +2 +0 +4 +4 +3 +2 +4 +2 +5 +5 +3 +4 +3 +4 +3 +6 +3 +0 +3 +3 +4 +3 +6 +2 +3 +0 +3 +3 +2 +3 +6 +1 +0 +2 +3 +5 +6 +2 +2 +2 +2 +2 +3 +2 +6 +3 +3 +5 +2 +4 +3 +6 +2 +5 +0 +3 +2 +3 +3 +6 +6 +3 +3 +6 +6 +5 +4 +0 +3 +3 +3 +0 +0 +3 +0 +6 +0 +6 +4 +6 +6 +5 +5 +6 +4 +2 +0 +5 +5 +4 +4 +4 +3 +3 +2 +4 +6 +5 +4 +5 +5 +0 +5 +0 +3 +3 +6 +0 +6 +3 +3 +6 +3 +6 +4 +6 +3 +4 +4 +4 +4 +0 +0 +4 +3 +3 +0 +2 +2 +0 +2 +3 +4 +4 +5 +6 +2 +6 +0 +5 +3 +4 +2 +3 +3 +4 +3 +1 +3 +6 +4 +3 +3 +5 +0 +3 +0 +3 +0 +2 +3 +6 +4 +4 +3 +3 +0 +6 +4 +4 +4 +3 +6 +4 +4 +5 +3 +4 +6 +2 +0 +6 +4 +3 +2 +4 +3 +4 +2 +3 +4 +0 +0 +2 +0 +4 +0 +3 +6 +4 +5 +6 +0 +3 +2 +6 +2 +2 +3 +4 +2 +2 +4 +2 +3 +3 +3 +3 +2 +6 +2 +2 +3 +6 +0 +3 +3 +3 +4 +3 +1 +5 +6 +3 +3 +2 +6 +2 +3 +4 +5 +3 +2 +2 +3 +4 +2 +4 +6 +0 +4 +3 +5 +0 +4 +6 +6 +2 +2 +1 +3 +2 +3 +0 +3 +1 +0 +4 +3 +6 +5 +3 +2 +5 +2 +2 +5 +3 +4 +4 +5 +6 +0 +0 +2 +2 +4 +6 +6 +6 +4 +4 +6 +6 +3 +0 +2 +2 +3 +3 +3 +3 +2 +2 +0 +5 +0 +0 +0 +5 +6 +3 +0 +5 +3 +2 +2 +6 +2 +4 +6 +0 +6 +4 +4 +2 +3 +3 +0 +6 +0 +3 +3 +3 +6 +3 +2 +6 +3 +4 +3 +3 +2 +5 +4 +2 +2 +2 +0 +0 +3 +3 +3 +4 +6 +3 +5 +0 +0 +6 +3 +4 +3 +2 +3 +3 +0 +3 +3 +0 +4 +3 +5 +2 +0 +3 +0 +2 +4 +0 +3 +2 +6 +6 +3 +6 +0 +3 +6 +2 +1 +6 +6 +6 +0 +0 +4 +1 +4 +5 +4 +3 +3 +5 +3 +5 +6 +6 +3 +3 +4 +2 +3 +3 +3 +6 +2 +4 +3 +5 +6 +2 +2 +6 +3 +0 +0 +5 +0 +6 +0 +0 +4 +3 +2 +3 +4 +5 +6 +1 +2 +3 +4 +6 +6 +4 +3 +6 +3 +0 +3 +2 +3 +4 +0 +5 +4 +6 +3 +6 +4 +0 +0 +6 +0 +0 +6 +6 +2 +6 +0 +4 +3 +6 +0 +2 +0 +2 +3 +3 +3 +5 +3 +2 +0 +3 +4 +0 +0 +4 +0 +3 +3 +4 +0 +3 +0 +4 +5 +6 +3 +0 +3 +2 +5 +2 +6 +3 +6 +6 +5 +6 +5 +3 +3 +3 +6 +3 +5 +6 +3 +0 +0 +5 +3 +5 +3 +6 +4 +3 +3 +3 +6 +6 +2 +2 +6 +4 +2 +3 +6 +6 +4 +5 +6 +2 +3 +6 +0 +5 +3 +5 +3 +3 +5 +3 +4 +0 +0 +2 +3 +6 +4 +6 +6 +4 +4 +0 +5 +3 +4 +3 +6 +3 +0 +5 +2 +4 +4 +0 +2 +0 +4 +2 +3 +3 +4 +0 +6 +6 +0 +4 +5 +0 +2 +2 +4 +0 +6 +4 +2 +2 +6 +4 +0 +3 +0 +0 +0 +3 +3 +6 +5 +2 +6 +2 +3 +3 +6 +2 +3 +0 +4 +6 +2 +5 +0 +3 +0 +2 +5 +4 +0 +3 +6 +3 +3 +2 +3 +5 +2 +6 +3 +4 +0 +0 +6 +2 +0 +0 +4 +6 +2 +6 +5 +0 +3 +5 +6 +5 +0 +6 +4 +5 +6 +0 +3 +3 +4 +0 +6 +5 +0 +6 +2 +4 +3 +0 +5 +0 +3 +2 +5 +6 +2 +5 +6 +6 +2 +2 +2 +4 +6 +0 +3 +0 +2 +2 +5 +0 +2 +2 +4 +4 +4 +6 +3 +0 +4 +3 +6 +3 +4 +6 +6 +4 +2 +0 +3 +5 +5 +0 +6 +0 +3 +4 +5 +3 +4 +1 +3 +6 +2 +3 +3 +3 +3 +6 +4 +4 +2 +0 +5 +3 +0 +2 +6 +3 +2 +6 +3 +4 +6 +3 +1 +6 +3 +6 +5 +4 +4 +6 +3 +2 +0 +5 +4 +3 +5 +3 +6 +4 +4 +0 +5 +6 +3 +6 +6 +2 +3 +3 +0 +5 +5 +5 +6 +4 +4 +2 +5 +3 +3 +2 +0 +4 +6 +3 +2 +0 +3 +0 +0 +4 +2 +3 +4 +6 +5 +0 +6 +6 +0 +5 +2 +3 +6 +4 +3 +2 +3 +2 +5 +0 +4 +0 +3 +4 +3 +4 +4 +3 +3 +5 +4 +3 +3 +6 +4 +3 +5 +3 +0 +3 +2 +3 +6 +1 +3 +4 +3 +4 +2 +0 +6 +4 +4 +5 +3 +3 +4 +4 +3 +2 +2 +2 +3 +4 +3 +3 +3 +2 +0 +6 +3 +6 +4 +2 +3 +6 +6 +3 +3 +3 +0 +3 +3 +4 +2 +2 +2 +0 +1 +6 +0 +3 +4 +3 +4 +4 +5 +4 +3 +4 +5 +2 +6 +3 +3 +4 +0 +6 +0 +6 +3 +6 +6 +5 +2 +3 +2 +0 +4 +2 +4 +0 +6 +6 +5 +2 +3 +6 +5 +2 +2 +6 +3 +3 +4 +6 +3 +6 +5 +5 +4 +0 +6 +6 +6 +6 +0 +4 +6 +3 +4 +5 +4 +6 +0 +6 +3 +4 +4 +0 +0 +4 +3 +5 +6 +0 +4 +3 +4 +2 +6 +3 +5 +2 +6 +3 +4 +3 +6 +3 +4 +3 +3 +0 +3 +6 +2 +2 +4 +6 +5 +0 +0 +4 +4 +0 +5 +0 +3 +5 +3 +5 +2 +6 +3 +0 +5 +5 +3 +5 +0 +6 +3 +4 +0 +2 +1 +2 +3 +2 +0 +3 +1 +6 +4 +0 +3 +3 +4 +6 +3 +6 +2 +4 +6 +3 +4 +4 +6 +5 +3 +6 +6 +4 +6 +2 +3 +2 +4 +3 +2 +6 +4 +4 +4 +5 +6 +2 +4 +3 +0 +2 +3 +2 +4 +4 +3 +0 +3 +4 +3 +5 +5 +3 +6 +0 +6 +5 +5 +0 +4 +0 +0 +4 +2 +6 +4 +3 +2 +2 +5 +4 +6 +2 +4 +2 +6 +4 +6 +5 +3 +3 +3 +3 +5 +4 +3 +4 +5 +3 +3 +2 +2 +0 +6 +5 +5 +2 +2 +4 +2 +4 +2 +6 +2 +4 +4 +6 +4 +2 +2 +4 +4 +0 +3 +3 +6 +2 +3 +3 +0 +4 +4 +4 +5 +4 +0 +3 +0 +2 +0 +6 +4 +3 +5 +2 +3 +3 +5 +0 +6 +6 +2 +0 +2 +0 +3 +4 +3 +2 +3 +2 +2 +0 +4 +3 +5 +0 +2 +0 +0 +3 +3 +3 +3 +3 +4 +0 +0 +0 +3 +5 +0 +3 +3 +4 +3 +5 +2 +3 +4 +6 +2 +1 +2 +4 +6 +4 +3 +4 +2 +2 +5 +0 +6 +3 +6 +4 +5 +2 +4 +2 +5 +4 +6 +5 +0 +3 +4 +0 +4 +4 +6 +3 +2 +1 +6 +2 +6 +3 +5 +3 +5 +4 +3 +4 +4 +3 +2 +3 +6 +6 +2 +6 +6 +3 +3 +5 +3 +0 +4 +6 +3 +6 +3 +4 +0 +3 +4 +3 +4 +6 +2 +4 +5 +3 +3 +5 +3 +6 +4 +0 +5 +0 +2 +2 +0 +1 +3 +1 +0 +5 +6 +0 +6 +3 +6 +5 +5 +4 +3 +6 +0 +4 +3 +5 +2 +4 +5 +3 +4 +3 +2 +6 +3 +5 +5 +0 +3 +3 +3 +2 +4 +4 +6 +5 +3 +5 +0 +3 +3 +5 +0 +5 +5 +6 +0 +3 +3 +3 +0 +0 +3 +3 +0 +3 +5 +6 +3 +2 +3 +0 +0 +3 +6 +6 +2 +0 +3 +2 +3 +3 +4 +3 +5 +4 +3 +5 +3 +2 +4 +3 +0 +6 +0 +0 +5 +0 +3 +0 +5 +2 +4 +6 +6 +3 +5 +3 +4 +1 +4 +3 +3 +6 +3 +3 +3 +0 +6 +2 +1 +6 +3 +2 +2 +0 +6 +3 +3 +6 +3 +4 +4 +0 +2 +5 +3 +5 +5 +2 +3 +3 +0 +0 +2 +3 +3 +4 +3 +0 +3 +2 +4 +0 +4 +3 +3 +3 +3 +6 +3 +2 +5 +6 +3 +5 +6 +2 +0 +4 +3 +2 +3 +6 +2 +6 +6 +2 +4 +3 +6 +3 +0 +6 +3 +3 +2 +0 +5 +5 +6 +0 +3 +5 +3 +5 +3 +5 +0 +2 +1 +6 +0 +5 +0 +5 +0 +2 +3 +2 +3 +2 +4 +2 +3 +3 +2 +5 +4 +5 +0 +6 +3 +4 +6 +5 +4 +4 +3 +5 +2 +6 +1 +3 +6 +3 +0 +4 +4 +2 +2 +6 +4 +2 +3 +4 +3 +2 +2 +0 +3 +3 +4 +3 +6 +3 +4 +0 +6 +4 +2 +5 +0 +4 +5 +3 +1 +3 +0 +0 +4 +0 +4 +2 +2 +5 +0 +6 +3 +0 +6 +6 +4 +3 +2 +3 +5 +2 +2 +2 +0 +5 +4 +2 +0 +2 +5 +0 +0 +4 +3 +6 +2 +3 +3 +6 +6 +4 +0 +0 +3 +5 +3 +3 +2 +5 +5 +4 +6 +4 +4 +2 +4 +6 +3 +0 +1 +4 +4 +4 +6 +3 +6 +0 +0 +4 +2 +5 +3 +0 +1 +4 +5 +5 +0 +5 +2 +2 +2 +4 +5 +0 +4 +0 +0 +3 +3 +3 +0 +0 +6 +2 +0 +6 +3 +6 +5 +0 +6 +2 +3 +6 +5 +5 +6 +3 +5 +6 +3 +5 +6 +3 +3 +3 +5 +3 +2 +3 +3 +3 +5 +6 +3 +4 +3 +3 +0 +3 +0 +0 +2 +2 +4 +3 +4 +2 +4 +0 +6 +2 +0 +2 +3 +6 +6 +4 +1 +2 +4 +6 +0 +3 +4 +4 +4 +5 +6 +2 +2 +4 +0 +5 +5 +5 +4 +4 +2 +4 +4 +6 +4 +3 +6 +2 +3 +2 +2 +2 +5 +4 +0 +4 +0 +4 +5 +3 +2 +6 +2 +2 +6 +6 +6 +5 +3 +0 +6 +3 +3 +3 +6 +2 +0 +3 +4 +0 +5 +4 +3 +0 +0 +3 +4 +6 +4 +5 +3 +6 +6 +5 +5 +3 +5 +3 +5 +3 +6 +4 +4 +4 +3 +4 +5 +3 +0 +6 +2 +2 +2 +0 +2 +4 +4 +4 +4 +4 +0 +0 +3 +6 +5 +6 +3 +0 +5 +2 +4 +2 +4 +5 +0 +2 +5 +4 +3 +6 +5 +3 +4 +4 +4 +3 +3 +0 +0 +5 +2 +6 +4 +4 +6 +5 +2 +4 +3 +2 +4 +3 +1 +3 +4 +3 +3 +6 +4 +3 +4 +0 +6 +5 +3 +3 +4 +3 +5 +5 +4 +5 +6 +2 +2 +2 +3 +6 +6 +4 +2 +0 +6 +3 +0 +6 +2 +3 +4 +4 +3 +2 +2 +2 +2 +3 +4 +6 +6 +4 +2 +3 +2 +3 +4 +4 +5 +3 +6 +5 +6 +3 +2 +3 +6 +3 +3 +2 +2 +5 +2 +3 +2 +4 +2 +0 +2 +3 +4 +6 +4 +6 +4 +4 +6 +2 +3 +3 +4 +1 +4 +6 +2 +4 +3 +6 +2 +3 +2 +5 +1 +3 +3 +2 +3 +2 +4 +3 +4 +5 +6 +0 +0 +6 +6 +2 +3 +3 +4 +4 +0 +3 +2 +4 +2 +6 +4 +3 +3 +0 +3 +2 +2 +6 +0 +4 +3 +4 +3 +3 +0 +0 +6 +4 +4 +0 +6 +6 +1 +0 +3 +0 +4 +4 +6 +3 +6 +3 +5 +4 +2 +4 +0 +3 +5 +2 +0 +5 +2 +3 +0 +6 +6 +3 +0 +6 +4 +0 +6 +4 +4 +0 +4 +3 +2 +5 +4 +0 +5 +6 +4 +6 +4 +6 +6 +2 +6 +3 +3 +3 +4 +3 +2 +6 +3 +6 +4 +3 +3 +2 +2 +3 +3 +2 +4 +3 +4 +5 +5 +3 +6 +3 +4 +4 +5 +4 +0 +4 +3 +0 +6 +6 +4 +0 +3 +3 +3 +0 +3 +3 +4 +0 +3 +4 +3 +5 +5 +5 +3 +2 +3 +3 +4 +2 +5 +2 +5 +3 +3 +4 +2 +4 +5 +6 +5 +6 +4 +3 +0 +6 +2 +1 +3 +2 +3 +4 +6 +6 +0 +0 +4 +3 +5 +2 +3 +2 +6 +3 +0 +2 +1 +5 +6 +4 +6 +5 +2 +5 +5 +6 +3 +2 +3 +4 +0 +0 +4 +4 +0 +2 +0 +5 +0 +4 +6 +0 +6 +4 +0 +5 +0 +6 +3 +5 +2 +0 +0 +4 +6 +6 +1 +4 +6 +2 +3 +2 +3 +4 +3 +2 +6 +4 +3 +4 +4 +3 +5 +2 +4 +6 +6 +2 +3 +6 +6 +5 +0 +3 +0 +6 +3 +5 +2 +3 +0 +1 +2 +6 +2 +3 +3 +6 +2 +4 +3 +5 +3 +6 +6 +4 +2 +3 +2 +3 +3 +4 +5 +4 +3 +0 +4 +6 +3 +3 +3 +4 +0 +3 +2 +0 +3 +4 +0 +3 +2 +3 +0 +3 +3 +0 +3 +2 +3 +3 +1 +5 +2 +4 +3 +0 +6 +0 +3 +3 +0 +5 +5 +6 +3 +4 +4 +3 +3 +5 +4 +2 +6 +3 +0 +3 +3 +0 +6 +5 +0 +3 +2 +4 +3 +6 +4 +6 +2 +3 +4 +4 +3 +2 +2 +4 +0 +6 +4 +0 +3 +2 +3 +3 +6 +0 +0 +4 +5 +3 +4 +4 +6 +2 +5 +0 +6 +0 +3 +0 +0 +3 +4 +3 +3 +0 +4 +4 +2 +2 +3 +6 +6 +4 +6 +3 +6 +3 +3 +0 +4 +3 +0 +2 +5 +4 +4 +2 +3 +0 +3 +5 +6 +3 +0 +6 +3 +3 +0 +4 +2 +0 +6 +2 +4 +3 +2 +5 +4 +3 +6 +1 +4 +5 +6 +4 +5 +6 +3 +4 +0 +0 +6 +0 +6 +2 +0 +3 +3 +4 +3 +3 +3 +3 +2 +4 +2 +4 +2 +0 +2 +3 +6 +3 +0 +5 +6 +2 +2 +0 +5 +2 +2 +4 +3 +3 +0 +4 +0 +6 +0 +0 +5 +2 +3 +2 +6 +3 +0 +4 +5 +4 +0 +4 +6 +0 +4 +3 +3 +5 +5 +3 +2 +4 +1 +3 +5 +0 +0 +6 +3 +2 +2 +6 +4 +6 +6 +6 +4 +6 +6 +6 +6 +1 +4 +4 +6 +0 +3 +3 +4 +3 +6 +0 +3 +0 +0 +5 +2 +3 +6 +6 +5 +3 +2 +3 +4 +2 +4 +5 +2 +6 +5 +6 +4 +3 +5 +4 +4 +3 +3 +6 +3 +3 +3 +6 +6 +2 +5 +2 +3 +4 +5 +1 +6 +0 +3 +5 +4 +5 +6 +3 +2 +0 +6 +3 +1 +3 +6 +0 +4 +4 +6 +4 +5 +4 +2 +4 +5 +3 +0 +5 +0 +5 +6 +0 +3 +0 +6 +0 +0 +2 +6 +6 +0 +5 +6 +3 +4 +3 +4 +1 +0 +4 +3 +6 +0 +0 +2 +3 +5 +2 +0 +6 +6 +2 +3 +6 +2 +2 +3 +3 +0 +6 +3 +2 +6 +0 +6 +3 +3 +0 +4 +4 +4 +3 +6 +0 +3 +2 +2 +5 +4 +0 +4 +3 +3 +2 +0 +6 +0 +3 +4 +3 +4 +2 +2 +0 +3 +3 +5 +4 +4 +4 +4 +4 +3 +4 +5 +6 +0 +3 +2 +6 +4 +3 +0 +4 +2 +0 +5 +3 +0 +3 +4 +0 +6 +0 +3 +2 +1 +2 +4 +5 +3 +1 +3 +6 +5 +2 +4 +3 +3 +2 +6 +6 +6 +3 +5 +6 +4 +3 +2 +3 +3 +2 +4 +4 +0 +3 +3 +4 +6 +5 +5 +3 +6 +3 +6 +6 +2 +3 +3 +2 +0 +0 +2 +4 +5 +2 +4 +6 +6 +4 +2 +4 +4 +3 +6 +0 +5 +4 +2 +0 +0 +3 +2 +3 +6 +3 +4 +6 +3 +4 +3 +6 +0 +0 +3 +4 +3 +0 +3 +4 +3 +2 +2 +4 +3 +2 +3 +5 +2 +3 +6 +4 +0 +5 +4 +2 +3 +0 +6 +6 +6 +4 +5 +5 +3 +6 +3 +3 +1 +4 +3 +3 +5 +6 +4 +0 +3 +3 +4 +3 +5 +6 +2 +2 +2 +2 +4 +3 +4 +6 +5 +6 +6 +0 +4 +3 +0 +1 +2 +5 +5 +3 +6 +3 +3 +4 +4 +3 +2 +6 +2 +4 +2 +2 +3 +4 +0 +3 +6 +6 +2 +3 +6 +5 +4 +5 +3 +3 +2 +6 +2 +2 +3 +6 +4 +3 +6 +6 +5 +6 +4 +0 +0 +0 +5 +4 +4 +3 +2 +3 +2 +2 +6 +6 +0 +4 +4 +0 +4 +4 +0 +0 +0 +3 +3 +3 +4 +6 +3 +2 +4 +0 +3 +5 +5 +0 +6 +3 +6 +3 +2 +3 +0 +2 +2 +3 +4 +6 +2 +4 +0 +3 +2 +3 +5 +6 +4 +0 +6 +1 +5 +1 +0 +4 +2 +5 +6 +2 +5 +3 +2 +4 +4 +3 +3 +5 +3 +5 +0 +3 +4 +3 +4 +2 +5 +5 +0 +2 +4 +5 +4 +6 +2 +3 +4 +6 +5 +2 +5 +2 +2 +4 +4 +2 +3 +3 +6 +4 +6 +4 +0 +2 +5 +4 +6 +4 +3 +2 +2 +3 +3 +3 +0 +0 +5 +3 +3 +6 +2 +3 +4 +3 +4 +6 +4 +0 +3 +5 +0 +4 +3 +4 +0 +0 +4 +0 +6 +3 +0 +0 +5 +6 +3 +4 +3 +2 +6 +2 +6 +6 +2 +0 +2 +6 +3 +3 +3 +4 +3 +3 +6 +6 +3 +5 +5 +2 +4 +6 +6 +2 +0 +5 +6 +3 +2 +3 +4 +4 +3 +0 +2 +3 +6 +3 +3 +3 +5 +4 +3 +3 +4 +5 +3 +0 +2 +3 +3 +0 +3 +3 +3 +3 +4 +3 +2 +2 +3 +3 +4 +2 +3 +3 +0 +0 +0 +0 +4 +6 +6 +5 +2 +6 +5 +2 +0 +6 +3 +2 +0 +2 +5 +0 +3 +6 +3 +5 +3 +6 +0 +2 +4 +3 +4 +3 +3 +4 +3 +3 +3 +2 +3 +2 +2 +4 +2 +3 +5 +2 +4 +2 +4 +0 +6 +3 +3 +0 +0 +2 +6 +5 +4 +3 +6 +3 +5 +4 +4 +5 +6 +3 +6 +2 +6 +0 +3 +6 +5 +6 +3 +6 +6 +0 +5 +5 +5 +3 +3 +6 +5 +5 +3 +3 +5 +3 +6 +3 +0 +4 +5 +3 +0 +3 +4 +4 +6 +3 +4 +0 +5 +6 +3 +6 +2 +4 +3 +3 +2 +0 +5 +5 +4 +3 +3 +2 +0 +3 +3 +4 +0 +6 +6 +6 +4 +3 +0 +6 +5 +5 +0 +5 +3 +5 +3 +3 +5 +6 +6 +5 +4 +6 +4 +2 +3 +0 +0 +0 +5 +4 +6 +1 +3 +4 +5 +5 +0 +2 +0 +2 +4 +2 +0 +5 +0 +0 +2 +3 +3 +5 +3 +5 +3 +2 +2 +6 +3 +6 +0 +0 +4 +4 +6 +2 +3 +5 +3 +3 +3 +6 +0 +6 +2 +4 +5 +2 +5 +0 +0 +4 +2 +3 +5 +2 +5 +2 +5 +6 +3 +6 +6 +4 +6 +4 +1 +5 +3 +0 +3 +4 +0 +2 +3 +3 +3 +5 +6 +4 +5 +6 +6 +3 +3 +4 +4 +2 +5 +6 +4 +3 +3 +0 +5 +6 +4 +6 +2 +3 +4 +0 +3 +0 +3 +2 +2 +3 +3 +3 +6 +4 +6 +3 +4 +0 +3 +3 +0 +0 +0 +0 +5 +0 +3 +6 +0 +3 +6 +2 +3 +6 +3 +6 +0 +4 +3 +0 +4 +5 +3 +3 +3 +6 +2 +5 +3 +0 +3 +3 +5 +3 +4 +3 +3 +4 +6 +5 +3 +6 +6 +5 +6 +1 +3 +4 +6 +6 +0 +4 +3 +0 +5 +5 +3 +3 +5 +5 +0 +3 +3 +4 +3 +3 +4 +5 +3 +3 +4 +6 +5 +2 +4 +5 +4 +6 +4 +4 +2 +5 +6 +1 +3 +3 +2 +6 +0 +3 +4 +4 +6 +3 +2 +6 +2 +2 +5 +4 +2 +0 +3 +6 +3 +6 +3 +3 +2 +1 +4 +6 +5 +4 +6 +2 +6 +3 +6 +6 +4 +3 +6 +3 +6 +3 +0 +3 +3 +5 +6 +3 +0 +4 +5 +2 +3 +6 +2 +5 +6 +6 +0 +0 +6 +1 +1 +4 +3 +2 +4 +5 +0 +0 +3 +6 +5 +2 +6 +2 +4 +0 +0 +2 +3 +3 +5 +4 +0 +5 +4 +6 +3 +6 +3 +3 +4 +3 +5 +3 +6 +6 +4 +2 +2 +3 +4 +3 +0 +5 +3 +4 +2 +5 +5 +0 +2 +3 +5 +4 +3 +6 +0 +3 +2 +4 +3 +4 +5 +3 +3 +2 +0 +6 +3 +3 +5 +0 +3 +5 +3 +6 +2 +3 +5 +4 +3 +6 +6 +2 +0 +2 +5 +2 +3 +4 +5 +3 +5 +1 +3 +3 +1 +0 +6 +0 +6 +3 +5 +0 +5 +5 +2 +5 +4 +4 +3 +6 +0 +3 +5 +3 +3 +6 +2 +0 +6 +2 +6 +3 +3 +2 +3 +3 +3 +0 +6 +0 +3 +0 +0 +4 +4 +2 +3 +0 +2 +2 +6 +3 +5 +4 +3 +3 +3 +5 +2 +6 +2 +5 +6 +4 +3 +1 +5 +6 +5 +3 +2 +3 +4 +0 +6 +3 +4 +1 +2 +6 +2 +5 +5 +3 +5 +0 +3 +3 +4 +6 +4 +6 +4 +6 +2 +6 +4 +5 +3 +3 +0 +0 +6 +2 +4 +4 +4 +6 +4 +6 +5 +3 +3 +2 +3 +4 +2 +5 +3 +0 +1 +2 +0 +5 +4 +0 +4 +6 +3 +2 +3 +4 +5 +3 +6 +6 +4 +2 +6 +4 +6 +3 +5 +3 +3 +4 +4 +4 +5 +3 +3 +4 +5 +0 +3 +6 +6 +4 +6 +3 +0 +2 +6 +2 +2 +5 +3 +1 +5 +3 +0 +4 +6 +2 +3 +5 +0 +0 +4 +6 +2 +5 +6 +3 +1 +3 +6 +2 +4 +6 +5 +3 +3 +2 +4 +2 +3 +2 +0 +6 +4 +3 +0 +6 +2 +3 +3 +5 +0 +4 +4 +0 +0 +0 +3 +4 +6 +3 +1 +0 +2 +3 +2 +4 +6 +3 +0 +2 +5 +3 +4 +6 +3 +2 +3 +3 +4 +3 +2 +0 +6 +0 +6 +4 +6 +3 +2 +6 +3 +6 +4 +3 +2 +4 +3 +6 +0 +6 +3 +0 +6 +0 +6 +2 +0 +4 +3 +3 +5 +4 +2 +4 +2 +2 +6 +4 +6 +6 +5 +2 +6 +2 +2 +6 +0 +3 +5 +2 +2 +2 +6 +6 +3 +2 +6 +5 +4 +2 +4 +6 +6 +6 +4 +5 +2 +4 +4 +6 +5 +6 +2 +2 +3 +3 +2 +1 +0 +3 +0 +4 +3 +6 +2 +3 +6 +3 +4 +4 +3 +5 +3 +2 +0 +2 +6 +6 +2 +4 +4 +3 +2 +2 +6 +4 +2 +3 +6 +4 +3 +3 +0 +5 +6 +3 +6 +6 +3 +4 +4 +3 +6 +5 +4 +2 +6 +5 +6 +4 +4 +1 +2 +4 +6 +2 +6 +6 +6 +4 +3 +0 +3 +3 +4 +6 +4 +1 +6 +5 +4 +0 +6 +5 +0 +0 +0 +3 +3 +6 +5 +6 +3 +4 +6 +4 +6 +3 +3 +3 +0 +5 +4 +6 +5 +0 +0 +4 +3 +4 +5 +6 +5 +2 +0 +3 +2 +3 +0 +3 +3 +6 +0 +2 +3 +4 +4 +3 +5 +3 +6 +4 +1 +3 +5 +6 +0 +4 +0 +4 +3 +0 +4 +5 +3 +0 +4 +4 +5 +0 +3 +4 +6 +0 +2 +5 +6 +5 +4 +5 +6 +4 +2 +5 +6 +4 +2 +2 +6 +3 +6 +6 +4 +4 +2 +6 +0 +3 +3 +6 +3 +4 +0 +5 +6 +4 +0 +4 +3 +3 +4 +3 +4 +3 +0 +6 +0 +4 +6 +4 +6 +5 +6 +0 +3 +5 +5 +1 +5 +4 +2 +3 +4 +6 +0 +5 +4 +3 +2 +2 +5 +2 +5 +6 +2 +0 +3 +1 +2 +6 +6 +4 +2 +2 +6 +4 +6 +2 +6 +6 +0 +3 +4 +0 +3 +6 +2 +3 +6 +4 +4 +4 +0 +6 +3 +3 +6 +4 +6 +2 +6 +3 +3 +3 +6 +3 +4 +6 +3 +3 +3 +4 +4 +5 +1 +5 +6 +5 +3 +4 +3 +0 +2 +6 +0 +2 +4 +0 +0 +4 +6 +3 +2 +5 +0 +3 +3 +3 +3 +5 +3 +2 +5 +4 +3 +2 +3 +3 +2 +3 +2 +5 +6 +3 +2 +3 +2 +3 +3 +3 +5 +2 +4 +3 +2 +5 +4 +6 +3 +1 +3 +3 +2 +6 +2 +4 +3 +4 +4 +3 +0 +5 +4 +1 +3 +2 +5 +3 +5 +3 +3 +3 +0 +3 +6 +4 +4 +0 +3 +6 +0 +4 +3 +2 +3 +4 +4 +6 +3 +5 +6 +2 +4 +1 +6 +4 +3 +0 +2 +6 +0 +3 +5 +5 +2 +4 +3 +2 +1 +2 +3 +2 +0 +6 +6 +2 +3 +4 +4 +6 +2 +2 +6 +4 +3 +6 +3 +6 +6 +2 +4 +2 +5 +6 +6 +5 +2 +0 +0 +6 +6 +0 +4 +0 +2 +0 +3 +6 +4 +0 +3 +5 +3 +0 +6 +2 +6 +4 +6 +3 +4 +3 +0 +6 +2 +2 +6 +0 +3 +6 +0 +4 +3 +3 +4 +5 +3 +6 +3 +0 +6 +4 +3 +3 +4 +2 +4 +4 +3 +0 +3 +2 +6 +0 +3 +2 +6 +0 +3 +6 +3 +1 +3 +2 +3 +3 +2 +6 +6 +6 +2 +5 +4 +5 +3 +3 +3 +2 +6 +3 +2 +0 +3 +3 +5 +3 +3 +2 +6 +2 +3 +4 +3 +2 +3 +0 +3 +2 +5 +6 +4 +5 +4 +3 +4 +3 +0 +1 +3 +0 +2 +3 +4 +6 +3 +0 +3 +2 +5 +6 +6 +0 +3 +2 +6 +3 +6 +6 +3 +5 +1 +5 +2 +2 +2 +3 +3 +3 +4 +2 +3 +2 +5 +3 +5 +6 +4 +0 +5 +3 +3 +4 +3 +0 +6 +4 +3 +4 +5 +4 +6 +4 +0 +0 +0 +3 +3 +0 +0 +4 +4 +3 +4 +6 +6 +3 +3 +4 +6 +6 +3 +0 +0 +4 +6 +5 +6 +0 +3 +3 +3 +6 +5 +3 +6 +0 +2 +4 +6 +3 +2 +3 +6 +6 +2 +6 +3 +0 +6 +4 +2 +3 +4 +5 +5 +6 +0 +6 +4 +3 +4 +4 +0 +4 +1 +0 +5 +4 +1 +4 +6 +5 +0 +3 +2 +3 +1 +6 +2 +0 +3 +6 +5 +6 +4 +6 +3 +2 +6 +0 +3 +3 +5 +2 +6 +4 +4 +6 +6 +6 +3 +3 +4 +5 +2 +0 +2 +5 +1 +0 +5 +6 +4 +3 +2 +6 +0 +2 +3 +2 +3 +4 +3 +4 +5 +5 +6 +3 +2 +2 +0 +2 +0 +6 +0 +3 +3 +2 +3 +0 +0 +5 +3 +0 +4 +5 +3 +6 +2 +3 +5 +3 +4 +4 +6 +5 +0 +0 +4 +0 +3 +2 +6 +6 +5 +4 +3 +0 +6 +0 +0 +0 +4 +4 +3 +3 +4 +2 +4 +2 +4 +2 +2 +3 +6 +6 +5 +0 +6 +4 +0 +4 +4 +6 +4 +0 +3 +2 +3 +5 +4 +3 +3 +3 +3 +6 +2 +3 +6 +3 +2 +5 +2 +6 +4 +6 +1 +2 +3 +0 +3 +2 +3 +0 +4 +0 +5 +0 +5 +3 +5 +6 +3 +5 +5 +3 +2 +6 +3 +3 +3 +3 +6 +4 +3 +3 +3 +4 +5 +0 +5 +3 +2 +3 +5 +2 +3 +3 +1 +5 +0 +5 +4 +5 +3 +2 +2 +3 +0 +4 +6 +2 +3 +6 +4 +6 +5 +3 +4 +0 +6 +0 +2 +1 +5 +5 +3 +0 +6 +0 +6 +3 +6 +4 +4 +0 +6 +4 +3 +1 +2 +0 +0 +3 +6 +6 +3 +5 +4 +3 +3 +0 +3 +3 +6 +6 +6 +4 +3 +0 +1 +6 +6 +4 +4 +2 +6 +6 +6 +2 +4 +2 +5 +0 +4 +2 +0 +1 +4 +2 +6 +4 +1 +4 +3 +0 +5 +0 +3 +4 +4 +4 +0 +5 +4 +0 +0 +0 +6 +0 +4 +6 +2 +5 +2 +2 +3 +4 +3 +2 +3 +0 +6 +4 +0 +0 +3 +6 +3 +3 +5 +6 +3 +3 +6 +5 +0 +3 +5 +0 +5 +5 +2 +5 +3 +4 +5 +6 +4 +2 +5 +5 +0 +6 +3 +5 +0 +6 +0 +6 +5 +6 +2 +0 +4 +0 +3 +5 +4 +0 +3 +0 +5 +3 +2 +5 +0 +6 +6 +3 +3 +3 +3 +6 +5 +6 +4 +3 +3 +5 +2 +3 +6 +5 +3 +4 +2 +6 +1 +3 +3 +4 +3 +2 +2 +0 +6 +5 +2 +3 +3 +2 +6 +5 +2 +2 +0 +4 +4 +3 +4 +6 +4 +5 +4 +6 +3 +0 +6 +3 +0 +2 +5 +5 +5 +6 +5 +3 +0 +4 +3 +5 +2 +4 +3 +4 +4 +3 +5 +4 +0 +3 +2 +3 +4 +3 +0 +3 +3 +0 +6 +6 +5 +4 +3 +0 +4 +1 +3 +6 +0 +3 +5 +0 +6 +3 +3 +4 +5 +3 +6 +4 +3 +3 +0 +0 +3 +3 +3 +3 +6 +3 +4 +2 +3 +2 +5 +4 +3 +6 +4 +5 +2 +5 +0 +2 +4 +0 +6 +5 +0 +3 +2 +3 +3 +5 +2 +4 +2 +2 +4 +3 +2 +5 +6 +3 +2 +3 +4 +6 +4 +3 +3 +3 +6 +0 +6 +3 +3 +5 +4 +6 +0 +3 +5 +2 +5 +6 +0 +6 +5 +4 +6 +6 +3 +3 +0 +6 +4 +3 +4 +5 +4 +5 +2 +5 +2 +5 +6 +2 +0 +6 +1 +3 +4 +6 +1 +3 +6 +2 +6 +6 +4 +2 +6 +4 +2 +6 +4 +3 +6 +0 +0 +3 +2 +6 +3 +2 +2 +6 +3 +2 +6 +4 +3 +6 +0 +1 +6 +2 +5 +0 +6 +4 +3 +5 +6 +0 +4 +0 +3 +2 +6 +0 +4 +3 +2 +4 +3 +2 +5 +6 +4 +0 +5 +4 +5 +3 +6 +6 +2 +5 +2 +4 +2 +6 +3 +6 +3 +0 +3 +5 +3 +2 +0 +6 +3 +4 +3 +0 +3 +2 +4 +6 +6 +3 +1 +6 +4 +0 +4 +6 +6 +6 +3 +0 +0 +2 +3 +2 +3 +4 +4 +6 +6 +2 +4 +4 +6 +3 +6 +1 +3 +3 +3 +3 +0 +6 +5 +3 +3 +2 +0 +2 +6 +3 +2 +3 +0 +0 +3 +3 +0 +3 +3 +3 +5 +0 +4 +4 +3 +0 +3 +2 +2 +4 +4 +6 +6 +6 +4 +6 +0 +4 +6 +0 +3 +2 +5 +5 +3 +3 +4 +2 +6 +2 +0 +3 +3 +6 +0 +6 +3 +3 +6 +2 +0 +3 +6 +2 +6 +0 +2 +2 +2 +5 +2 +5 +0 +0 +6 +6 +3 +6 +2 +6 +6 +0 +3 +4 +0 +5 +3 +3 +2 +3 +5 +6 +6 +3 +1 +3 +2 +6 +0 +5 +0 +3 +2 +4 +5 +6 +3 +5 +0 +0 +4 +0 +6 +4 +5 +3 +3 +5 +5 +5 +2 +2 +6 +0 +6 +2 +5 +2 +3 +6 +3 +3 +6 +4 +3 +3 +2 +2 +3 +2 +5 +3 +3 +2 +0 +0 +5 +4 +3 +3 +2 +4 +6 +3 +6 +3 +3 +2 +2 +6 +0 +2 +6 +4 +5 +3 +4 +6 +0 +4 +3 +4 +3 +0 +1 +3 +3 +2 +6 +4 +6 +6 +2 +0 +2 +3 +2 +2 +2 +3 +4 +5 +4 +2 +0 +5 +0 +4 +6 +3 +2 +3 +3 +3 +6 +3 +0 +6 +2 +3 +4 +4 +6 +2 +5 +5 +4 +0 +5 +6 +3 +0 +0 +5 +3 +3 +3 +2 +3 +0 +5 +0 +5 +4 +3 +0 +0 +4 +6 +6 +0 +4 +2 +0 +4 +3 +0 +4 +6 +5 +5 +6 +0 +5 +2 +0 +3 +0 +3 +0 +5 +6 +6 +4 +6 +4 +5 +2 +5 +5 +4 +2 +1 +0 +4 +5 +3 +4 +0 +6 +3 +4 +3 +4 +0 +3 +3 +0 +0 +0 +3 +2 +2 +1 +3 +2 +3 +0 +0 +0 +2 +2 +5 +2 +5 +3 +2 +3 +4 +2 +4 +4 +4 +4 +3 +6 +2 +2 +2 +4 +0 +2 +3 +3 +6 +3 +3 +3 +2 +3 +0 +5 +6 +0 +2 +3 +3 +6 +3 +3 +4 +3 +6 +3 +2 +4 +4 +2 +0 +5 +3 +2 +4 +4 +6 +0 +4 +6 +6 +6 +3 +6 +6 +5 +3 +2 +2 +3 +0 +0 +6 +4 +3 +4 +6 +2 +6 +4 +4 +1 +6 +6 +2 +3 +6 +5 +3 +6 +5 +4 +1 +6 +2 +6 +6 +3 +1 +6 +3 +0 +3 +3 +0 +5 +4 +4 +0 +6 +3 +0 +3 +4 +0 +3 +5 +2 +4 +4 +4 +4 +6 +0 +2 +4 +5 +6 +2 +6 +3 +3 +2 +0 +3 +5 +5 +4 +3 +5 +5 +4 +2 +0 +6 +5 +6 +3 +4 +4 +3 +2 +0 +2 +3 +0 +6 +3 +6 +3 +6 +3 +5 +0 +0 +2 +1 +4 +3 +3 +3 +2 +6 +4 +2 +3 +0 +3 +4 +0 +4 +3 +3 +0 +6 +5 +0 +5 +5 +3 +6 +4 +4 +2 +6 +3 +6 +4 +3 +3 +3 +3 +4 +5 +3 +4 +1 +3 +4 +2 +4 +0 +3 +6 +6 +4 +0 +4 +4 +4 +3 +0 +2 +4 +6 +4 +0 +2 +5 +4 +4 +4 +5 +2 +6 +4 +6 +2 +3 +4 +3 +3 +0 +3 +6 +3 +4 +2 +4 +6 +3 +3 +0 +6 +4 +2 +6 +3 +2 +0 +5 +5 +0 +3 +6 +1 +6 +3 +3 +6 +5 +4 +6 +4 +0 +6 +0 +6 +2 +6 +4 +6 +3 +5 +3 +6 +0 +3 +3 +0 +3 +1 +1 +3 +5 +3 +2 +4 +6 +3 +2 +6 +6 +0 +5 +6 +0 +2 +6 +2 +6 +5 +3 +4 +4 +5 +2 +4 +2 +3 +5 +2 +5 +3 +3 +4 +3 +4 +5 +4 +3 +0 +3 +3 +6 +6 +6 +6 +6 +5 +4 +6 +3 +3 +3 +0 +0 +6 +5 +3 +0 +3 +3 +4 +4 +4 +3 +2 +4 +2 +5 +6 +2 +4 +6 +0 +4 +3 +4 +3 +2 +3 +0 +5 +0 +6 +6 +4 +0 +0 +5 +0 +2 +0 +2 +0 +3 +6 +4 +4 +6 +0 +2 +2 +6 +2 +6 +5 +3 +0 +4 +3 +4 +6 +4 +2 +6 +5 +4 +5 +3 +0 +3 +5 +0 +5 +3 +2 +4 +4 +4 +6 +6 +6 +3 +4 +5 +2 +2 +2 +3 +4 +3 +5 +0 +2 +3 +3 +4 +3 +3 +4 +2 +5 +2 +3 +5 +6 +4 +0 +0 +3 +4 +6 +0 +3 +2 +6 +6 +6 +0 +4 +6 +3 +0 +6 +6 +0 +0 +5 +4 +3 +6 +0 +3 +0 +6 +3 +0 +4 +3 +3 +4 +6 +4 +0 +6 +3 +0 +3 +3 +5 +5 +2 +2 +3 +6 +6 +2 +0 +4 +2 +0 +6 +2 +4 +6 +0 +6 +4 +5 +2 +4 +6 +2 +5 +3 +5 +5 +0 +3 +0 +4 +5 +5 +0 +5 +5 +2 +6 +0 +6 +3 +0 +3 +2 +2 +5 +2 +2 +4 +2 +2 +4 +0 +4 +4 +2 +0 +0 +3 +5 +3 +2 +0 +4 +3 +3 +6 +4 +5 +2 +0 +6 +0 +2 +3 +3 +0 +2 +4 +0 +4 +6 +0 +6 +5 +0 +0 +3 +6 +4 +6 +6 +0 +4 +4 +5 +0 +6 +2 +4 +6 +3 +6 +3 +2 +6 +6 +2 +4 +3 +0 +5 +2 +6 +3 +5 +4 +4 +4 +6 +2 +0 +2 +6 +3 +2 +3 +3 +0 +5 +4 +4 +6 +6 +3 +3 +4 +4 +6 +4 +4 +4 +4 +0 +3 +3 +3 +3 +3 +3 +6 +0 +2 +4 +6 +6 +4 +5 +6 +3 +3 +0 +5 +2 +0 +6 +6 +2 +4 +4 +0 +4 +2 +2 +6 +5 +6 +0 +4 +5 +2 +0 +3 +6 +4 +0 +0 +5 +3 +3 +3 +6 +6 +5 +5 +3 +4 +3 +6 +4 +5 +3 +3 +6 +4 +2 +4 +5 +4 +6 +3 +2 +3 +4 +2 +4 +6 +4 +3 +0 +4 +0 +4 +2 +4 +6 +0 +4 +6 +6 +3 +4 +3 +2 +3 +2 +6 +0 +6 +6 +3 +2 +0 +4 +6 +3 +4 +5 +6 +0 +4 +4 +5 +2 +0 +4 +0 +6 +0 +3 +4 +3 +6 +2 +6 +4 +4 +5 +0 +5 +1 +6 +3 +0 +0 +3 +3 +4 +3 +6 +3 +6 +2 +0 +6 +4 +6 +6 +5 +3 +1 +1 +6 +3 +2 +3 +2 +2 +3 +2 +3 +6 +4 +0 +3 +3 +4 +4 +4 +4 +3 +2 +3 +3 +6 +5 +6 +6 +1 +6 +6 +3 +3 +2 +4 +5 +0 +4 +3 +5 +2 +6 +4 +2 +0 +0 +0 +6 +3 +5 +3 +4 +0 +6 +4 +6 +6 +5 +4 +6 +3 +6 +4 +3 +0 +3 +6 +0 +4 +4 +4 +4 +2 +4 +2 +5 +4 +3 +3 +0 +5 +4 +6 +2 +4 +6 +6 +6 +2 +5 +3 +4 +6 +0 +4 +6 +4 +2 +6 +6 +4 +4 +5 +0 +4 +6 +5 +2 +4 +4 +3 +3 +3 +3 +3 +0 +2 +5 +4 +2 +0 +3 +5 +3 +4 +4 +4 +3 +3 +3 +4 +2 +6 +4 +3 +4 +6 +4 +2 +4 +2 +4 +5 +4 +5 +4 +6 +4 +2 +2 +5 +1 +5 +3 +6 +0 +6 +0 +4 +2 +3 +1 +3 +0 +0 +6 +4 +0 +6 +4 +3 +5 +2 +6 +2 +6 +4 +4 +0 +4 +4 +0 +5 +2 +6 +5 +3 +3 +0 +0 +2 +2 +5 +4 +2 +3 +5 +4 +0 +0 +3 +2 +3 +4 +0 +6 +3 +5 +3 +2 +0 +5 +6 +4 +3 +6 +6 +3 +6 +6 +2 +5 +3 +4 +2 +3 +6 +0 +6 +5 +6 +6 +4 +6 +6 +2 +0 +5 +0 +2 +6 +6 +0 +2 +5 +0 +2 +6 +3 +2 +2 +3 +0 +0 +3 +3 +3 +6 +0 +4 +4 +6 +6 +6 +3 +3 +2 +3 +6 +6 +3 +3 +3 +3 +5 +5 +6 +6 +3 +3 +4 +2 +3 +6 +5 +3 +3 +4 +4 +6 +5 +6 +6 +3 +3 +2 +6 +5 +4 +2 +3 +4 +2 +6 +3 +5 +4 +1 +3 +6 +6 +3 +0 +2 +2 +0 +3 +3 +6 +6 +6 +3 +3 +0 +4 +2 +0 +3 +0 +2 +3 +3 +3 +3 +5 +0 +3 +2 +6 +0 +3 +6 +4 +3 +3 +3 +2 +5 +4 +0 +0 +3 +5 +3 +5 +0 +2 +6 +6 +4 +4 +3 +2 +3 +6 +2 +3 +5 +2 +4 +4 +5 +3 +4 +3 +3 +6 +2 +6 +4 +2 +6 +3 +5 +0 +0 +4 +6 +0 +4 +2 +0 +3 +5 +3 +0 +6 +6 +3 +3 +1 +0 +6 +4 +4 +6 +2 +6 +2 +5 +0 +5 +6 +3 +2 +3 +6 +1 +4 +0 +0 +3 +0 +0 +3 +0 +3 +3 +3 +2 +4 +2 +6 +6 +1 +4 +3 +6 +6 +2 +4 +6 +4 +6 +3 +5 +5 +0 +5 +4 +4 +4 +2 +0 +6 +2 +2 +4 +6 +3 +2 +3 +5 +3 +6 +2 +0 +6 +6 +3 +5 +4 +0 +3 +3 +3 +6 +4 +4 +3 +3 +4 +2 +6 +2 +0 +0 +5 +4 +6 +6 +6 +0 +3 +2 +3 +2 +4 +3 +5 +4 +6 +6 +6 +3 +2 +2 +2 +5 +1 +0 +3 +5 +0 +2 +5 +6 +4 +5 +5 +3 +3 +0 +1 +4 +2 +2 +3 +3 +3 +4 +4 +2 +0 +0 +5 +2 +0 +6 +3 +2 +3 +0 +2 +3 +2 +3 +0 +2 +6 +3 +2 +2 +3 +3 +4 +4 +6 +6 +0 +2 +6 +6 +3 +5 +4 +6 +6 +4 +3 +4 +3 +4 +3 +6 +3 +6 +3 +4 +3 +3 +4 +2 +0 +3 +3 +3 +6 +2 +5 +3 +0 +3 +4 +2 +4 +6 +3 +0 +4 +4 +6 +5 +0 +4 +4 +2 +2 +2 +5 +3 +3 +6 +3 +4 +2 +3 +4 +3 +0 +3 +2 +6 +2 +6 +2 +5 +0 +3 +3 +4 +4 +4 +2 +6 +3 +3 +2 +6 +3 +3 +0 +6 +5 +3 +4 +3 +3 +3 +3 +6 +1 +3 +6 +4 +0 +6 +6 +4 +4 +0 +0 +3 +3 +4 +0 +2 +6 +2 +4 +2 +3 +6 +5 +5 +3 +0 +6 +4 +6 +5 +3 +2 +0 +2 +3 +2 +4 +5 +5 +3 +6 +2 +2 +2 +2 +0 +6 +3 +3 +0 +3 +4 +6 +3 +3 +6 +0 +6 +4 +5 +4 +2 +4 +6 +4 +6 +4 +4 +6 +3 +4 +2 +4 +6 +3 +4 +0 +4 +6 +3 +4 +2 +3 +2 +3 +6 +0 +3 +3 +2 +6 +0 +0 +4 +3 +2 +5 +6 +1 +2 +3 +4 +3 +5 +6 +4 +5 +5 +3 +2 +6 +2 +6 +0 +5 +2 +3 +3 +2 +3 +6 +4 +3 +4 +6 +3 +2 +3 +4 +2 +1 +5 +2 +4 +2 +3 +6 +5 +3 +6 +6 +6 +6 +0 +6 +5 +2 +2 +6 +0 +6 +3 +0 +3 +0 +3 +2 +4 +2 +5 +4 +0 +4 +2 +2 +6 +4 +4 +4 +6 +6 +3 +6 +5 +3 +0 +0 +4 +3 +5 +4 +2 +0 +5 +4 +1 +3 +5 +4 +6 +2 +6 +3 +3 +3 +6 +6 +4 +4 +1 +3 +4 +0 +6 +4 +3 +6 +5 +3 +5 +4 +6 +3 +5 +6 +2 +3 +6 +3 +4 +5 +4 +3 +6 +6 +3 +6 +6 +3 +5 +3 +3 +2 +6 +5 +4 +6 +0 +3 +3 +4 +3 +1 +6 +6 +0 +4 +3 +4 +3 +6 +0 +2 +4 +5 +4 +3 +4 +5 +4 +0 +5 +5 +0 +4 +4 +2 +2 +3 +0 +6 +0 +6 +0 +3 +5 +6 +3 +6 +4 +3 +2 +0 +3 +4 +4 +6 +2 +6 +6 +2 +3 +6 +3 +3 +6 +6 +3 +0 +3 +6 +3 +6 +5 +4 +5 +1 +6 +0 +4 +0 +6 +4 +6 +4 +2 +3 +4 +3 +2 +4 +6 +5 +0 +4 +0 +6 +2 +5 +6 +0 +2 +2 +0 +3 +2 +3 +2 +0 +4 +0 +6 +6 +3 +4 +0 +5 +4 +3 +0 +2 +5 +6 +5 +6 +4 +6 +0 +0 +3 +6 +4 +0 +2 +0 +4 +3 +2 +2 +6 +2 +2 +3 +4 +6 +4 +0 +6 +6 +4 +5 +0 +2 +6 +3 +2 +2 +4 +4 +0 +2 +1 +6 +6 +4 +3 +4 +0 +4 +6 +3 +6 +0 +5 +4 +2 +3 +1 +3 +3 +0 +3 +5 +3 +5 +6 +6 +4 +3 +4 +2 +0 +4 +4 +3 +0 +5 +2 +4 +6 +2 +0 +4 +3 +0 +6 +2 +0 +3 +5 +2 +0 +6 +0 +3 +4 +6 +5 +3 +2 +3 +4 +6 +6 +3 +0 +3 +5 +4 +3 +4 +2 +3 +4 +3 +5 +2 +2 +5 +5 +3 +3 +4 +3 +6 +4 +3 +2 +3 +0 +2 +4 +2 +3 +2 +5 +3 +2 +6 +2 +6 +4 +0 +6 +0 +5 +4 +3 +5 +4 +5 +2 +0 +3 +3 +4 +3 +4 +3 +2 +2 +2 +5 +3 +3 +2 +4 +6 +6 +0 +4 +6 +6 +4 +3 +3 +3 +0 +4 +3 +3 +0 +2 +3 +6 +6 +5 +3 +6 +5 +2 +6 +3 +6 +1 +3 +0 +6 +0 +6 +6 +3 +5 +3 +4 +3 +2 +2 +2 +0 +2 +6 +4 +6 +4 +3 +3 +2 +2 +3 +0 +4 +6 +6 +4 +6 +4 +0 +0 +2 +5 +5 +3 +0 +3 +5 +0 +6 +5 +4 +5 +3 +6 +3 +5 +6 +0 +5 +2 +2 +5 +0 +0 +0 +6 +3 +2 +3 +2 +6 +0 +3 +3 +5 +3 +4 +0 +5 +2 +3 +2 +0 +3 +2 +3 +4 +1 +6 +4 +4 +0 +5 +5 +6 +6 +6 +3 +2 +0 +4 +5 +2 +6 +6 +3 +4 +6 +3 +4 +5 +5 +4 +0 +3 +2 +3 +5 +3 +6 +0 +5 +4 +6 +5 +3 +5 +3 +0 +5 +3 +0 +2 +3 +4 +4 +3 +6 +4 +5 +0 +2 +4 +6 +2 +3 +4 +6 +3 +2 +3 +4 +5 +6 +3 +5 +2 +6 +4 +4 +2 +3 +2 +3 +6 +6 +2 +3 +3 +3 +4 +3 +0 +0 +2 +5 +2 +3 +3 +4 +2 +4 +4 +0 +5 +4 +2 +4 +3 +3 +6 +2 +3 +5 +6 +5 +6 +2 +5 +3 +3 +0 +3 +4 +0 +4 +6 +3 +1 +4 +0 +3 +5 +3 +5 +3 +6 +4 +3 +5 +6 +0 +2 +0 +3 +6 +3 +5 +6 +2 +6 +2 +0 +0 +6 +6 +4 +6 +6 +6 +6 +3 +2 +6 +6 +5 +4 +4 +4 +4 +5 +4 +3 +6 +0 +0 +3 +0 +6 +3 +3 +3 +2 +0 +2 +5 +6 +0 +0 +0 +6 +6 +5 +5 +4 +6 +0 +3 +3 +2 +3 +0 +4 +0 +2 +3 +2 +3 +4 +6 +4 +5 +3 +3 +2 +2 +3 +3 +0 +4 +2 +5 +2 +4 +6 +3 +6 +5 +6 +3 +2 +5 +6 +3 +4 +3 +4 +3 +4 +6 +2 +0 +3 +0 +6 +2 +6 +3 +6 +2 +3 +2 +4 +5 +0 +0 +5 +2 +2 +0 +0 +1 +6 +4 +5 +4 +4 +4 +4 +3 +4 +5 +3 +6 +4 +6 +5 +0 +0 +5 +3 +3 +6 +4 +3 +6 +0 +3 +5 +3 +5 +0 +3 +6 +4 +3 +3 +3 +3 +4 +5 +6 +5 +2 +6 +3 +3 +4 +4 +6 +2 +4 +3 +3 +6 +1 +0 +2 +0 +3 +4 +5 +3 +6 +6 +0 +4 +6 +2 +2 +4 +4 +3 +5 +3 +4 +2 +5 +3 +6 +6 +3 +2 +4 +4 +4 +1 +3 +4 +0 +0 +4 +5 +3 +0 +4 +6 +4 +6 +0 +6 +0 +5 +0 +4 +3 +2 +3 +0 +3 +6 +0 +4 +5 +6 +2 +4 +6 +2 +3 +6 +6 +0 +1 +0 +5 +4 +6 +2 +3 +6 +6 +3 +6 +3 +3 +6 +0 +2 +2 +3 +3 +4 +2 +2 +6 +2 +4 +5 +3 +3 +5 +3 +2 +1 +5 +5 +5 +6 +5 +3 +6 +3 +0 +3 +2 +5 +4 +3 +4 +6 +4 +5 +6 +3 +6 +0 +5 +5 +4 +3 +6 +2 +2 +3 +3 +6 +3 +4 +3 +5 +4 +4 +0 +4 +0 +2 +4 +4 +3 +4 +3 +3 +5 +3 +3 +4 +4 +5 +6 +0 +6 +4 +2 +3 +4 +0 +2 +0 +0 +0 +5 +5 +0 +6 +3 +3 +2 +2 +4 +3 +3 +0 +2 +2 +3 +2 +0 +5 +6 +6 +6 +2 +3 +6 +5 +6 +6 +4 +0 +4 +6 +5 +3 +6 +3 +2 +5 +6 +4 +3 +0 +2 +3 +4 +6 +5 +0 +6 +4 +0 +5 +3 +4 +3 +4 +2 +0 +4 +5 +4 +5 +6 +3 +2 +3 +0 +6 +3 +0 +5 +6 +3 +2 +6 +6 +4 +3 +6 +4 +4 +3 +3 +0 +3 +0 +4 +0 +3 +5 +3 +3 +4 +4 +4 +2 +5 +2 +3 +2 +3 +3 +3 +0 +3 +5 +2 +6 +5 +6 +2 +6 +4 +4 +3 +3 +6 +3 +5 +4 +0 +4 +0 +0 +2 +2 +4 +6 +3 +5 +2 +3 +5 +3 +4 +5 +3 +2 +2 +4 +2 +2 +2 +4 +6 +3 +0 +6 +3 +2 +2 +6 +2 +0 +6 +3 +0 +4 +2 +5 +6 +4 +0 +2 +6 +4 +4 +3 +6 +0 +4 +3 +3 +5 +2 +4 +0 +0 +4 +3 +2 +4 +6 +1 +3 +6 +4 +0 +2 +6 +4 +3 +6 +5 +2 +0 +3 +5 +3 +2 +6 +5 +6 +4 +3 +5 +4 +2 +4 +4 +0 +4 +5 +3 +4 +4 +6 +5 +0 +6 +5 +4 +5 +2 +4 +3 +4 +3 +4 +0 +5 +5 +3 +5 +3 +0 +0 +6 +0 +6 +6 +6 +3 +6 +0 +4 +6 +3 +0 +6 +3 +0 +0 +6 +3 +5 +3 +3 +5 +6 +3 +2 +4 +3 +2 +6 +0 +0 +6 +3 +6 +4 +3 +2 +4 +3 +1 +4 +2 +2 +2 +4 +6 +6 +0 +5 +2 +6 +3 +3 +6 +1 +4 +2 +2 +0 +5 +3 +2 +4 +3 +2 +5 +6 +4 +4 +2 +0 +2 +2 +6 +3 +3 +2 +5 +3 +5 +4 +6 +6 +3 +4 +3 +4 +4 +0 +5 +4 +2 +2 +6 +5 +3 +4 +2 +5 +2 +5 +2 +5 +2 +3 +2 +6 +3 +3 +2 +4 +6 +6 +3 +6 +0 +6 +2 +6 +3 +6 +3 +5 +4 +4 +0 +6 +6 +6 +3 +4 +6 +4 +3 +3 +4 +0 +3 +6 +3 +2 +6 +0 +0 +3 +2 +0 +2 +4 +2 +2 +6 +3 +2 +3 +6 +3 +3 +1 +4 +6 +4 +4 +1 +4 +3 +3 +0 +3 +4 +5 +4 +4 +5 +3 +6 +3 +0 +3 +3 +4 +4 +0 +6 +5 +2 +0 +3 +6 +2 +0 +5 +4 +0 +0 +4 +2 +4 +3 +0 +6 +3 +6 +3 +3 +3 +0 +0 +3 +0 +3 +6 +4 +3 +3 +6 +0 +6 +3 +3 +4 +6 +0 +4 +6 +6 +3 +6 +0 +2 +2 +6 +6 +0 +3 +4 +1 +4 +5 +4 +3 +6 +0 +0 +2 +3 +2 +3 +4 +1 +3 +5 +3 +6 +0 +6 +6 +4 +6 +3 +3 +5 +4 +4 +3 +2 +3 +3 +4 +0 +4 +3 +0 +2 +4 +4 +3 +2 +4 +4 +4 +4 +4 +3 +6 +4 +6 +3 +6 +6 +0 +6 +6 +3 +0 +3 +4 +2 +5 +2 +3 +4 +0 +3 +6 +0 +3 +3 +0 +2 +2 +5 +5 +3 +3 +2 +4 +3 +6 +3 +5 +5 +6 +6 +0 +5 +0 +5 +2 +3 +6 +4 +3 +5 +0 +5 +4 +3 +3 +4 +2 +0 +1 +5 +3 +5 +6 +6 +2 +3 +0 +3 +2 +4 +3 +3 +5 +3 +6 +0 +3 +3 +4 +5 +6 +3 +4 +6 +0 +4 +5 +6 +2 +0 +4 +3 +2 +6 +2 +3 +3 +3 +6 +4 +2 +4 +4 +2 +1 +4 +0 +4 +6 +6 +6 +3 +6 +5 +0 +5 +3 +2 +6 +6 +4 +4 +3 +2 +3 +3 +6 +6 +0 +5 +3 +2 +4 +3 +4 +4 +3 +4 +4 +5 +6 +2 +6 +0 +3 +2 +4 +0 +3 +3 +4 +6 +3 +3 +2 +6 +3 +6 +2 +1 +6 +2 +3 +4 +4 +5 +3 +2 +3 +2 +3 +2 +2 +4 +5 +3 +6 +6 +0 +0 +0 +4 +0 +0 +2 +2 +4 +0 +4 +2 +2 +5 +2 +5 +6 +4 +5 +2 +2 +6 +3 +2 +6 +6 +4 +2 +3 +5 +3 +4 +3 +4 +3 +3 +4 +6 +6 +6 +4 +3 +5 +4 +3 +4 +6 +3 +2 +6 +2 +6 +4 +2 +3 +4 +3 +2 +2 +2 +2 +6 +3 +6 +0 +1 +5 +0 +2 +5 +3 +0 +4 +3 +0 +0 +5 +0 +3 +4 +4 +6 +3 +3 +4 +6 +3 +0 +5 +3 +3 +3 +3 +4 +3 +3 +5 +0 +4 +0 +6 +4 +4 +3 +2 +4 +4 +0 +4 +5 +0 +2 +6 +6 +6 +6 +0 +6 +4 +5 +0 +3 +4 +3 +2 +2 +0 +2 +2 +6 +4 +3 +2 +2 +3 +2 +2 +6 +0 +6 +6 +4 +4 +3 +3 +3 +6 +4 +3 +6 +6 +2 +3 +6 +6 +2 +5 +6 +3 +3 +0 +3 +3 +6 +2 +2 +5 +6 +4 +6 +3 +3 +6 +0 +3 +4 +1 +3 +6 +4 +4 +4 +2 +4 +2 +2 +1 +0 +3 +3 +0 +0 +2 +6 +6 +2 +3 +6 +6 +4 +6 +3 +4 +3 +4 +5 +3 +3 +6 +4 +2 +6 +4 +3 +3 +6 +2 +4 +2 +0 +6 +0 +3 +2 +3 +5 +6 +6 +2 +2 +3 +0 +0 +3 +3 +4 +4 +6 +6 +6 +3 +3 +2 +5 +3 +2 +3 +3 +2 +4 +2 +6 +2 +3 +3 +0 +3 +2 +3 +3 +6 +2 +2 +0 +2 +0 +2 +4 +2 +4 +0 +0 +3 +3 +3 +2 +4 +0 +5 +0 +0 +0 +4 +2 +3 +0 +3 +0 +5 +6 +0 +5 +3 +3 +2 +3 +0 +3 +3 +2 +2 +3 +6 +2 +2 +2 +3 +0 +4 +5 +0 +6 +4 +4 +3 +4 +6 +5 +6 +3 +3 +6 +5 +6 +3 +3 +2 +3 +5 +6 +5 +6 +2 +6 +4 +3 +4 +0 +6 +6 +2 +4 +2 +4 +2 +2 +3 +0 +6 +3 +6 +0 +2 +3 +3 +5 +3 +2 +0 +0 +3 +4 +2 +4 +5 +4 +2 +3 +3 +3 +1 +2 +4 +2 +2 +0 +6 +4 +4 +6 +2 +5 +4 +3 +3 +0 +2 +0 +3 +2 +0 +2 +3 +0 +3 +6 +1 +6 +4 +4 +0 +4 +5 +3 +6 +4 +4 +4 +6 +5 +3 +2 +0 +4 +0 +3 +3 +3 +6 +3 +5 +3 +3 +6 +0 +0 +4 +2 +6 +2 +6 +4 +4 +0 +2 +4 +6 +0 +3 +1 +2 +3 +6 +2 +5 +3 +2 +0 +3 +0 +6 +4 +6 +6 +2 +0 +4 +5 +0 +4 +4 +6 +3 +4 +6 +4 +0 +2 +3 +1 +6 +0 +0 +5 +4 +3 +0 +0 +4 +6 +6 +3 +1 +6 +3 +3 +4 +6 +3 +3 +4 +4 +2 +0 +6 +0 +2 +0 +3 +6 +6 +0 +4 +6 +6 +3 +5 +6 +0 +6 +5 +3 +3 +0 +0 +5 +6 +6 +2 +6 +4 +3 +4 +4 +2 +0 +4 +4 +2 +3 +2 +0 +2 +6 +5 +0 +5 +4 +2 +2 +5 +4 +0 +6 +0 +3 +0 +4 +3 +6 +0 +4 +3 +6 +2 +4 +4 +3 +2 +3 +5 +6 +3 +5 +2 +3 +2 +3 +2 +2 +2 +3 +0 +5 +3 +3 +2 +0 +2 +4 +3 +4 +3 +3 +6 +3 +1 +3 +3 +6 +3 +3 +3 +6 +2 +0 +3 +2 +6 +6 +4 +3 +4 +1 +3 +6 +4 +3 +2 +4 +4 +3 +3 +5 +3 +6 +5 +6 +5 +6 +4 +3 +5 +3 +5 +0 +2 +2 +0 +3 +3 +6 +4 +0 +5 +2 +4 +5 +2 +3 +6 +0 +0 +3 +0 +6 +4 +3 +3 +3 +4 +3 +4 +5 +2 +2 +3 +4 +0 +4 +5 +4 +3 +3 +6 +4 +2 +0 +2 +3 +5 +6 +4 +0 +3 +4 +4 +3 +3 +4 +6 +6 +0 +3 +3 +2 +0 +3 +0 +3 +4 +6 +6 +4 +6 +3 +3 +0 +2 +5 +3 +4 +2 +4 +5 +0 +6 +3 +3 +5 +0 +5 +2 +4 +3 +6 +6 +4 +5 +4 +4 +4 +6 +4 +2 +1 +3 +3 +3 +2 +5 +6 +2 +6 +3 +6 +5 +4 +6 +6 +4 +0 +6 +5 +6 +0 +3 +2 +3 +6 +0 +2 +2 +2 +3 +0 +3 +4 +3 +3 +6 +2 +3 +3 +2 +6 +3 +0 +0 +5 +3 +3 +2 +2 +0 +2 +4 +3 +3 +3 +3 +2 +0 +3 +3 +3 +2 +3 +4 +0 +4 +2 +5 +4 +4 +5 +6 +6 +3 +3 +3 +4 +3 +4 +3 +2 +4 +0 +5 +3 +6 +0 +5 +4 +3 +3 +6 +4 +2 +3 +3 +3 +2 +4 +6 +6 +4 +0 +4 +4 +0 +4 +5 +3 +4 +3 +4 +3 +2 +3 +0 +6 +6 +3 +2 +3 +3 +3 +4 +6 +6 +4 +4 +4 +2 +0 +4 +2 +2 +3 +6 +5 +4 +6 +5 +6 +3 +3 +3 +5 +3 +6 +5 +3 +4 +3 +3 +4 +5 +6 +2 +5 +3 +3 +3 +4 +0 +6 +2 +4 +4 +2 +3 +6 +3 +4 +5 +3 +4 +2 +6 +4 +6 +4 +0 +4 +4 +4 +5 +5 +4 +3 +0 +4 +3 +3 +3 +3 +3 +3 +5 +2 +3 +2 +3 +5 +3 +2 +0 +4 +6 +2 +0 +0 +2 +6 +6 +3 +6 +6 +3 +2 +4 +0 +5 +0 +2 +3 +2 +2 +2 +6 +2 +3 +3 +2 +3 +4 +3 +2 +4 +2 +3 +4 +2 +3 +2 +0 +6 +0 +6 +6 +3 +4 +6 +3 +5 +2 +4 +2 +5 +1 +6 +4 +4 +4 +2 +3 +5 +6 +0 +3 +5 +2 +3 +6 +0 +3 +0 +3 +6 +6 +3 +4 +5 +6 +4 +6 +0 +1 +3 +4 +3 +3 +1 +2 +5 +2 +6 +6 +5 +6 +4 +5 +2 +4 +5 +0 +4 +3 +6 +4 +6 +4 +5 +0 +2 +6 +0 +2 +6 +3 +6 +3 +2 +3 +6 +4 +0 +5 +2 +2 +2 +3 +3 +3 +6 +6 +4 +3 +4 +5 +3 +3 +5 +3 +3 +3 +0 +4 +6 +6 +4 +2 +3 +3 +2 +3 +3 +5 +5 +0 +3 +6 +5 +3 +3 +0 +3 +6 +4 +4 +0 +3 +3 +3 +3 +0 +4 +5 +3 +2 +0 +1 +0 +0 +6 +0 +1 +2 +5 +4 +2 +2 +4 +2 +1 +2 +2 +6 +0 +3 +4 +4 +4 +3 +2 +5 +3 +4 +0 +4 +2 +4 +5 +2 +0 +6 +4 +6 +5 +6 +4 +5 +2 +4 +6 +6 +3 +2 +0 +3 +4 +6 +3 +0 +0 +3 +2 +4 +0 +6 +3 +5 +4 +4 +2 +6 +4 +3 +5 +2 +4 +5 +2 +3 +3 +2 +5 +6 +3 +6 +4 +2 +6 +0 +4 +1 +6 +2 +2 +2 +3 +0 +0 +6 +6 +4 +1 +0 +3 +4 +0 +3 +2 +3 +3 +3 +4 +4 +6 +5 +4 +4 +6 +5 +6 +3 +3 +5 +2 +3 +6 +5 +3 +4 +4 +4 +4 +6 +2 +2 +3 +6 +3 +4 +3 +6 +2 +6 +5 +2 +3 +5 +6 +6 +1 +5 +3 +2 +5 +3 +3 +3 +2 +5 +5 +0 +6 +3 +2 +3 +3 +3 +6 +0 +0 +5 +6 +4 +6 +5 +6 +3 +0 +6 +5 +3 +3 +4 +6 +3 +4 +1 +6 +6 +6 +1 +6 +3 +0 +4 +3 +3 +3 +6 +3 +5 +3 +3 +2 +3 +3 +3 +4 +0 +0 +6 +1 +6 +6 +4 +6 +2 +2 +2 +2 +3 +0 +3 +3 +2 +0 +3 +3 +3 +3 +5 +4 +0 +2 +0 +2 +5 +0 +4 +6 +5 +4 +4 +5 +2 +6 +0 +2 +2 +6 +3 +5 +0 +6 +3 +0 +4 +4 +4 +1 +4 +3 +3 +6 +6 +3 +5 +3 +2 +5 +6 +3 +2 +2 +2 +1 +6 +6 +3 +5 +0 +5 +1 +3 +4 +3 +3 +0 +5 +5 +3 +3 +3 +4 +6 +4 +0 +5 +4 +3 +0 +0 +6 +3 +3 +4 +0 +5 +3 +3 +4 +2 +0 +2 +4 +0 +5 +6 +3 +6 +2 +0 +4 +6 +4 +3 +4 +3 +6 +4 +6 +3 +3 +5 +6 +4 +3 +6 +6 +3 +2 +3 +1 +0 +0 +6 +5 +5 +5 +3 +3 +5 +6 +6 +0 +5 +5 +5 +3 +3 +5 +4 +5 +2 +6 +0 +2 +3 +0 +3 +0 +0 +6 +6 +2 +5 +6 +4 +4 +3 +3 +5 +6 +3 +2 +6 +3 +3 +6 +0 +4 +3 +0 +3 +3 +3 +2 +3 +5 +4 +6 +4 +6 +4 +0 +2 +2 +5 +2 +4 +2 +5 +6 +3 +5 +4 +6 +3 +3 +4 +2 +4 +0 +2 +4 +6 +0 +2 +4 +5 +2 +5 +5 +4 +3 +4 +6 +3 +5 +6 +4 +6 +6 +3 +3 +6 +6 +6 +3 +0 +2 +4 +6 +3 +0 +0 +4 +2 +5 +2 +4 +3 +2 +3 +3 +3 +6 +4 +4 +2 +5 +3 +3 +5 +6 +4 +5 +5 +2 +3 +6 +4 +2 +2 +5 +2 +4 +6 +3 +3 +3 +5 +2 +0 +0 +5 +3 +5 +3 +5 +2 +3 +3 +3 +6 +0 +4 +4 +5 +6 +0 +2 +2 +2 +6 +6 +3 +6 +2 +1 +4 +4 +2 +3 +3 +6 +4 +0 +5 +0 +3 +3 +3 +5 +2 +5 +3 +6 +6 +4 +2 +5 +3 +4 +4 +5 +5 +6 +6 +5 +0 +3 +4 +0 +3 +3 +6 +0 +4 +0 +3 +3 +0 +3 +6 +6 +6 +3 +5 +6 +3 +3 +4 +6 +2 +2 +0 +0 +4 +2 +3 +4 +6 +6 +0 +2 +5 +4 +3 +3 +6 +0 +6 +1 +6 +0 +3 +4 +6 +2 +0 +6 +3 +4 +2 +4 +6 +5 +6 +6 +5 +3 +6 +0 +3 +5 +3 +0 +2 +6 +6 +3 +0 +0 +3 +2 +3 +0 +6 +3 +3 +0 +3 +6 +3 +3 +0 +6 +3 +4 +2 +3 +0 +4 +3 +0 +6 +4 +5 +3 +0 +3 +3 +2 +3 +3 +6 +6 +3 +3 +4 +4 +1 +6 +3 +0 +3 +2 +4 +2 +3 +4 +2 +6 +3 +3 +0 +6 +6 +4 +3 +5 +3 +3 +6 +4 +5 +3 +5 +2 +4 +6 +3 +5 +4 +3 +0 +0 +3 +5 +4 +5 +6 +0 +5 +2 +0 +3 +3 +3 +0 +4 +0 +6 +0 +2 +4 +6 +5 +5 +4 +2 +0 +5 +6 +6 +3 +3 +6 +3 +3 +4 +0 +5 +0 +2 +3 +0 +3 +3 +3 +4 +3 +6 +3 +4 +6 +3 +3 +3 +5 +2 +3 +3 +4 +3 +5 +3 +0 +5 +4 +6 +6 +2 +5 +5 +4 +4 +6 +2 +2 +2 +3 +3 +6 +3 +2 +5 +3 +6 +3 +3 +3 +4 +0 +6 +4 +3 +2 +0 +3 +5 +3 +3 +0 +6 +5 +4 +3 +3 +6 +0 +6 +6 +2 +2 +2 +0 +2 +4 +2 +3 +4 +3 +3 +3 +2 +2 +2 +4 +2 +3 +3 +6 +4 +0 +0 +6 +0 +4 +6 +3 +3 +4 +5 +4 +3 +6 +4 +5 +6 +6 +0 +6 +0 +4 +6 +2 +3 +2 +5 +4 +0 +3 +2 +5 +3 +0 +3 +3 +5 +2 +4 +3 +3 +3 +6 +5 +3 +0 +6 +5 +4 +6 +4 +4 +0 +3 +3 +6 +3 +4 +0 +6 +6 +3 +0 +4 +2 +4 +4 +0 +3 +4 +0 +2 +3 +3 +2 +3 +2 +4 +2 +5 +6 +2 +3 +6 +4 +3 +2 +3 +6 +5 +3 +2 +6 +3 +6 +4 +0 +0 +3 +1 +0 +3 +2 +3 +4 +4 +5 +0 +0 +6 +6 +2 +3 +3 +0 +3 +3 +0 +3 +3 +0 +6 +6 +0 +6 +6 +5 +0 +6 +6 +5 +6 +2 +0 +0 +4 +3 +5 +3 +4 +4 +3 +4 +5 +2 +4 +2 +0 +6 +5 +2 +0 +3 +5 +6 +5 +3 +5 +2 +6 +2 +4 +5 +6 +6 +4 +3 +2 +4 +6 +3 +0 +6 +3 +5 +3 +6 +0 +5 +0 +6 +5 +2 +3 +3 +6 +2 +0 +1 +3 +3 +6 +4 +6 +3 +3 +5 +3 +6 +3 +3 +6 +6 +4 +6 +6 +4 +3 +1 +3 +5 +3 +4 +0 +4 +0 +5 +2 +3 +2 +3 +5 +4 +4 +2 +3 +3 +6 +0 +0 +3 +4 +6 +0 +6 +6 +6 +6 +6 +4 +3 +2 +2 +0 +0 +5 +3 +0 +5 +4 +0 +3 +0 +4 +4 +6 +0 +0 +1 +3 +3 +3 +3 +3 +6 +3 +4 +2 +0 +4 +1 +2 +2 +3 +3 +4 +4 +4 +2 +6 +3 +3 +3 +4 +5 +3 +4 +3 +2 +2 +6 +3 +3 +3 +2 +6 +5 +2 +6 +3 +3 +6 +0 +6 +6 +0 +6 +3 +4 +6 +0 +0 +6 +6 +6 +4 +3 +4 +3 +6 +6 +4 +2 +4 +2 +2 +2 +0 +5 +2 +5 +2 +6 +6 +0 +3 +0 +4 +3 +5 +6 +6 +5 +4 +6 +5 +3 +3 +4 +0 +2 +6 +5 +5 +6 +3 +3 +4 +2 +4 +0 +4 +0 +2 +6 +6 +3 +2 +6 +4 +0 +6 +4 +5 +3 +6 +3 +6 +2 +6 +3 +5 +2 +6 +3 +0 +6 +0 +4 +6 +2 +3 +2 +6 +2 +2 +0 +6 +0 +2 +3 +3 +0 +3 +4 +0 +2 +2 +1 +3 +4 +4 +3 +2 +2 +3 +3 +0 +4 +0 +0 +4 +0 +3 +2 +6 +0 +6 +5 +1 +4 +2 +4 +3 +6 +0 +2 +3 +6 +4 +6 +0 +6 +3 +4 +3 +6 +2 +3 +6 +3 +4 +0 +5 +4 +0 +3 +6 +6 +6 +2 +4 +1 +3 +4 +2 +3 +6 +4 +5 +5 +4 +3 +6 +4 +3 +6 +4 +5 +2 +3 +0 +5 +4 +3 +2 +3 +3 +2 +3 +3 +6 +6 +2 +3 +4 +3 +2 +5 +2 +6 +2 +6 +2 +0 +2 +0 +2 +3 +6 +0 +6 +2 +2 +3 +0 +3 +6 +5 +4 +1 +2 +0 +3 +3 +3 +6 +1 +3 +1 +6 +6 +0 +4 +3 +0 +5 +3 +0 +3 +6 +5 +2 +3 +4 +0 +3 +4 +3 +3 +6 +6 +5 +5 +4 +3 +3 +6 +3 +4 +4 +4 +3 +4 +6 +3 +5 +6 +3 +5 +5 +0 +4 +5 +2 +2 +2 +0 +3 +3 +5 +4 +4 +6 +6 +5 +6 +6 +2 +2 +0 +5 +3 +5 +0 +3 +1 +0 +1 +2 +3 +0 +6 +4 +6 +0 +3 +5 +3 +6 +2 +3 +5 +1 +6 +2 +4 +4 +3 +0 +2 +2 +5 +4 +2 +2 +0 +1 +3 +3 +0 +4 +2 +6 +2 +3 +0 +5 +3 +3 +0 +0 +2 +3 +2 +5 +3 +3 +0 +6 +4 +5 +5 +4 +4 +2 +2 +4 +4 +3 +2 +0 +2 +3 +0 +6 +4 +5 +4 +0 +3 +0 +1 +2 +2 +0 +6 +3 +2 +0 +3 +2 +4 +3 +3 +2 +4 +3 +5 +2 +5 +0 +4 +0 +0 +0 +4 +0 +0 +2 +0 +4 +2 +0 +2 +0 +2 +6 +3 +6 +3 +3 +4 +6 +4 +6 +3 +6 +6 +3 +0 +2 +4 +4 +0 +4 +2 +0 +0 +6 +2 +0 +6 +5 +5 +3 +5 +6 +2 +6 +6 +2 +3 +3 +3 +5 +4 +0 +6 +2 +3 +6 +0 +2 +2 +3 +3 +6 +6 +2 +3 +5 +0 +0 +4 +4 +5 +2 +2 +2 +3 +6 +2 +5 +4 +5 +4 +2 +3 +3 +3 +6 +2 +3 +5 +0 +0 +0 +0 +0 +1 +4 +4 +6 +1 +4 +4 +6 +3 +3 +2 +3 +2 +2 +5 +0 +2 +2 +6 +3 +2 +2 +5 +4 +0 +3 +4 +1 +0 +3 +6 +0 +0 +5 +6 +2 +5 +6 +3 +3 +2 +3 +0 +5 +3 +6 +0 +2 +6 +6 +3 +2 +3 +2 +3 +2 +3 +0 +2 +5 +3 +4 +3 +6 +5 +3 +5 +3 +2 +5 +1 +6 +6 +3 +5 +2 +3 +3 +3 +5 +3 +6 +6 +4 +5 +6 +0 +6 +4 +6 +6 +1 +6 +4 +6 +0 +6 +4 +4 +0 +3 +0 +0 +4 +2 +4 +3 +2 +0 +3 +3 +6 +0 +3 +3 +5 +2 +6 +6 +2 +0 +2 +4 +3 +0 +5 +6 +6 +0 +3 +5 +2 +5 +4 +0 +1 +6 +3 +0 +3 +2 +2 +6 +6 +5 +0 +6 +6 +5 +4 +3 +6 +0 +4 +2 +4 +5 +2 +3 +3 +3 +5 +0 +4 +3 +2 +6 +4 +3 +3 +3 +6 +6 +5 +1 +0 +4 +2 +0 +3 +3 +3 +0 +0 +1 +3 +4 +6 +6 +2 +2 +3 +2 +6 +0 +2 +6 +4 +1 +3 +6 +3 +2 +2 +2 +2 +3 +2 +6 +1 +4 +4 +5 +3 +3 +3 +5 +4 +6 +4 +4 +0 +3 +0 +4 +4 +0 +2 +6 +3 +4 +6 +3 +3 +2 +2 +5 +3 +5 +3 +4 +2 +2 +3 +0 +5 +2 +3 +6 +4 +2 +3 +2 +4 +3 +5 +0 +6 +6 +5 +6 +0 +5 +4 +5 +4 +0 +3 +3 +4 +0 +0 +2 +5 +3 +0 +3 +0 +3 +3 +0 +4 +3 +3 +5 +3 +4 +5 +0 +6 +0 +1 +2 +6 +3 +6 +3 +3 +2 +0 +5 +4 +3 +6 +3 +4 +3 +4 +4 +4 +6 +3 +4 +2 +6 +3 +0 +3 +3 +2 +5 +3 +3 +4 +4 +5 +2 +6 +4 +0 +3 +5 +6 +3 +5 +4 +1 +2 +3 +5 +4 +1 +3 +4 +4 +5 +6 +4 +3 +3 +6 +2 +3 +6 +2 +0 +3 +0 +2 +0 +4 +6 +4 +2 +0 +6 +6 +3 +6 +3 +3 +2 +2 +4 +5 +2 +2 +3 +3 +0 +3 +2 +0 +6 +3 +3 +0 +3 +3 +2 +5 +2 +5 +2 +4 +4 +0 +3 +3 +6 +3 +0 +2 +4 +6 +4 +2 +2 +2 +3 +0 +6 +3 +3 +6 +4 +4 +3 +4 +4 +2 +5 +2 +6 +0 +2 +3 +3 +3 +2 +6 +5 +2 +1 +3 +6 +3 +2 +4 +4 +4 +6 +6 +2 +6 +3 +4 +5 +2 +6 +3 +6 +3 +3 +3 +4 +4 +4 +4 +2 +6 +3 +6 +6 +6 +1 +6 +3 +2 +5 +4 +3 +3 +4 +5 +3 +4 +4 +6 +4 +2 +4 +3 +2 +6 +6 +3 +2 +6 +0 +6 +6 +4 +0 +3 +0 +3 +2 +2 +4 +6 +3 +0 +0 +5 +2 +5 +2 +6 +3 +4 +5 +0 +4 +3 +6 +6 +2 +4 +5 +4 +4 +2 +4 +3 +5 +3 +0 +0 +2 +0 +4 +3 +2 +0 +0 +0 +0 +3 +5 +3 +6 +1 +3 +4 +4 +2 +0 +2 +1 +4 +0 +3 +3 +6 +3 +4 +2 +5 +0 +6 +4 +3 +2 +4 +5 +0 +4 +4 +3 +3 +1 +2 +2 +0 +3 +0 +5 +3 +2 +4 +2 +6 +3 +3 +3 +4 +6 +4 +3 +0 +5 +4 +3 +5 +2 +3 +6 +5 +0 +3 +4 +4 +4 +2 +6 +3 +6 +2 +3 +3 +2 +3 +5 +2 +5 +6 +0 +0 +3 +3 +4 +5 +6 +2 +3 +3 +0 +3 +4 +6 +2 +4 +6 +5 +2 +6 +5 +0 +3 +3 +2 +0 +6 +2 +5 +6 +3 +3 +3 +3 +6 +3 +3 +6 +3 +6 +4 +3 +3 +2 +5 +5 +3 +4 +3 +3 +0 +0 +4 +5 +0 +6 +4 +5 +2 +6 +0 +2 +5 +2 +5 +6 +5 +2 +3 +4 +4 +2 +3 +3 +6 +2 +6 +2 +4 +3 +3 +3 +6 +6 +6 +4 +0 +3 +6 +5 +3 +0 +2 +0 +3 +4 +2 +4 +4 +3 +0 +4 +6 +6 +4 +3 +2 +6 +2 +2 +4 +6 +0 +4 +6 +2 +3 +0 +3 +5 +6 +6 +5 +3 +2 +5 +3 +3 +6 +4 +0 +4 +6 +2 +6 +4 +5 +4 +5 +5 +0 +0 +3 +3 +4 +3 +3 +5 +3 +5 +2 +3 +4 +6 +0 +6 +0 +2 +5 +4 +4 +6 +5 +6 +6 +4 +4 +2 +0 +3 +3 +0 +3 +0 +5 +5 +4 +2 +5 +2 +0 +2 +0 +4 +2 +3 +0 +0 +3 +3 +4 +0 +2 +5 +2 +3 +4 +2 +4 +4 +5 +4 +4 +4 +3 +0 +5 +4 +3 +3 +0 +4 +0 +6 +2 +2 +4 +3 +2 +0 +3 +3 +3 +0 +0 +3 +2 +4 +5 +0 +3 +5 +6 +4 +6 +3 +0 +2 +4 +5 +0 +3 +3 +3 +6 +6 +5 +2 +2 +4 +6 +3 +6 +1 +4 +0 +4 +0 +4 +5 +0 +1 +4 +0 +3 +3 +2 +6 +6 +3 +2 +0 +2 +6 +6 +4 +4 +6 +2 +3 +4 +5 +4 +2 +4 +6 +4 +4 +2 +6 +5 +5 +3 +1 +4 +4 +6 +2 +4 +0 +1 +3 +2 +4 +3 +6 +3 +4 +2 +6 +5 +5 +0 +6 +2 +2 +6 +0 +5 +6 +3 +3 +6 +5 +4 +6 +2 +3 +5 +5 +2 +2 +4 +0 +3 +2 +0 +0 +3 +2 +3 +4 +4 +5 +4 +0 +6 +3 +6 +5 +1 +5 +3 +0 +3 +0 +0 +4 +6 +2 +6 +4 +4 +5 +4 +4 +2 +4 +3 +2 +2 +6 +0 +3 +4 +3 +4 +3 +0 +5 +3 +3 +3 +4 +3 +0 +5 +3 +5 +3 +3 +4 +2 +5 +0 +6 +2 +5 +3 +4 +2 +2 +6 +3 +3 +5 +6 +3 +3 +5 +6 +0 +0 +4 +0 +3 +4 +2 +6 +6 +4 +6 +4 +5 +6 +6 +6 +4 +5 +0 +5 +4 +5 +4 +5 +4 +6 +3 +6 +2 +2 +5 +5 +0 +2 +1 +0 +4 +3 +0 +2 +0 +0 +0 +4 +5 +3 +4 +6 +3 +4 +4 +5 +3 +4 +5 +3 +6 +2 +6 +3 +3 +2 +2 +0 +6 +6 +0 +4 +5 +2 +3 +3 +4 +3 +3 +3 +2 +3 +3 +4 +4 +3 +5 +6 +3 +0 +0 +2 +3 +4 +0 +4 +0 +2 +2 +0 +3 +3 +2 +0 +3 +0 +5 +6 +5 +5 +6 +2 +4 +5 +2 +4 +4 +4 +3 +3 +0 +0 +2 +3 +3 +1 +6 +2 +3 +3 +0 +4 +6 +3 +5 +3 +3 +3 +2 +4 +3 +3 +0 +6 +2 +3 +3 +3 +3 +6 +3 +3 +2 +2 +6 +2 +5 +6 +6 +2 +6 +2 +2 +0 +4 +0 +2 +6 +0 +6 +3 +4 +0 +3 +3 +6 +6 +4 +5 +6 +5 +2 +3 +0 +6 +0 +3 +5 +5 +3 +2 +4 +6 +5 +2 +4 +4 +2 +3 +3 +2 +4 +3 +3 +5 +2 +3 +5 +5 +4 +6 +3 +4 +5 +3 +3 +6 +3 +3 +4 +2 +2 +0 +0 +5 +2 +2 +0 +2 +2 +3 +2 +5 +2 +6 +5 +4 +6 +3 +4 +2 +0 +3 +3 +0 +2 +3 +4 +3 +3 +2 +3 +4 +0 +5 +3 +4 +2 +4 +2 +4 +3 +2 +2 +3 +4 +3 +3 +5 +4 +0 +5 +4 +0 +4 +4 +3 +3 +3 +2 +4 +3 +6 +3 +3 +5 +3 +5 +3 +6 +0 +4 +3 +6 +0 +6 +6 +2 +3 +0 +2 +2 +5 +0 +2 +3 +0 +4 +0 +3 +5 +4 +3 +1 +3 +0 +3 +0 +0 +3 +4 +6 +3 +0 +4 +0 +5 +0 +0 +0 +0 +2 +5 +6 +3 +3 +2 +3 +4 +4 +4 +3 +4 +6 +5 +1 +0 +3 +0 +3 +0 +4 +6 +5 +2 +6 +2 +4 +0 +2 +4 +4 +0 +6 +3 +1 +3 +2 +0 +4 +2 +2 +3 +3 +5 +0 +5 +2 +4 +0 +4 +0 +6 +3 +6 +0 +2 +2 +4 +6 +0 +0 +6 +3 +4 +0 +3 +3 +3 +3 +5 +4 +0 +2 +0 +1 +2 +0 +3 +6 +2 +2 +6 +3 +3 +3 +6 +0 +6 +5 +2 +3 +6 +0 +4 +2 +2 +3 +2 +0 +6 +6 +6 +4 +5 +4 +2 +6 +2 +5 +6 +3 +2 +4 +2 +4 +1 +2 +2 +6 +0 +4 +2 +2 +0 +6 +4 +2 +2 +0 +3 +3 +0 +4 +4 +3 +3 +6 +6 +2 +3 +2 +3 +5 +3 +0 +3 +6 +4 +3 +6 +4 +4 +4 +2 +0 +2 +6 +5 +2 +2 +3 +6 +6 +5 +2 +4 +0 +3 +3 +5 +3 +3 +2 +0 +3 +4 +2 +4 +5 +3 +3 +6 +5 +2 +5 +6 +6 +3 +3 +0 +2 +3 +6 +2 +6 +2 +6 +2 +0 +3 +5 +5 +0 +2 +2 +3 +4 +5 +0 +6 +3 +3 +3 +3 +4 +5 +4 +6 +0 +4 +3 +1 +2 +6 +2 +3 +3 +0 +3 +4 +0 +3 +4 +3 +2 +3 +6 +6 +0 +6 +4 +6 +2 +6 +0 +3 +3 +4 +0 +4 +3 +4 +4 +3 +2 +5 +4 +1 +4 +3 +3 +0 +0 +0 +0 +3 +4 +5 +4 +2 +2 +0 +4 +2 +4 +3 +6 +5 +2 +3 +6 +3 +3 +3 +0 +0 +4 +6 +3 +5 +3 +2 +2 +4 +6 +0 +3 +3 +6 +6 +3 +5 +3 +3 +3 +2 +3 +2 +3 +2 +4 +0 +3 +0 +4 +4 +5 +2 +0 +3 +6 +6 +3 +4 +4 +6 +6 +2 +0 +4 +4 +2 +4 +3 +3 +5 +2 +3 +6 +3 +1 +0 +4 +3 +0 +3 +6 +3 +4 +3 +3 +2 +2 +4 +2 +6 +5 +6 +5 +0 +3 +4 +4 +6 +4 +4 +5 +2 +4 +2 +0 +2 +6 +4 +5 +0 +3 +4 +3 +5 +2 +3 +0 +4 +2 +0 +6 +4 +5 +3 +3 +2 +6 +6 +6 +5 +6 +1 +6 +2 +6 +3 +0 +0 +6 +0 +3 +3 +6 +2 +3 +2 +6 +6 +4 +5 +3 +4 +0 +0 +5 +0 +4 +4 +0 +6 +6 +6 +3 +0 +5 +6 +3 +5 +6 +5 +3 +6 +5 +0 +0 +5 +3 +4 +6 +0 +0 +0 +0 +4 +3 +3 +0 +5 +6 +2 +4 +3 +5 +3 +0 +5 +3 +0 +2 +2 +2 +6 +3 +4 +5 +6 +2 +2 +3 +3 +3 +0 +1 +3 +2 +6 +2 +3 +1 +3 +6 +3 +3 +3 +3 +4 +5 +1 +3 +0 +0 +6 +0 +6 +3 +3 +4 +6 +5 +4 +3 +3 +3 +3 +0 +3 +3 +3 +5 +6 +2 +0 +3 +3 +5 +5 +3 +4 +3 +5 +0 +4 +2 +4 +4 +2 +1 +4 +0 +4 +5 +6 +4 +6 +6 +3 +2 +6 +6 +3 +3 +0 +5 +3 +6 +6 +3 +0 +2 +0 +0 +5 +6 +4 +3 +4 +2 +4 +6 +2 +4 +4 +0 +3 +3 +3 +2 +5 +2 +6 +5 +6 +0 +3 +2 +4 +2 +3 +6 +6 +3 +3 +2 +0 +2 +0 +0 +4 +6 +3 +0 +3 +3 +2 +5 +0 +6 +3 +3 +4 +0 +0 +4 +5 +2 +4 +4 +4 +3 +1 +1 +2 +6 +3 +3 +3 +0 +0 +4 +5 +4 +2 +2 +0 +4 +0 +0 +5 +3 +4 +3 +1 +0 +0 +2 +6 +6 +0 +4 +3 +3 +0 +3 +2 +2 +6 +6 +2 +0 +4 +5 +0 +2 +2 +6 +4 +0 +3 +6 +0 +0 +2 +3 +3 +2 +2 +5 +4 +6 +4 +3 +3 +0 +5 +0 +0 +5 +5 +3 +6 +0 +3 +3 +6 +3 +4 +2 +2 +6 +0 +6 +0 +6 +5 +5 +3 +0 +4 +0 +3 +3 +3 +0 +3 +6 +3 +2 +3 +4 +3 +4 +4 +3 +0 +4 +0 +0 +0 +6 +0 +2 +1 +3 +0 +2 +4 +6 +4 +3 +6 +4 +6 +4 +3 +3 +0 +6 +5 +2 +6 +3 +0 +3 +2 +3 +4 +6 +6 +2 +0 +3 +3 +0 +2 +6 +3 +1 +0 +3 +5 +3 +3 +3 +2 +5 +5 +5 +2 +3 +0 +2 +3 +5 +6 +2 +4 +0 +3 +5 +0 +2 +5 +4 +3 +2 +5 +2 +5 +3 +5 +2 +0 +0 +0 +4 +0 +6 +4 +3 +2 +6 +6 +6 +5 +4 +3 +4 +4 +0 +3 +3 +6 +5 +3 +3 +0 +2 +0 +0 +5 +3 +3 +0 +0 +4 +3 +2 +0 +4 +4 +4 +2 +4 +3 +5 +3 +6 +3 +0 +4 +6 +4 +0 +6 +2 +0 +2 +5 +6 +2 +0 +6 +5 +3 +4 +2 +3 +3 +3 +0 +2 +6 +5 +2 +3 +0 +0 +4 +2 +1 +5 +6 +5 +6 +0 +5 +5 +5 +0 +2 +4 +6 +6 +4 +5 +6 +3 +2 +5 +0 +0 +3 +5 +6 +2 +3 +5 +5 +2 +4 +4 +0 +6 +0 +3 +4 +3 +3 +6 +0 +6 +5 +3 +3 +3 +6 +3 +2 +2 +3 +2 +5 +6 +3 +6 +0 +3 +0 +0 +6 +4 +3 +4 +4 +4 +5 +5 +0 +4 +0 +3 +6 +3 +6 +6 +2 +4 +6 +6 +4 +2 +4 +0 +6 +6 +4 +3 +3 +4 +4 +6 +6 +3 +5 +0 +6 +0 +3 +3 +5 +2 +3 +0 +1 +6 +5 +3 +0 +6 +3 +3 +2 +6 +3 +6 +4 +3 +5 +2 +4 +3 +4 +4 +4 +6 +4 +2 +3 +6 +5 +3 +3 +2 +3 +3 +6 +6 +2 +3 +3 +2 +2 +3 +3 +2 +2 +3 +0 +0 +0 +2 +5 +2 +2 +3 +0 +6 +4 +4 +5 +2 +2 +2 +3 +0 +6 +0 +2 +0 +3 +3 +0 +2 +3 +2 +2 +4 +4 +6 +3 +3 +6 +5 +3 +2 +6 +0 +4 +5 +5 +6 +6 +4 +0 +4 +0 +3 +0 +4 +6 +0 +5 +3 +4 +0 +5 +0 +4 +6 +3 +6 +0 +6 +3 +3 +0 +0 +2 +3 +0 +5 +3 +3 +4 +0 +0 +5 +2 +2 +4 +3 +3 +5 +6 +3 +2 +3 +5 +2 +4 +3 +5 +4 +4 +4 +3 +0 +6 +3 +5 +2 +5 +2 +4 +3 +6 +0 +6 +3 +4 +3 +0 +3 +2 +2 +6 +6 +0 +6 +0 +2 +2 +3 +4 +0 +4 +0 +0 +5 +0 +6 +0 +4 +2 +4 +3 +0 +6 +3 +3 +0 +3 +2 +4 +3 +2 +6 +4 +2 +0 +6 +4 +5 +2 +3 +5 +4 +6 +2 +3 +6 +4 +4 +6 +4 +0 +3 +3 +6 +6 +3 +3 +0 +4 +4 +2 +4 +6 +0 +3 +2 +3 +3 +6 +0 +3 +0 +3 +4 +3 +4 +4 +4 +6 +3 +5 +4 +2 +3 +4 +5 +2 +3 +0 +2 +0 +6 +0 +6 +0 +6 +2 +3 +2 +6 +4 +3 +3 +2 +5 +0 +2 +3 +6 +4 +2 +1 +3 +0 +5 +2 +0 +4 +0 +0 +0 +2 +2 +4 +3 +4 +3 +4 +3 +4 +3 +6 +6 +3 +3 +3 +0 +4 +4 +3 +2 +3 +2 +3 +2 +6 +6 +3 +3 +4 +6 +4 +4 +3 +4 +3 +2 +3 +3 +3 +6 +5 +3 +3 +6 +6 +4 +3 +6 +2 +2 +4 +4 +5 +6 +2 +3 +0 +3 +2 +0 +0 +0 +6 +3 +3 +2 +0 +0 +0 +4 +4 +2 +6 +5 +3 +3 +4 +4 +3 +0 +3 +5 +4 +4 +0 +4 +6 +3 +5 +6 +2 +4 +0 +2 +0 +5 +4 +3 +2 +3 +3 +0 +0 +3 +2 +4 +3 +0 +3 +0 +3 +2 +6 +6 +4 +0 +0 +4 +3 +3 +2 +5 +5 +6 +2 +6 +3 +3 +3 +5 +2 +3 +6 +3 +2 +2 +4 +3 +3 +6 +3 +0 +4 +5 +4 +4 +4 +5 +0 +3 +0 +3 +5 +0 +4 +3 +6 +3 +5 +5 +3 +3 +0 +3 +3 +3 +4 +3 +6 +3 +4 +0 +4 +3 +0 +3 +0 +6 +5 +5 +4 +1 +6 +4 +0 +2 +6 +6 +5 +2 +6 +5 +3 +3 +5 +6 +2 +3 +3 +3 +6 +3 +6 +2 +5 +6 +4 +3 +5 +3 +2 +3 +2 +5 +0 +6 +3 +2 +0 +3 +3 +4 +4 +5 +2 +0 +2 +2 +6 +5 +3 +2 +5 +6 +3 +6 +2 +0 +2 +5 +4 +3 +3 +0 +0 +6 +3 +3 +4 +4 +4 +3 +1 +2 +6 +6 +4 +5 +1 +6 +6 +3 +4 +0 +3 +6 +4 +2 +5 +0 +3 +3 +3 +3 +4 +4 +6 +2 +3 +0 +3 +3 +6 +3 +5 +3 +4 +3 +2 +6 +0 +5 +3 +0 +3 +4 +3 +2 +2 +6 +0 +3 +3 +5 +4 +0 +2 +6 +6 +3 +0 +4 +0 +4 +4 +5 +4 +2 +3 +3 +5 +3 +4 +5 +3 +6 +6 +6 +0 +6 +6 +3 +0 +3 +6 +0 +5 +3 +4 +5 +3 +6 +6 +6 +3 +0 +6 +3 +2 +0 +2 +3 +5 +3 +4 +6 +2 +2 +3 +4 +2 +0 +5 +5 +3 +4 +5 +4 +4 +5 +0 +3 +4 +4 +6 +0 +2 +6 +3 +3 +0 +3 +3 +4 +3 +4 +4 +3 +5 +4 +5 +6 +0 +0 +4 +0 +0 +2 +6 +3 +3 +3 +6 +3 +5 +2 +0 +6 +4 +0 +4 +0 +6 +6 +0 +4 +4 +2 +3 +6 +6 +2 +3 +4 +0 +5 +0 +4 +2 +4 +6 +2 +5 +4 +3 +5 +6 +0 +3 +3 +2 +4 +3 +0 +3 +2 +2 +4 +3 +0 +3 +6 +3 +5 +5 +2 +6 +0 +4 +0 +4 +4 +4 +3 +0 +3 +3 +4 +3 +2 +2 +4 +2 +3 +2 +2 +2 +0 +0 +3 +6 +0 +3 +5 +6 +2 +0 +4 +4 +1 +4 +0 +0 +3 +3 +4 +6 +3 +2 +5 +3 +0 +4 +0 +0 +4 +3 +4 +5 +2 +3 +4 +2 +0 +2 +3 +3 +6 +3 +4 +5 +0 +6 +2 +4 +3 +6 +0 +6 +4 +3 +3 +4 +5 +6 +3 +4 +3 +3 +2 +3 +6 +0 +4 +0 +4 +6 +3 +3 +3 +6 +5 +0 +6 +5 +2 +3 +5 +0 +3 +2 +6 +3 +3 +3 +6 +4 +3 +6 +3 +4 +5 +6 +2 +4 +2 +6 +6 +6 +4 +0 +4 +6 +6 +0 +0 +2 +0 +4 +3 +3 +6 +6 +3 +4 +5 +6 +3 +3 +6 +2 +3 +5 +3 +0 +3 +3 +6 +4 +1 +6 +4 +6 +2 +3 +3 +6 +3 +4 +2 +4 +3 +4 +4 +2 +3 +4 +3 +4 +6 +6 +5 +0 +6 +1 +2 +6 +3 +5 +0 +0 +6 +5 +2 +6 +2 +3 +3 +6 +5 +1 +5 +2 +3 +2 +4 +0 +0 +3 +0 +3 +5 +2 +0 +4 +0 +5 +3 +0 +3 +2 +2 +0 +3 +2 +4 +6 +4 +3 +4 +3 +3 +2 +2 +0 +2 +0 +2 +6 +0 +6 +2 +5 +5 +2 +0 +3 +3 +6 +2 +3 +3 +4 +6 +3 +0 +3 +4 +3 +5 +3 +3 +3 +2 +6 +5 +6 +4 +3 +3 +3 +5 +5 +3 +3 +5 +6 +3 +3 +3 +6 +2 +4 +0 +5 +1 +0 +4 +0 +2 +6 +2 +6 +4 +0 +3 +5 +0 +3 +3 +0 +0 +0 +4 +6 +2 +5 +5 +3 +6 +6 +4 +3 +0 +2 +4 +0 +0 +5 +3 +4 +1 +3 +3 +3 +5 +4 +0 +5 +6 +2 +3 +5 +3 +3 +3 +4 +5 +6 +0 +6 +0 +3 +4 +6 +6 +5 +4 +6 +6 +4 +3 +1 +0 +3 +6 +4 +6 +1 +2 +3 +2 +0 +3 +1 +2 +6 +5 +3 +3 +0 +2 +4 +4 +4 +4 +4 +4 +4 +2 +6 +5 +1 +0 +0 +6 +0 +5 +3 +4 +3 +2 +2 +4 +6 +0 +6 +6 +0 +4 +5 +3 +4 +6 +6 +2 +6 +4 +4 +4 +3 +3 +4 +3 +6 +4 +3 +0 +6 +6 +3 +3 +6 +2 +0 +0 +3 +0 +0 +3 +4 +4 +3 +4 +3 +4 +3 +6 +2 +2 +3 +6 +2 +3 +4 +3 +6 +2 +2 +6 +3 +6 +6 +3 +5 +5 +6 +0 +1 +2 +4 +3 +1 +2 +3 +3 +5 +4 +4 +3 +3 +5 +0 +6 +0 +0 +6 +4 +3 +5 +5 +3 +2 +5 +3 +4 +6 +6 +6 +0 +0 +3 +6 +6 +3 +3 +4 +4 +3 +4 +5 +0 +6 +3 +6 +0 +6 +3 +3 +3 +2 +6 +0 +3 +6 +6 +3 +6 +2 +3 +4 +2 +3 +5 +4 +5 +4 +4 +3 +5 +3 +5 +3 +3 +6 +6 +5 +6 +3 +2 +3 +6 +1 +3 +6 +6 +2 +3 +4 +5 +2 +3 +4 +3 +5 +0 +3 +5 +6 +6 +4 +4 +4 +3 +3 +2 +5 +4 +0 +5 +6 +5 +3 +3 +3 +2 +3 +6 +0 +6 +6 +1 +0 +3 +0 +6 +5 +6 +2 +2 +3 +3 +5 +6 +3 +0 +6 +4 +4 +3 +3 +0 +0 +1 +4 +3 +2 +4 +6 +2 +3 +3 +3 +2 +6 +5 +4 +3 +3 +6 +4 +0 +0 +4 +4 +3 +0 +0 +5 +5 +3 +4 +3 +3 +2 +5 +3 +6 +3 +2 +6 +6 +3 +5 +2 +2 +3 +3 +4 +4 +2 +4 +5 +6 +1 +4 +6 +6 +3 +4 +2 +0 +3 +5 +5 +3 +6 +2 +2 +6 +6 +3 +2 +3 +2 +0 +3 +3 +3 +3 +3 +0 +3 +2 +4 +4 +2 +3 +1 +3 +5 +3 +5 +3 +6 +5 +5 +5 +2 +5 +4 +6 +3 +4 +6 +6 +3 +6 +6 +6 +4 +6 +6 +5 +5 +6 +3 +4 +5 +0 +3 +4 +4 +4 +4 +6 +4 +3 +3 +3 +6 +5 +3 +2 +0 +6 +6 +0 +3 +2 +6 +3 +2 +4 +4 +2 +2 +3 +4 +6 +6 +0 +3 +4 +4 +6 +5 +5 +3 +3 +5 +4 +5 +2 +3 +2 +2 +3 +4 +3 +3 +6 +3 +0 +6 +5 +1 +3 +0 +3 +3 +4 +5 +4 +4 +6 +3 +6 +0 +3 +3 +3 +5 +3 +3 +5 +2 +6 +3 +4 +2 +6 +6 +3 +3 +2 +2 +5 +6 +3 +0 +4 +6 +5 +3 +0 +2 +0 +3 +3 +2 +3 +3 +6 +0 +6 +3 +3 +2 +6 +3 +4 +2 +2 +3 +2 +3 +3 +0 +4 +6 +0 +3 +6 +5 +4 +2 +3 +0 +0 +6 +5 +4 +5 +0 +4 +2 +2 +3 +4 +3 +5 +5 +0 +4 +3 +3 +5 +4 +3 +2 +0 +4 +4 +4 +4 +1 +4 +4 +0 +5 +3 +0 +2 +4 +3 +1 +6 +2 +6 +4 +2 +3 +4 +2 +6 +6 +3 +4 +4 +0 +5 +4 +3 +0 +3 +3 +6 +6 +2 +6 +6 +3 +4 +5 +2 +3 +2 +5 +2 +5 +3 +3 +6 +5 +0 +4 +3 +3 +3 +3 +3 +2 +5 +6 +1 +0 +3 +5 +2 +4 +3 +0 +6 +4 +4 +4 +2 +4 +2 +3 +4 +3 +4 +0 +0 +6 +6 +5 +6 +0 +0 +2 +3 +5 +3 +3 +6 +3 +3 +5 +2 +0 +3 +6 +2 +4 +5 +2 +3 +4 +3 +4 +6 +0 +6 +3 +0 +6 +2 +5 +4 +4 +2 +4 +5 +3 +4 +5 +2 +5 +2 +0 +2 +2 +2 +4 +6 +3 +0 +0 +3 +2 +4 +4 +5 +3 +4 +5 +4 +4 +0 +2 +6 +2 +5 +1 +2 +0 +0 +3 +6 +4 +6 +0 +5 +1 +6 +3 +4 +6 +3 +3 +0 +2 +4 +2 +6 +6 +4 +3 +3 +3 +3 +4 +4 +0 +3 +3 +2 +4 +3 +4 +5 +5 +6 +5 +6 +6 +3 +3 +2 +6 +4 +3 +6 +3 +2 +3 +5 +3 +2 +2 +0 +3 +6 +4 +2 +5 +4 +0 +0 +2 +2 +3 +0 +2 +5 +3 +6 +6 +0 +3 +3 +6 +6 +5 +0 +2 +4 +0 +4 +3 +5 +4 +3 +6 +3 +3 +3 +2 +2 +6 +6 +5 +3 +5 +3 +4 +4 +2 +3 +6 +0 +3 +5 +2 +0 +5 +6 +4 +6 +3 +4 +6 +5 +3 +3 +5 +2 +3 +2 +4 +6 +6 +0 +3 +3 +3 +0 +2 +6 +6 +3 +3 +5 +6 +3 +2 +6 +3 +2 +6 +2 +3 +5 +0 +3 +0 +0 +0 +0 +4 +6 +3 +2 +0 +2 +6 +3 +2 +0 +2 +0 +0 +6 +3 +5 +3 +3 +0 +4 +2 +4 +0 +3 +4 +4 +3 +4 +6 +4 +4 +3 +0 +5 +6 +3 +4 +2 +3 +6 +0 +4 +0 +3 +3 +2 +3 +4 +3 +6 +2 +6 +3 +3 +3 +0 +4 +3 +0 +6 +5 +5 +6 +4 +5 +4 +2 +2 +3 +4 +2 +3 +1 +4 +6 +1 +2 +6 +3 +0 +3 +5 +2 +2 +2 +4 +3 +3 +6 +4 +5 +3 +3 +6 +2 +0 +3 +6 +6 +4 +3 +6 +3 +0 +3 +0 +6 +3 +0 +0 +0 +4 +0 +3 +3 +0 +3 +1 +3 +4 +2 +3 +2 +5 +0 +3 +5 +0 +2 +2 +1 +4 +3 +5 +2 +3 +5 +6 +6 +4 +2 +3 +4 +5 +5 +5 +3 +3 +6 +3 +4 +6 +4 +4 +4 +5 +4 +5 +6 +4 +5 +3 +4 +5 +0 +0 +6 +0 +0 +3 +3 +0 +6 +2 +2 +2 +4 +0 +3 +6 +3 +6 +2 +6 +5 +3 +0 +0 +6 +0 +3 +5 +6 +4 +6 +6 +0 +4 +3 +4 +2 +0 +6 +5 +2 +3 +5 +3 +6 +2 +6 +6 +2 +2 +3 +2 +3 +3 +0 +3 +2 +6 +2 +6 +5 +6 +3 +2 +2 +3 +3 +3 +4 +5 +3 +3 +6 +5 +3 +4 +0 +2 +6 +6 +6 +2 +0 +6 +5 +0 +3 +5 +0 +3 +0 +5 +4 +0 +3 +6 +2 +6 +6 +3 +4 +2 +2 +4 +5 +5 +0 +4 +4 +1 +0 +4 +2 +4 +3 +3 +4 +0 +6 +4 +0 +0 +0 +3 +3 +6 +3 +4 +4 +5 +3 +0 +4 +2 +5 +3 +5 +2 +6 +5 +5 +0 +3 +3 +6 +6 +3 +0 +0 +3 +3 +3 +5 +6 +3 +5 +4 +3 +5 +2 +5 +0 +4 +3 +0 +0 +2 +2 +3 +4 +4 +3 +5 +6 +3 +2 +4 +3 +3 +2 +3 +4 +0 +2 +4 +6 +4 +4 +5 +3 +5 +2 +5 +3 +5 +5 +6 +6 +0 +3 +6 +5 +0 +2 +2 +2 +4 +4 +6 +6 +4 +3 +3 +4 +0 +2 +6 +6 +0 +2 +3 +5 +6 +0 +3 +2 +0 +4 +6 +3 +6 +0 +3 +2 +4 +6 +4 +2 +3 +4 +2 +4 +2 +0 +3 +4 +0 +3 +6 +5 +6 +0 +2 +3 +3 +0 +4 +4 +3 +5 +3 +4 +2 +3 +4 +4 +2 +6 +0 +0 +6 +0 +2 +0 +0 +2 +5 +5 +6 +5 +4 +6 +3 +4 +6 +3 +0 +4 +3 +6 +3 +3 +3 +6 +3 +5 +4 +6 +2 +0 +0 +3 +3 +3 +0 +4 +2 +2 +5 +6 +0 +5 +0 +3 +2 +3 +0 +3 +3 +2 +3 +1 +6 +2 +3 +3 +6 +2 +5 +4 +3 +6 +3 +3 +5 +4 +0 +3 +3 +4 +0 +6 +2 +6 +2 +5 +5 +4 +3 +4 +3 +4 +4 +5 +3 +6 +5 +3 +5 +5 +3 +2 +4 +4 +6 +0 +0 +3 +0 +4 +3 +6 +6 +0 +6 +6 +0 +4 +0 +5 +6 +0 +3 +3 +5 +3 +0 +4 +0 +6 +3 +2 +1 +4 +2 +6 +0 +2 +3 +3 +6 +0 +6 +4 +6 +3 +4 +3 +5 +0 +6 +3 +4 +3 +3 +6 +6 +3 +6 +2 +4 +0 +5 +3 +6 +0 +4 +6 +3 +1 +3 +2 +2 +3 +3 +2 +3 +4 +5 +2 +3 +3 +3 +3 +5 +6 +5 +3 +4 +2 +3 +0 +3 +5 +4 +2 +3 +3 +5 +6 +4 +3 +6 +6 +2 +4 +4 +6 +3 +2 +6 +4 +3 +6 +2 +3 +0 +6 +6 +3 +4 +4 +0 +3 +6 +2 +3 +4 +0 +0 +2 +0 +5 +6 +3 +4 +3 +3 +4 +4 +0 +4 +3 +4 +5 +0 +3 +3 +3 +0 +3 +3 +6 +5 +0 +0 +6 +4 +3 +6 +5 +3 +2 +6 +6 +2 +0 +4 +3 +4 +3 +2 +4 +2 +3 +0 +6 +6 +6 +3 +3 +4 +6 +5 +4 +3 +3 +5 +5 +3 +2 +5 +0 +3 +2 +3 +6 +2 +4 +5 +5 +4 +6 +4 +5 +2 +3 +5 +3 +4 +5 +5 +0 +5 +6 +0 +0 +0 +2 +0 +3 +3 +6 +4 +3 +2 +5 +5 +0 +3 +3 +6 +2 +6 +3 +6 +3 +5 +6 +3 +3 +0 +0 +5 +4 +2 +6 +6 +6 +6 +2 +3 +3 +5 +4 +6 +5 +3 +4 +4 +0 +3 +5 +6 +3 +2 +0 +1 +1 +6 +3 +3 +4 +4 +4 +2 +3 +3 +3 +4 +4 +3 +6 +3 +3 +3 +3 +5 +5 +5 +4 +5 +0 +6 +3 +3 +6 +4 +2 +2 +6 +3 +0 +0 +2 +3 +5 +2 +0 +2 +6 +0 +4 +5 +3 +6 +5 +0 +3 +3 +6 +6 +4 +0 +6 +4 +3 +4 +3 +6 +2 +4 +3 +3 +4 +4 +2 +4 +6 +3 +4 +6 +0 +6 +2 +2 +3 +6 +0 +4 +0 +6 +5 +0 +0 +6 +0 +0 +3 +3 +4 +5 +5 +3 +4 +0 +3 +5 +2 +3 +0 +2 +3 +6 +3 +0 +4 +2 +6 +3 +4 +2 +5 +3 +4 +4 +0 +3 +3 +4 +5 +4 +0 +3 +4 +5 +6 +4 +5 +6 +2 +2 +6 +5 +2 +3 +3 +3 +3 +2 +2 +4 +0 +6 +2 +5 +0 +2 +0 +3 +5 +0 +6 +5 +3 +1 +2 +3 +4 +0 +6 +4 +5 +3 +6 +3 +0 +3 +3 +4 +3 +0 +5 +2 +2 +5 +0 +3 +5 +1 +3 +2 +3 +2 +0 +4 +6 +3 +0 +3 +2 +1 +3 +3 +3 +2 +4 +0 +3 +6 +3 +0 +4 +3 +5 +2 +5 +4 +5 +6 +4 +0 +6 +6 +0 +3 +2 +5 +5 +3 +6 +0 +4 +3 +3 +5 +6 +5 +2 +2 +2 +3 +4 +6 +3 +5 +5 +5 +6 +3 +6 +4 +4 +1 +3 +0 +3 +0 +0 +0 +6 +3 +3 +4 +1 +4 +4 +5 +2 +4 +3 +2 +6 +6 +3 +2 +4 +3 +6 +3 +6 +2 +2 +0 +3 +2 +6 +3 +0 +6 +2 +4 +6 +3 +3 +4 +6 +6 +3 +2 +4 +4 +2 +2 +5 +4 +4 +3 +0 +6 +6 +6 +5 +0 +3 +6 +0 +3 +2 +4 +2 +6 +2 +3 +4 +5 +6 +2 +4 +1 +0 +4 +0 +4 +3 +3 +3 +6 +3 +2 +2 +2 +4 +5 +1 +3 +6 +0 +6 +3 +1 +4 +0 +5 +4 +4 +4 +4 +4 +6 +6 +6 +0 +3 +0 +5 +5 +0 +3 +3 +6 +4 +3 +3 +2 +6 +4 +6 +0 +6 +3 +3 +3 +5 +1 +2 +6 +6 +3 +5 +2 +0 +5 +6 +6 +4 +5 +6 +3 +4 +4 +1 +6 +5 +3 +4 +5 +6 +6 +5 +3 +5 +4 +6 +4 +4 +3 +6 +2 +5 +3 +0 +4 +2 +3 +0 +3 +4 +5 +2 +2 +3 +4 +3 +4 +3 +1 +6 +5 +0 +0 +5 +4 +2 +3 +0 +3 +6 +2 +0 +0 +2 +5 +5 +3 +6 +6 +3 +6 +2 +2 +3 +2 +2 +2 +6 +3 +2 +4 +3 +4 +3 +5 +6 +4 +5 +2 +3 +4 +6 +5 +5 +4 +2 +3 +5 +2 +3 +4 +5 +6 +5 +3 +3 +6 +6 +6 +4 +4 +4 +6 +0 +4 +2 +0 +4 +0 +0 +0 +5 +3 +4 +3 +3 +4 +3 +4 +0 +3 +5 +3 +3 +3 +3 +3 +3 +6 +3 +3 +6 +4 +2 +3 +0 +4 +0 +2 +4 +4 +5 +6 +6 +4 +2 +3 +6 +3 +6 +4 +0 +3 +3 +2 +4 +5 +4 +6 +4 +5 +5 +5 +0 +3 +4 +3 +4 +6 +3 +4 +6 +4 +6 +5 +4 +6 +3 +5 +6 +2 +0 +5 +4 +2 +5 +6 +4 +2 +3 +4 +4 +6 +6 +5 +4 +5 +5 +4 +2 +0 +4 +2 +0 +5 +3 +5 +6 +3 +3 +6 +0 +5 +5 +3 +6 +2 +0 +4 +4 +6 +3 +0 +4 +2 +6 +5 +4 +3 +4 +5 +3 +2 +0 +3 +5 +5 +2 +4 +4 +2 +6 +1 +3 +4 +3 +0 +3 +3 +4 +6 +3 +0 +5 +4 +0 +2 +5 +4 +0 +4 +2 +6 +2 +2 +0 +0 +3 +3 +0 +3 +5 +0 +6 +5 +6 +0 +4 +6 +2 +4 +4 +6 +0 +3 +5 +4 +6 +0 +2 +4 +4 +6 +5 +5 +2 +3 +3 +3 +3 +0 +3 +3 +6 +4 +1 +3 +3 +0 +6 +6 +5 +6 +5 +2 +5 +5 +2 +5 +5 +3 +3 +5 +6 +6 +3 +3 +3 +4 +3 +0 +6 +5 +0 +6 +0 +4 +3 +4 +3 +0 +3 +0 +4 +2 +6 +5 +3 +6 +5 +2 +2 +4 +2 +6 +3 +6 +4 +2 +3 +6 +4 +0 +4 +0 +3 +3 +6 +2 +4 +0 +0 +2 +6 +0 +3 +4 +4 +3 +2 +4 +3 +3 +1 +4 +0 +6 +2 +3 +3 +0 +5 +0 +4 +3 +3 +0 +3 +3 +0 +0 +3 +2 +3 +0 +0 +4 +3 +2 +4 +3 +6 +3 +0 +6 +2 +6 +5 +4 +3 +4 +0 +3 +6 +4 +4 +6 +6 +4 +0 +5 +3 +0 +6 +3 +3 +4 +0 +4 +2 +0 +3 +4 +3 +2 +4 +4 +4 +0 +4 +5 +4 +6 +2 +6 +4 +0 +0 +4 +0 +0 +2 +6 +4 +2 +5 +3 +4 +5 +2 +3 +3 +0 +4 +0 +4 +3 +3 +0 +6 +3 +3 +6 +2 +6 +6 +3 +2 +3 +3 +3 +2 +5 +2 +2 +2 +0 +5 +5 +5 +2 +2 +0 +6 +2 +3 +4 +1 +4 +5 +4 +3 +6 +2 +5 +6 +0 +2 +0 +6 +0 +0 +4 +6 +6 +6 +0 +3 +5 +6 +4 +3 +2 +3 +3 +0 +2 +2 +3 +6 +4 +6 +3 +4 +6 +6 +2 +5 +4 +0 +3 +3 +3 +2 +3 +4 +5 +2 +4 +5 +3 +2 +0 +6 +2 +5 +6 +3 +6 +6 +0 +3 +2 +6 +6 +3 +3 +4 +6 +4 +5 +3 +3 +6 +3 +4 +5 +0 +3 +6 +6 +0 +3 +4 +2 +6 +3 +6 +5 +4 +4 +6 +6 +4 +2 +2 +4 +3 +3 +5 +6 +3 +0 +0 +6 +3 +6 +2 +6 +6 +3 +4 +2 +6 +5 +2 +3 +3 +0 +6 +6 +3 +4 +3 +6 +4 +4 +4 +6 +4 +4 +3 +0 +6 +6 +2 +3 +5 +4 +3 +3 +0 +5 +3 +6 +4 +2 +3 +3 +3 +5 +3 +0 +5 +5 +5 +5 +6 +6 +6 +5 +3 +2 +4 +3 +4 +0 +3 +5 +2 +3 +0 +4 +4 +5 +3 +0 +3 +5 +2 +0 +2 +3 +3 +6 +6 +5 +4 +4 +2 +0 +0 +0 +0 +6 +5 +2 +2 +4 +3 +0 +3 +5 +6 +6 +3 +5 +3 +6 +3 +0 +3 +6 +2 +0 +5 +4 +3 +3 +6 +3 +4 +3 +3 +6 +4 +5 +2 +0 +4 +2 +5 +5 +3 +2 +4 +2 +3 +4 +5 +4 +6 +3 +3 +4 +3 +3 +0 +6 +6 +3 +3 +5 +6 +6 +6 +6 +5 +5 +3 +5 +2 +3 +6 +6 +5 +4 +6 +4 +3 +3 +3 +6 +4 +2 +6 +4 +3 +4 +4 +6 +3 +0 +5 +2 +3 +3 +3 +2 +3 +6 +3 +5 +6 +6 +4 +4 +6 +2 +3 +6 +6 +0 +2 +6 +6 +3 +1 +4 +6 +3 +4 +6 +2 +2 +6 +3 +2 +0 +3 +4 +6 +4 +6 +0 +5 +3 +6 +4 +3 +0 +2 +6 +0 +2 +5 +2 +0 +3 +2 +3 +4 +6 +5 +6 +4 +6 +4 +3 +3 +4 +5 +3 +6 +6 +0 +3 +5 +5 +0 +3 +6 +0 +3 +3 +6 +4 +4 +6 +3 +3 +2 +0 +6 +0 +6 +0 +3 +3 +6 +5 +4 +5 +5 +6 +0 +4 +3 +3 +4 +2 +3 +4 +4 +2 +6 +6 +6 +5 +3 +3 +4 +0 +3 +5 +4 +0 +4 +2 +4 +0 +6 +6 +3 +3 +3 +0 +4 +5 +6 +2 +4 +6 +1 +3 +4 +1 +3 +0 +4 +3 +3 +4 +2 +3 +3 +5 +2 +4 +5 +3 +4 +4 +4 +6 +3 +4 +0 +5 +4 +0 +6 +0 +6 +3 +3 +4 +4 +0 +0 +6 +3 +2 +3 +6 +4 +0 +3 +2 +4 +6 +2 +2 +4 +0 +5 +6 +5 +6 +4 +4 +3 +3 +5 +0 +4 +2 +0 +3 +5 +6 +3 +6 +4 +4 +2 +3 +6 +0 +3 +3 +3 +5 +6 +2 +3 +3 +0 +3 +0 +5 +3 +4 +4 +2 +3 +2 +2 +3 +2 +6 +3 +6 +6 +2 +5 +2 +2 +5 +2 +6 +2 +4 +3 +2 +0 +6 +6 +4 +3 +3 +5 +4 +3 +6 +3 +5 +3 +6 +5 +6 +6 +2 +6 +0 +4 +0 +0 +5 +6 +6 +2 +6 +6 +4 +3 +3 +3 +5 +0 +3 +3 +3 +3 +3 +3 +2 +3 +5 +2 +3 +0 +6 +3 +6 +2 +6 +3 +3 +6 +3 +5 +6 +6 +2 +0 +6 +0 +5 +3 +2 +6 +4 +2 +6 +3 +2 +2 +2 +2 +2 +4 +3 +3 +4 +6 +2 +2 +3 +3 +0 +2 +4 +4 +5 +0 +0 +3 +3 +0 +0 +0 +4 +6 +5 +2 +4 +5 +4 +6 +4 +3 +2 +3 +3 +5 +3 +0 +6 +5 +2 +6 +5 +0 +4 +3 +5 +3 +3 +5 +3 +3 +5 +2 +6 +2 +4 +0 +3 +6 +4 +6 +6 +3 +2 +3 +3 +6 +3 +3 +5 +0 +0 +0 +3 +0 +6 +3 +5 +6 +3 +2 +3 +4 +0 +3 +2 +3 +2 +3 +3 +3 +1 +4 +4 +3 +3 +6 +5 +2 +2 +0 +2 +6 +6 +2 +6 +2 +0 +3 +3 +2 +6 +5 +6 +0 +5 +2 +6 +3 +5 +4 +3 +6 +6 +6 +0 +4 +6 +6 +3 +3 +5 +4 +6 +3 +6 +3 +5 +5 +4 +6 +3 +4 +2 +3 +6 +3 +6 +6 +2 +2 +0 +6 +3 +3 +3 +6 +5 +3 +2 +4 +2 +3 +4 +5 +6 +2 +3 +5 +6 +4 +4 +0 +5 +6 +0 +4 +6 +3 +3 +3 +3 +5 +2 +0 +6 +3 +4 +3 +1 +6 +0 +2 +2 +5 +4 +4 +5 +3 +3 +3 +3 +3 +4 +5 +4 +4 +1 +2 +6 +6 +4 +0 +3 +2 +0 +2 +5 +3 +1 +4 +5 +6 +0 +6 +0 +5 +2 +5 +3 +0 +4 +3 +6 +3 +0 +3 +3 +6 +6 +3 +3 +4 +0 +2 +2 +4 +5 +3 +4 +2 +2 +6 +6 +0 +4 +5 +6 +2 +6 +0 +4 +0 +2 +6 +6 +6 +3 +5 +4 +6 +2 +6 +2 +2 +2 +3 +4 +6 +2 +4 +0 +6 +4 +6 +6 +4 +6 +4 +2 +6 +2 +2 +0 +5 +3 +0 +3 +2 +6 +3 +0 +4 +1 +3 +4 +2 +3 +3 +0 +6 +3 +0 +6 +3 +3 +6 +3 +3 +5 +5 +2 +2 +5 +6 +4 +2 +4 +6 +3 +0 +6 +3 +4 +5 +4 +6 +3 +6 +6 +2 +2 +3 +6 +2 +3 +5 +4 +3 +0 +6 +4 +2 +0 +3 +5 +4 +6 +6 +3 +0 +3 +6 +4 +3 +2 +2 +3 +3 +3 +4 +2 +5 +2 +6 +0 +3 +6 +2 +6 +0 +0 +3 +6 +5 +3 +3 +3 +4 +4 +3 +2 +5 +0 +5 +0 +5 +0 +2 +5 +3 +4 +3 +0 +3 +3 +0 +4 +3 +6 +6 +2 +5 +3 +6 +5 +3 +2 +2 +4 +3 +2 +6 +3 +3 +4 +2 +0 +2 +3 +4 +6 +3 +6 +2 +2 +6 +2 +6 +2 +4 +0 +5 +3 +5 +0 +3 +3 +0 +3 +5 +6 +5 +3 +3 +2 +2 +3 +0 +4 +2 +2 +6 +2 +6 +4 +4 +0 +5 +2 +0 +6 +3 +4 +0 +3 +6 +4 +3 +5 +0 +3 +0 +3 +2 +3 +2 +2 +6 +0 +4 +3 +4 +2 +2 +3 +4 +3 +4 +5 +3 +3 +5 +0 +4 +3 +3 +5 +3 +6 +3 +0 +3 +2 +2 +3 +6 +3 +4 +3 +6 +6 +6 +6 +4 +0 +2 +3 +3 +2 +0 +2 +5 +6 +0 +6 +6 +4 +3 +0 +5 +0 +3 +2 +3 +3 +3 +3 +5 +4 +5 +3 +6 +6 +0 +3 +4 +6 +0 +4 +5 +3 +4 +2 +3 +4 +6 +3 +4 +2 +4 +0 +4 +4 +3 +4 +3 +2 +3 +2 +5 +6 +6 +2 +3 +2 +3 +0 +5 +3 +5 +3 +6 +5 +4 +0 +4 +0 +0 +3 +3 +6 +0 +6 +6 +2 +2 +4 +4 +0 +6 +6 +4 +6 +4 +4 +3 +0 +3 +6 +6 +3 +0 +3 +4 +3 +0 +2 +4 +6 +6 +6 +2 +4 +6 +2 +3 +0 +3 +3 +5 +3 +3 +3 +0 +0 +4 +3 +2 +4 +4 +3 +0 +6 +2 +0 +3 +2 +6 +3 +2 +6 +4 +2 +4 +4 +3 +4 +4 +5 +2 +2 +3 +2 +0 +6 +6 +2 +3 +1 +2 +2 +2 +2 +4 +3 +6 +3 +2 +6 +6 +2 +5 +5 +4 +0 +3 +2 +0 +2 +6 +5 +2 +6 +5 +6 +0 +0 +4 +6 +0 +3 +5 +5 +4 +2 +4 +5 +0 +5 +4 +3 +5 +4 +4 +6 +1 +5 +5 +5 +3 +1 +6 +3 +5 +6 +3 +3 +5 +6 +0 +4 +5 +3 +2 +0 +5 +3 +6 +1 +3 +3 +0 +4 +3 +6 +3 +6 +5 +6 +2 +4 +6 +4 +1 +3 +4 +1 +6 +3 +4 +0 +6 +3 +3 +6 +4 +3 +4 +6 +6 +4 +3 +5 +2 +6 +4 +4 +6 +3 +5 +6 +3 +2 +3 +6 +3 +2 +0 +6 +6 +5 +3 +4 +6 +5 +4 +6 +6 +5 +2 +6 +6 +5 +4 +0 +0 +5 +4 +6 +6 +6 +0 +6 +6 +6 +4 +4 +2 +3 +4 +6 +0 +2 +6 +3 +3 +0 +2 +0 +5 +2 +3 +2 +2 +4 +0 +4 +3 +0 +6 +6 +3 +3 +3 +3 +0 +2 +4 +0 +6 +5 +5 +0 +4 +3 +3 +3 +3 +3 +3 +3 +5 +3 +3 +0 +0 +3 +0 +3 +0 +2 +3 +4 +3 +2 +2 +4 +6 +4 +6 +6 +6 +3 +6 +4 +2 +6 +4 +4 +0 +0 +3 +6 +2 +3 +0 +3 +2 +5 +4 +6 +5 +0 +3 +2 +3 +5 +3 +4 +6 +4 +4 +0 +6 +2 +3 +0 +3 +0 +3 +3 +3 +0 +4 +6 +4 +0 +6 +3 +4 +3 +1 +0 +2 +5 +2 +0 +4 +2 +4 +5 +0 +6 +2 +4 +2 +3 +0 +5 +4 +3 +3 +3 +1 +5 +0 +4 +3 +6 +0 +4 +2 +3 +3 +3 +0 +6 +4 +2 +2 +4 +6 +5 +6 +6 +3 +6 +5 +3 +3 +3 +2 +6 +6 +6 +3 +2 +0 +3 +3 +2 +4 +3 +3 +3 +6 +5 +6 +5 +4 +4 +3 +3 +4 +5 +2 +3 +4 +4 +6 +3 +3 +2 +4 +2 +4 +0 +5 +2 +5 +4 +0 +1 +4 +3 +0 +3 +3 +4 +6 +6 +2 +2 +4 +4 +6 +5 +1 +6 +2 +3 +0 +4 +4 +2 +3 +4 +4 +0 +6 +4 +6 +6 +6 +4 +4 +2 +0 +6 +0 +2 +0 +4 +6 +3 +2 +4 +5 +4 +0 +3 +2 +0 +3 +4 +0 +0 +5 +6 +5 +3 +3 +3 +4 +4 +0 +5 +3 +0 +6 +2 +6 +3 +3 +4 +5 +3 +1 +3 +3 +3 +5 +3 +3 +4 +5 +6 +4 +6 +3 +3 +2 +4 +3 +5 +2 +6 +6 +4 +2 +6 +4 +0 +3 +3 +4 +0 +2 +3 +3 +3 +6 +3 +3 +3 +2 +3 +2 +5 +0 +4 +6 +4 +2 +2 +0 +6 +5 +4 +2 +5 +3 +6 +2 +3 +3 +6 +4 +5 +6 +6 +4 +5 +3 +4 +2 +6 +4 +4 +1 +4 +0 +6 +4 +4 +2 +0 +6 +3 +5 +0 +3 +5 +4 +3 +4 +2 +0 +4 +6 +3 +6 +3 +0 +4 +4 +6 +3 +5 +4 +4 +3 +0 +3 +6 +3 +5 +0 +3 +5 +1 +6 +6 +3 +6 +4 +3 +4 +5 +0 +2 +6 +5 +4 +3 +2 +5 +6 +4 +5 +6 +0 +2 +4 +5 +3 +4 +6 +4 +0 +2 +5 +6 +2 +3 +5 +4 +2 +3 +0 +6 +4 +2 +3 +3 +3 +5 +2 +3 +4 +5 +2 +2 +2 +2 +6 +3 +5 +2 +5 +5 +0 +4 +2 +3 +2 +0 +3 +2 +3 +4 +2 +3 +3 +3 +6 +3 +6 +4 +4 +3 +4 +5 +6 +4 +0 +3 +6 +2 +3 +6 +3 +4 +6 +3 +0 +4 +0 +4 +0 +0 +0 +2 +3 +3 +4 +4 +5 +3 +3 +0 +0 +2 +5 +4 +4 +3 +2 +2 +3 +3 +4 +0 +3 +0 +3 +6 +2 +0 +3 +6 +3 +4 +0 +3 +3 +5 +3 +5 +4 +3 +2 +3 +3 +3 +5 +3 +4 +3 +3 +4 +3 +6 +4 +6 +4 +5 +3 +5 +6 +3 +6 +3 +0 +4 +2 +6 +3 +4 +3 +0 +0 +0 +5 +4 +4 +0 +2 +2 +4 +6 +4 +6 +2 +5 +3 +0 +4 +3 +0 +0 +3 +6 +0 +6 +0 +4 +4 +3 +3 +3 +3 +6 +6 +0 +3 +6 +0 +4 +3 +6 +4 +3 +2 +0 +3 +5 +0 +3 +6 +0 +4 +0 +0 +3 +3 +3 +3 +0 +4 +3 +4 +2 +2 +4 +3 +3 +4 +3 +3 +3 +0 +6 +5 +3 +0 +0 +3 +5 +5 +6 +5 +0 +5 +3 +3 +5 +0 +5 +2 +5 +3 +4 +3 +2 +4 +4 +2 +5 +6 +3 +3 +2 +0 +3 +0 +1 +5 +5 +6 +0 +4 +0 +5 +5 +3 +0 +3 +6 +6 +3 +5 +4 +6 +5 +3 +0 +2 +0 +3 +3 +2 +2 +6 +3 +4 +1 +2 +4 +3 +3 +0 +2 +0 +5 +2 +4 +3 +4 +4 +4 +3 +3 +5 +2 +5 +2 +2 +5 +6 +0 +5 +4 +3 +6 +0 +6 +3 +4 +4 +6 +3 +3 +4 +3 +4 +0 +5 +3 +2 +2 +2 +2 +3 +3 +3 +2 +5 +3 +3 +2 +6 +4 +3 +4 +2 +3 +3 +5 +3 +2 +3 +3 +4 +4 +3 +6 +4 +2 +4 +3 +3 +4 +2 +2 +3 +4 +0 +4 +4 +4 +3 +4 +6 +0 +4 +6 +4 +5 +2 +2 +6 +5 +3 +3 +3 +3 +2 +3 +6 +5 +0 +6 +2 +4 +3 +2 +3 +6 +3 +6 +1 +4 +1 +2 +3 +6 +4 +4 +5 +3 +2 +5 +4 +5 +3 +2 +4 +0 +5 +4 +3 +5 +4 +5 +3 +5 +3 +2 +6 +3 +4 +3 +6 +3 +4 +0 +0 +2 +3 +4 +5 +5 +4 +6 +5 +2 +0 +6 +5 +2 +6 +4 +3 +6 +4 +6 +2 +3 +1 +6 +4 +5 +0 +1 +6 +2 +3 +4 +0 +4 +5 +5 +3 +4 +0 +2 +3 +5 +0 +2 +3 +3 +3 +4 +0 +6 +3 +3 +4 +3 +6 +4 +5 +2 +3 +3 +3 +4 +2 +0 +0 +4 +0 +4 +3 +4 +6 +0 +6 +5 +0 +5 +5 +4 +0 +2 +3 +4 +2 +3 +4 +2 +4 +3 +2 +6 +2 +3 +0 +5 +4 +6 +0 +3 +4 +0 +4 +6 +5 +3 +0 +0 +3 +2 +2 +2 +6 +3 +4 +6 +2 +6 +3 +4 +5 +3 +3 +2 +6 +5 +4 +3 +0 +0 +4 +3 +6 +3 +4 +6 +3 +3 +5 +6 +4 +3 +3 +2 +5 +3 +5 +0 +5 +5 +2 +3 +0 +2 +3 +3 +4 +2 +6 +3 +6 +2 +6 +4 +6 +3 +4 +3 +2 +6 +4 +3 +2 +3 +4 +6 +3 +2 +0 +0 +2 +2 +5 +5 +6 +5 +4 +0 +6 +2 +2 +4 +0 +2 +0 +3 +5 +6 +4 +5 +0 +2 +2 +6 +6 +6 +5 +3 +4 +0 +6 +0 +2 +3 +6 +0 +0 +4 +3 +2 +4 +5 +5 +3 +6 +5 +5 +5 +0 +0 +3 +3 +2 +3 +6 +3 +0 +0 +5 +2 +5 +5 +5 +6 +0 +6 +0 +6 +5 +3 +4 +3 +3 +6 +3 +2 +4 +3 +2 +4 +1 +4 +3 +2 +3 +3 +3 +6 +4 +4 +2 +4 +6 +0 +3 +4 +0 +2 +3 +3 +5 +3 +5 +5 +2 +0 +2 +5 +4 +5 +3 +6 +0 +6 +5 +2 +3 +2 +0 +4 +3 +6 +6 +3 +4 +2 +4 +4 +3 +0 +0 +5 +5 +0 +3 +0 +2 +4 +5 +3 +5 +6 +3 +3 +3 +3 +6 +6 +6 +4 +4 +6 +3 +3 +3 +4 +3 +4 +2 +3 +1 +3 +5 +4 +0 +1 +4 +3 +5 +0 +6 +0 +6 +2 +6 +3 +3 +0 +4 +3 +0 +4 +6 +3 +6 +3 +3 +2 +2 +0 +0 +6 +5 +4 +2 +5 +4 +0 +0 +6 +6 +2 +0 +4 +6 +5 +3 +3 +4 +4 +0 +2 +3 +3 +4 +2 +3 +6 +6 +6 +5 +2 +3 +6 +3 +4 +6 +3 +6 +0 +2 +6 +2 +3 +0 +4 +5 +4 +3 +6 +6 +0 +2 +3 +0 +5 +5 +3 +4 +3 +2 +6 +3 +3 +5 +2 +2 +6 +3 +4 +0 +3 +6 +2 +2 +4 +3 +0 +3 +4 +0 +2 +3 +3 +5 +4 +0 +3 +4 +4 +6 +2 +5 +4 +2 +2 +4 +3 +6 +6 +4 +4 +0 +2 +5 +4 +3 +4 +0 +6 +3 +3 +1 +3 +0 +1 +3 +6 +0 +6 +3 +0 +2 +6 +2 +4 +6 +5 +2 +2 +2 +3 +3 +3 +5 +2 +2 +4 +3 +4 +2 +3 +4 +3 +3 +0 +4 +4 +2 +2 +6 +0 +2 +2 +0 +3 +3 +0 +5 +2 +4 +4 +4 +5 +0 +4 +5 +2 +6 +5 +3 +6 +2 +5 +4 +5 +5 +3 +2 +3 +3 +1 +2 +3 +3 +0 +6 +6 +2 +0 +4 +3 +0 +6 +0 +3 +3 +4 +5 +4 +3 +2 +5 +0 +3 +4 +3 +4 +5 +2 +2 +2 +0 +6 +3 +6 +4 +4 +5 +3 +6 +2 +2 +2 +3 +3 +4 +5 +5 +0 +0 +4 +3 +6 +6 +2 +4 +4 +4 +6 +2 +3 +5 +3 +6 +4 +5 +0 +2 +5 +2 +4 +3 +2 +5 +6 +4 +0 +1 +4 +4 +4 +2 +2 +0 +2 +5 +2 +5 +5 +4 +3 +4 +4 +4 +0 +5 +4 +0 +3 +4 +6 +2 +2 +6 +5 +4 +1 +5 +0 +3 +3 +3 +0 +5 +3 +3 +4 +6 +3 +5 +4 +4 +0 +2 +3 +4 +3 +0 +2 +4 +0 +3 +6 +0 +6 +2 +6 +2 +5 +5 +3 +2 +3 +6 +6 +2 +6 +5 +3 +4 +3 +4 +5 +2 +4 +5 +3 +6 +5 +6 +3 +3 +3 +6 +3 +4 +2 +3 +1 +4 +5 +3 +4 +6 +0 +0 +3 +5 +4 +0 +4 +3 +0 +3 +0 +3 +0 +4 +5 +2 +4 +0 +5 +3 +6 +4 +3 +6 +2 +0 +0 +4 +0 +4 +3 +3 +6 +4 +4 +6 +3 +6 +2 +0 +4 +6 +4 +3 +4 +3 +4 +3 +3 +6 +3 +2 +4 +2 +6 +5 +6 +0 +0 +6 +3 +3 +5 +3 +0 +4 +6 +5 +5 +6 +2 +2 +4 +3 +6 +4 +4 +4 +3 +3 +5 +5 +3 +2 +1 +3 +0 +6 +4 +0 +4 +0 +5 +3 +3 +4 +3 +5 +6 +2 +0 +3 +0 +3 +2 +3 +5 +2 +3 +4 +3 +3 +2 +4 +6 +6 +6 +3 +3 +3 +3 +3 +2 +3 +3 +3 +2 +6 +4 +2 +3 +5 +6 +5 +3 +3 +6 +3 +5 +0 +3 +3 +3 +6 +6 +5 +2 +2 +5 +2 +5 +2 +4 +5 +0 +5 +5 +5 +0 +4 +3 +2 +6 +0 +6 +3 +4 +5 +4 +4 +3 +3 +6 +5 +6 +4 +0 +2 +3 +6 +0 +6 +3 +3 +6 +6 +4 +5 +3 +6 +2 +2 +4 +0 +4 +2 +6 +0 +3 +0 +4 +2 +6 +1 +5 +4 +1 +0 +4 +4 +6 +6 +5 +4 +0 +2 +3 +3 +4 +6 +2 +2 +4 +2 +6 +5 +5 +3 +5 +3 +3 +0 +3 +4 +4 +2 +5 +6 +6 +6 +6 +4 +2 +3 +2 +5 +6 +4 +0 +6 +6 +0 +3 +4 +0 +2 +3 +6 +6 +2 +2 +2 +4 +0 +6 +2 +3 +3 +3 +3 +2 +4 +1 +4 +3 +5 +0 +0 +6 +0 +6 +2 +4 +6 +4 +3 +2 +3 +2 +3 +6 +0 +6 +4 +6 +3 +3 +4 +3 +0 +6 +5 +6 +2 +2 +3 +3 +0 +4 +4 +3 +2 +2 +6 +3 +4 +0 +3 +3 +3 +2 +3 +1 +3 +2 +6 +5 +2 +0 +4 +5 +3 +6 +6 +0 +0 +3 +3 +3 +5 +3 +3 +5 +6 +5 +0 +0 +6 +4 +3 +6 +3 +5 +0 +5 +4 +3 +6 +6 +3 +6 +2 +4 +2 +5 +4 +6 +4 +3 +0 +3 +3 +2 +3 +5 +2 +2 +0 +0 +3 +5 +5 +1 +6 +3 +3 +0 +3 +6 +5 +4 +4 +5 +6 +3 +5 +3 +6 +4 +4 +2 +4 +3 +3 +0 +0 +5 +5 +6 +3 +6 +6 +3 +3 +1 +5 +5 +2 +4 +2 +2 +4 +4 +6 +3 +2 +2 +2 +6 +2 +5 +3 +0 +3 +3 +0 +0 +6 +6 +5 +3 +5 +3 +0 +4 +3 +5 +5 +0 +4 +5 +3 +0 +0 +3 +5 +0 +3 +0 +4 +0 +5 +6 +2 +6 +6 +6 +5 +4 +3 +6 +6 +0 +5 +3 +6 +0 +4 +0 +6 +3 +5 +6 +6 +4 +2 +3 +5 +6 +6 +6 +2 +3 +3 +3 +4 +0 +4 +0 +2 +4 +5 +3 +4 +3 +2 +6 +0 +4 +0 +2 +3 +1 +3 +6 +3 +6 +5 +0 +3 +2 +5 +2 +2 +4 +4 +4 +6 +4 +6 +0 +0 +6 +6 +3 +3 +2 +2 +3 +0 +4 +0 +2 +6 +3 +5 +2 +3 +0 +6 +2 +0 +3 +6 +3 +4 +0 +5 +6 +5 +6 +6 +0 +5 +3 +6 +3 +3 +4 +0 +2 +5 +3 +0 +6 +2 +0 +6 +6 +2 +6 +5 +3 +2 +6 +4 +6 +0 +2 +0 +5 +2 +3 +0 +5 +2 +6 +4 +3 +5 +3 +3 +3 +6 +6 +2 +2 +4 +4 +0 +2 +3 +3 +3 +3 +0 +4 +6 +6 +5 +1 +2 +4 +6 +5 +6 +4 +6 +4 +0 +4 +3 +5 +5 +6 +6 +6 +3 +0 +0 +6 +6 +0 +6 +6 +6 +3 +3 +4 +6 +4 +3 +3 +5 +2 +3 +4 +3 +3 +6 +5 +3 +2 +2 +6 +5 +5 +1 +5 +6 +4 +4 +3 +0 +6 +5 +3 +6 +0 +6 +3 +6 +6 +3 +2 +5 +4 +2 +6 +6 +0 +3 +3 +0 +5 +4 +3 +3 +3 +3 +5 +2 +6 +0 +2 +4 +6 +6 +6 +2 +2 +3 +5 +2 +6 +3 +0 +0 +6 +2 +3 +6 +3 +2 +0 +3 +3 +4 +5 +4 +6 +4 +6 +3 +6 +6 +4 +3 +0 +5 +0 +5 +3 +6 +4 +3 +6 +2 +6 +0 +3 +5 +5 +0 +0 +3 +2 +3 +3 +6 +4 +0 +2 +3 +0 +2 +5 +5 +6 +3 +4 +0 +3 +5 +6 +3 +6 +6 +3 +2 +2 +4 +5 +4 +3 +5 +0 +4 +0 +0 +3 +4 +0 +3 +5 +5 +2 +5 +5 +6 +5 +5 +0 +6 +0 +4 +5 +4 +3 +3 +4 +0 +3 +5 +0 +3 +6 +5 +6 +6 +3 +5 +2 +6 +3 +3 +6 +0 +0 +2 +6 +3 +6 +0 +3 +0 +2 +6 +5 +2 +0 +5 +0 +0 +6 +5 +0 +2 +4 +0 +0 +5 +6 +6 +6 +6 +3 +6 +0 +2 +6 +3 +3 +4 +6 +6 +3 +4 +4 +5 +3 +3 +3 +4 +6 +2 +2 +3 +4 +3 +5 +3 +6 +6 +5 +4 +0 +3 +6 +3 +6 +0 +6 +2 +2 +4 +4 +0 +6 +5 +0 +4 +6 +3 +2 +0 +3 +3 +5 +3 +4 +4 +3 +0 +4 +2 +6 +3 +2 +4 +0 +0 +3 +3 +0 +3 +3 +3 +0 +0 +4 +3 +0 +6 +4 +4 +6 +6 +5 +3 +2 +4 +4 +6 +3 +6 +4 +3 +2 +3 +2 +4 +4 +4 +3 +3 +0 +4 +3 +2 +6 +4 +4 +0 +4 +3 +0 +0 +4 +4 +4 +3 +3 +3 +5 +3 +6 +4 +4 +3 +5 +0 +3 +6 +2 +4 +4 +6 +2 +1 +1 +2 +1 +4 +4 +4 +0 +5 +2 +0 +6 +4 +0 +3 +4 +6 +4 +6 +4 +0 +3 +4 +3 +5 +5 +5 +5 +4 +2 +4 +4 +3 +3 +0 +3 +6 +5 +5 +2 +6 +5 +4 +4 +4 +4 +3 +3 +4 +3 +6 +3 +6 +2 +4 +5 +6 +0 +6 +3 +0 +2 +2 +0 +6 +5 +6 +0 +6 +6 +2 +6 +0 +3 +4 +2 +6 +6 +2 +5 +4 +6 +3 +6 +4 +2 +4 +6 +6 +4 +0 +3 +5 +2 +2 +2 +2 +3 +5 +4 +4 +6 +3 +5 +2 +5 +3 +4 +0 +6 +3 +3 +6 +0 +6 +0 +3 +4 +2 +4 +5 +4 +0 +4 +5 +0 +5 +6 +5 +6 +2 +5 +3 +2 +3 +3 +3 +3 +0 +0 +6 +6 +6 +5 +3 +2 +4 +0 +4 +4 +3 +2 +2 +3 +3 +3 +1 +2 +3 +5 +4 +5 +4 +5 +5 +1 +0 +4 +6 +6 +4 +6 +2 +3 +4 +1 +5 +4 +3 +3 +4 +6 +3 +3 +4 +6 +4 +3 +5 +6 +6 +2 +2 +3 +6 +0 +2 +4 +6 +6 +6 +3 +2 +2 +3 +4 +0 +5 +3 +2 +0 +3 +6 +2 +4 +6 +3 +2 +5 +4 +1 +6 +4 +2 +6 +0 +4 +5 +3 +4 +3 +0 +5 +5 +4 +3 +4 +6 +4 +3 +3 +5 +4 +3 +3 +2 +6 +0 +0 +4 +0 +5 +0 +0 +3 +3 +4 +4 +2 +4 +6 +0 +4 +6 +5 +5 +6 +3 +4 +3 +5 +0 +6 +0 +3 +0 +4 +3 +0 +2 +3 +0 +0 +0 +3 +3 +2 +3 +4 +4 +6 +4 +3 +0 +0 +4 +0 +3 +3 +3 +3 +0 +5 +2 +2 +6 +6 +5 +4 +4 +4 +6 +0 +5 +3 +6 +5 +4 +4 +6 +3 +6 +4 +6 +3 +4 +3 +2 +6 +4 +6 +0 +5 +0 +4 +3 +3 +5 +2 +6 +0 +3 +3 +3 +3 +0 +4 +3 +3 +4 +5 +4 +3 +3 +5 +2 +6 +0 +6 +4 +2 +6 +0 +3 +0 +5 +3 +6 +3 +2 +3 +5 +3 +3 +2 +0 +0 +0 +4 +3 +6 +5 +6 +3 +5 +3 +0 +0 +0 +6 +0 +6 +4 +2 +2 +0 +3 +0 +6 +0 +3 +0 +2 +2 +3 +0 +5 +3 +2 +0 +3 +5 +3 +3 +6 +0 +2 +2 +3 +3 +2 +0 +3 +4 +3 +3 +3 +0 +3 +4 +6 +0 +6 +2 +6 +2 +5 +3 +4 +2 +0 +3 +3 +6 +0 +4 +2 +6 +4 +0 +6 +3 +2 +4 +4 +5 +6 +3 +3 +0 +5 +3 +4 +5 +2 +0 +6 +4 +6 +5 +4 +1 +0 +3 +6 +6 +5 +3 +5 +3 +0 +2 +4 +2 +6 +6 +4 +4 +2 +3 +6 +3 +6 +3 +3 +3 +5 +6 +1 +6 +5 +5 +3 +3 +3 +4 +3 +3 +3 +6 +4 +4 +3 +4 +5 +6 +3 +3 +2 +5 +5 +0 +0 +3 +2 +3 +3 +6 +2 +3 +0 +3 +3 +1 +0 +1 +0 +0 +6 +2 +1 +3 +5 +3 +0 +4 +3 +3 +3 +3 +5 +5 +2 +3 +3 +1 +5 +0 +6 +6 +6 +6 +0 +6 +3 +2 +4 +3 +6 +3 +0 +2 +3 +6 +3 +0 +0 +6 +0 +4 +0 +6 +3 +5 +4 +3 +5 +2 +6 +3 +5 +2 +2 +3 +4 +0 +4 +5 +3 +2 +6 +4 +6 +2 +0 +5 +3 +2 +2 +0 +4 +3 +5 +4 +6 +2 +4 +1 +3 +3 +5 +3 +2 +5 +0 +6 +3 +3 +3 +3 +2 +3 +0 +0 +0 +4 +3 +6 +0 +3 +0 +4 +3 +3 +5 +2 +4 +6 +4 +2 +0 +4 +3 +3 +3 +0 +2 +3 +4 +3 +1 +3 +6 +3 +0 +6 +3 +4 +4 +3 +3 +4 +6 +6 +4 +5 +3 +2 +5 +4 +0 +4 +2 +6 +0 +4 +0 +3 +3 +0 +3 +3 +0 +3 +0 +2 +0 +6 +0 +0 +4 +5 +6 +4 +5 +6 +4 +3 +4 +3 +5 +4 +3 +3 +3 +5 +3 +3 +3 +3 +4 +3 +2 +3 +3 +3 +2 +3 +4 +6 +0 +3 +4 +3 +3 +0 +3 +4 +3 +4 +3 +6 +2 +6 +3 +2 +5 +5 +6 +3 +6 +6 +3 +2 +3 +4 +6 +5 +3 +3 +3 +4 +3 +2 +4 +4 +0 +0 +3 +3 +2 +6 +0 +3 +2 +6 +6 +2 +3 +2 +3 +3 +3 +6 +4 +0 +3 +4 +6 +0 +0 +6 +3 +4 +4 +2 +6 +4 +5 +5 +4 +5 +6 +6 +3 +0 +0 +5 +0 +3 +4 +4 +3 +0 +5 +0 +3 +3 +3 +3 +2 +2 +3 +5 +3 +0 +0 +0 +3 +6 +5 +3 +6 +0 +6 +6 +3 +3 +3 +6 +5 +5 +3 +3 +4 +6 +6 +3 +3 +0 +5 +3 +0 +0 +3 +3 +3 +2 +3 +2 +3 +4 +3 +3 +5 +2 +6 +2 +0 +5 +0 +2 +3 +3 +4 +3 +0 +1 +5 +3 +3 +2 +5 +2 +6 +6 +4 +5 +3 +4 +6 +4 +2 +3 +6 +6 +4 +6 +4 +6 +2 +0 +3 +3 +3 +6 +3 +4 +6 +4 +0 +6 +4 +6 +0 +6 +5 +3 +3 +5 +1 +0 +3 +3 +4 +2 +0 +2 +2 +4 +3 +4 +3 +5 +4 +3 +3 +4 +6 +4 +5 +3 +5 +2 +3 +2 +5 +3 +0 +5 +2 +4 +3 +3 +2 +0 +2 +0 +6 +3 +0 +6 +5 +0 +0 +5 +5 +6 +4 +2 +3 +0 +0 +0 +4 +6 +2 +3 +0 +4 +0 +4 +6 +4 +2 +0 +2 +3 +5 +3 +6 +0 +2 +4 +5 +4 +3 +5 +3 +0 +4 +5 +3 +0 +5 +6 +6 +6 +3 +3 +3 +2 +6 +2 +6 +0 +0 +6 +3 +4 +2 +4 +0 +3 +6 +3 +4 +0 +4 +6 +3 +3 +5 +4 +2 +2 +2 +4 +4 +2 +4 +3 +3 +3 +3 +2 +5 +3 +0 +4 +2 +3 +0 +4 +3 +3 +3 +6 +6 +2 +3 +0 +4 +0 +3 +4 +0 +0 +4 +6 +3 +6 +5 +0 +2 +4 +4 +4 +3 +4 +3 +6 +6 +3 +2 +0 +4 +4 +6 +0 +6 +2 +2 +3 +6 +0 +4 +2 +3 +2 +0 +6 +3 +3 +6 +4 +2 +3 +4 +4 +5 +2 +3 +4 +6 +0 +2 +6 +6 +3 +0 +3 +3 +2 +0 +4 +4 +5 +3 +6 +3 +6 +6 +6 +2 +4 +3 +4 +0 +3 +0 +6 +2 +4 +4 +4 +0 +4 +6 +4 +3 +4 +6 +6 +6 +6 +3 +0 +0 +0 +4 +5 +0 +3 +2 +2 +5 +0 +5 +6 +3 +4 +3 +3 +3 +3 +3 +3 +3 +2 +3 +6 +4 +4 +3 +2 +0 +0 +0 +4 +4 +2 +0 +3 +4 +3 +0 +3 +4 +4 +6 +6 +3 +3 +3 +6 +2 +5 +6 +6 +4 +5 +0 +0 +0 +3 +4 +2 +6 +3 +0 +0 +6 +4 +3 +6 +3 +6 +3 +5 +3 +4 +2 +2 +6 +5 +6 +4 +4 +3 +3 +2 +5 +6 +6 +2 +4 +0 +2 +4 +4 +3 +4 +5 +3 +3 +4 +2 +5 +2 +3 +4 +5 +3 +4 +3 +0 +2 +5 +5 +6 +6 +4 +6 +5 +3 +6 +3 +5 +3 +2 +3 +3 +4 +4 +0 +3 +3 +0 +4 +6 +3 +3 +0 +3 +3 +0 +4 +5 +0 +6 +3 +5 +6 +4 +4 +4 +5 +6 +4 +3 +2 +3 +3 +3 +2 +3 +0 +6 +3 +0 +3 +6 +3 +3 +5 +6 +5 +0 +0 +2 +2 +5 +2 +6 +5 +2 +3 +3 +3 +5 +4 +5 +6 +0 +3 +4 +3 +3 +0 +0 +3 +3 +6 +6 +2 +3 +4 +6 +6 +4 +2 +6 +0 +2 +6 +2 +0 +6 +3 +4 +3 +5 +6 +0 +4 +4 +3 +5 +5 +0 +3 +6 +6 +3 +2 +0 +4 +2 +2 +4 +0 +4 +4 +3 +4 +5 +0 +3 +4 +2 +4 +0 +4 +0 +0 +4 +3 +0 +4 +2 +5 +6 +5 +4 +3 +0 +3 +6 +3 +0 +6 +2 +2 +6 +4 +0 +3 +6 +3 +2 +3 +5 +3 +4 +4 +3 +3 +4 +5 +2 +1 +3 +6 +4 +2 +0 +1 +2 +2 +5 +0 +4 +0 +0 +3 +5 +3 +5 +3 +4 +4 +4 +6 +4 +3 +4 +5 +3 +6 +4 +4 +5 +3 +0 +4 +4 +3 +6 +5 +0 +3 +2 +3 +3 +0 +4 +5 +5 +3 +6 +4 +4 +2 +5 +2 +5 +3 +4 +3 +3 +3 +6 +6 +0 +3 +5 +3 +3 +4 +6 +6 +4 +6 +0 +3 +2 +4 +0 +5 +3 +3 +2 +0 +4 +4 +2 +3 +5 +5 +3 +2 +3 +4 +3 +5 +6 +5 +4 +0 +6 +3 +0 +6 +2 +3 +0 +2 +0 +4 +2 +0 +3 +5 +3 +5 +0 +1 +6 +0 +5 +6 +0 +4 +5 +2 +5 +4 +3 +6 +1 +6 +2 +0 +5 +2 +0 +0 +5 +3 +0 +4 +5 +5 +5 +0 +2 +6 +4 +4 +4 +3 +5 +5 +5 +5 +3 +6 +4 +5 +0 +1 +5 +5 +3 +3 +0 +3 +3 +5 +2 +2 +5 +2 +3 +5 +3 +2 +6 +4 +3 +3 +5 +6 +4 +3 +0 +4 +3 +3 +5 +3 +4 +6 +6 +3 +2 +0 +0 +6 +6 +5 +3 +0 +2 +3 +5 +0 +6 +5 +4 +6 +4 +3 +3 +5 +6 +5 +0 +6 +2 +6 +4 +2 +3 +5 +6 +0 +3 +4 +6 +6 +5 +3 +6 +0 +6 +2 +6 +2 +0 +6 +6 +6 +3 +3 +5 +2 +2 +6 +6 +0 +5 +3 +4 +2 +3 +4 +2 +5 +2 +6 +0 +6 +6 +1 +0 +4 +5 +3 +3 +5 +2 +2 +2 +3 +3 +3 +5 +4 +3 +6 +3 +5 +3 +0 +2 +5 +2 +4 +3 +6 +6 +5 +0 +2 +4 +3 +0 +5 +5 +5 +6 +6 +5 +3 +2 +3 +6 +4 +4 +6 +5 +6 +3 +5 +6 +6 +5 +0 +6 +3 +4 +3 +4 +0 +3 +4 +0 +6 +6 +2 +3 +2 +2 +4 +4 +2 +3 +3 +4 +3 +2 +6 +3 +6 +2 +0 +2 +2 +3 +3 +2 +3 +4 +4 +0 +4 +6 +0 +6 +2 +4 +6 +0 +4 +5 +3 +3 +4 +0 +3 +0 +4 +3 +3 +3 +5 +4 +4 +0 +0 +0 +0 +0 +0 +6 +2 +0 +6 +3 +5 +6 +4 +6 +4 +3 +6 +0 +4 +3 +6 +2 +5 +4 +4 +3 +4 +5 +6 +3 +6 +3 +2 +2 +4 +2 +1 +5 +2 +5 +2 +6 +6 +6 +2 +4 +3 +4 +0 +3 +6 +5 +0 +0 +6 +3 +5 +6 +1 +2 +4 +4 +0 +5 +6 +2 +4 +4 +6 +3 +6 +6 +6 +3 +5 +3 +0 +3 +4 +3 +0 +0 +5 +6 +5 +4 +6 +1 +2 +6 +6 +5 +5 +4 +3 +6 +4 +3 +2 +2 +2 +6 +2 +0 +3 +5 +6 +4 +4 +6 +3 +3 +3 +3 +2 +1 +6 +3 +0 +3 +2 +4 +2 +5 +6 +3 +6 +4 +3 +3 +6 +3 +6 +6 +0 +5 +2 +3 +5 +5 +0 +3 +5 +0 +0 +3 +4 +0 +6 +4 +4 +4 +6 +6 +4 +0 +6 +4 +6 +6 +0 +5 +3 +2 +3 +3 +5 +3 +3 +6 +6 +2 +5 +3 +2 +3 +3 +0 +6 +3 +0 +5 +2 +5 +5 +2 +2 +1 +3 +5 +5 +3 +3 +4 +0 +3 +2 +5 +4 +4 +0 +5 +2 +3 +0 +3 +6 +2 +4 +0 +4 +2 +3 +6 +6 +2 +2 +4 +3 +6 +5 +0 +3 +3 +3 +5 +0 +6 +6 +4 +3 +3 +3 +0 +3 +2 +6 +5 +3 +2 +5 +0 +0 +0 +0 +1 +0 +4 +6 +2 +2 +4 +4 +2 +6 +3 +0 +5 +2 +2 +0 +0 +5 +2 +4 +3 +6 +0 +3 +0 +3 +6 +2 +0 +2 +4 +5 +5 +6 +4 +4 +4 +3 +6 +6 +5 +3 +3 +4 +5 +4 +0 +4 +0 +3 +2 +5 +4 +4 +4 +2 +3 +2 +5 +3 +6 +6 +6 +2 +3 +2 +4 +3 +0 +5 +3 +4 +0 +0 +2 +4 +4 +6 +2 +4 +3 +6 +6 +5 +3 +5 +5 +3 +6 +4 +6 +0 +5 +5 +6 +6 +0 +5 +4 +0 +2 +3 +3 +6 +3 +0 +3 +5 +0 +6 +3 +5 +3 +2 +5 +5 +5 +6 +3 +0 +4 +0 +3 +2 +3 +2 +4 +6 +0 +6 +6 +5 +3 +4 +6 +5 +0 +5 +0 +3 +6 +6 +5 +0 +0 +6 +3 +6 +4 +6 +6 +0 +5 +0 +5 +6 +6 +0 +2 +6 +6 +6 +4 +2 +3 +4 +0 +5 +4 +2 +0 +4 +3 +2 +3 +0 +0 +3 +4 +6 +6 +0 +4 +0 +4 +3 +0 +2 +2 +2 +6 +3 +0 +4 +3 +0 +6 +6 +6 +4 +3 +3 +2 +2 +3 +2 +4 +3 +1 +6 +3 +0 +6 +5 +0 +0 +4 +0 +4 +6 +0 +3 +3 +3 +0 +4 +3 +6 +0 +6 +0 +3 +4 +2 +2 +6 +6 +2 +4 +0 +6 +0 +3 +2 +2 +2 +2 +6 +4 +5 +4 +0 +6 +5 +4 +4 +3 +0 +2 +3 +1 +5 +6 +5 +2 +3 +3 +4 +3 +0 +0 +3 +5 +2 +6 +4 +5 +5 +0 +3 +3 +5 +6 +2 +4 +0 +3 +3 +4 +6 +4 +6 +2 +4 +3 +4 +0 +3 +3 +3 +2 +4 +3 +6 +3 +2 +4 +3 +3 +6 +4 +2 +0 +5 +2 +0 +4 +0 +4 diff --git a/data/train/0.jpg b/data/train/0.jpg new file mode 100644 index 0000000..803799a Binary files /dev/null and b/data/train/0.jpg differ diff --git a/data/train/1.jpg b/data/train/1.jpg new file mode 100644 index 0000000..dde34d7 Binary files /dev/null and b/data/train/1.jpg differ diff --git a/data/train/10.jpg b/data/train/10.jpg new file mode 100644 index 0000000..be878e3 Binary files /dev/null and b/data/train/10.jpg differ diff --git a/data/train/100.jpg b/data/train/100.jpg new file mode 100644 index 0000000..c72e29e Binary files /dev/null and b/data/train/100.jpg differ diff --git a/data/train/101.jpg b/data/train/101.jpg new file mode 100644 index 0000000..1089a57 Binary files /dev/null and b/data/train/101.jpg differ diff --git a/data/train/102.jpg b/data/train/102.jpg new file mode 100644 index 0000000..848df67 Binary files /dev/null and b/data/train/102.jpg differ diff --git a/data/train/103.jpg b/data/train/103.jpg new file mode 100644 index 0000000..0477c00 Binary files /dev/null and b/data/train/103.jpg differ diff --git a/data/train/104.jpg b/data/train/104.jpg new file mode 100644 index 0000000..6475d8c Binary files /dev/null and b/data/train/104.jpg differ diff --git a/data/train/105.jpg b/data/train/105.jpg new file mode 100644 index 0000000..0489d93 Binary files /dev/null and b/data/train/105.jpg differ diff --git a/data/train/106.jpg b/data/train/106.jpg new file mode 100644 index 0000000..c1d882c Binary files /dev/null and b/data/train/106.jpg differ diff --git a/data/train/107.jpg b/data/train/107.jpg new file mode 100644 index 0000000..607af2e Binary files /dev/null and b/data/train/107.jpg differ diff --git a/data/train/108.jpg b/data/train/108.jpg new file mode 100644 index 0000000..c25c620 Binary files /dev/null and b/data/train/108.jpg differ diff --git a/data/train/109.jpg b/data/train/109.jpg new file mode 100644 index 0000000..f7e2e89 Binary files /dev/null and b/data/train/109.jpg differ diff --git a/data/train/11.jpg b/data/train/11.jpg new file mode 100644 index 0000000..b29e00a Binary files /dev/null and b/data/train/11.jpg differ diff --git a/data/train/110.jpg b/data/train/110.jpg new file mode 100644 index 0000000..63ea7d7 Binary files /dev/null and b/data/train/110.jpg differ diff --git a/data/train/111.jpg b/data/train/111.jpg new file mode 100644 index 0000000..858e6b6 Binary files /dev/null and b/data/train/111.jpg differ diff --git a/data/train/112.jpg b/data/train/112.jpg new file mode 100644 index 0000000..69679d4 Binary files /dev/null and b/data/train/112.jpg differ diff --git a/data/train/113.jpg b/data/train/113.jpg new file mode 100644 index 0000000..86738db Binary files /dev/null and b/data/train/113.jpg differ diff --git a/data/train/114.jpg b/data/train/114.jpg new file mode 100644 index 0000000..ff68918 Binary files /dev/null and b/data/train/114.jpg differ diff --git a/data/train/115.jpg b/data/train/115.jpg new file mode 100644 index 0000000..858fbc9 Binary files /dev/null and b/data/train/115.jpg differ diff --git a/data/train/116.jpg b/data/train/116.jpg new file mode 100644 index 0000000..8326d5f Binary files /dev/null and b/data/train/116.jpg differ diff --git a/data/train/117.jpg b/data/train/117.jpg new file mode 100644 index 0000000..372edc4 Binary files /dev/null and b/data/train/117.jpg differ diff --git a/data/train/118.jpg b/data/train/118.jpg new file mode 100644 index 0000000..f1d0648 Binary files /dev/null and b/data/train/118.jpg differ diff --git a/data/train/119.jpg b/data/train/119.jpg new file mode 100644 index 0000000..e2c1915 Binary files /dev/null and b/data/train/119.jpg differ diff --git a/data/train/12.jpg b/data/train/12.jpg new file mode 100644 index 0000000..b009f71 Binary files /dev/null and b/data/train/12.jpg differ diff --git a/data/train/120.jpg b/data/train/120.jpg new file mode 100644 index 0000000..10826f2 Binary files /dev/null and b/data/train/120.jpg differ diff --git a/data/train/121.jpg b/data/train/121.jpg new file mode 100644 index 0000000..d97b892 Binary files /dev/null and b/data/train/121.jpg differ diff --git a/data/train/122.jpg b/data/train/122.jpg new file mode 100644 index 0000000..8099b62 Binary files /dev/null and b/data/train/122.jpg differ diff --git a/data/train/123.jpg b/data/train/123.jpg new file mode 100644 index 0000000..57a2ba7 Binary files /dev/null and b/data/train/123.jpg differ diff --git a/data/train/124.jpg b/data/train/124.jpg new file mode 100644 index 0000000..4d3c85e Binary files /dev/null and b/data/train/124.jpg differ diff --git a/data/train/125.jpg b/data/train/125.jpg new file mode 100644 index 0000000..ea828e6 Binary files /dev/null and b/data/train/125.jpg differ diff --git a/data/train/126.jpg b/data/train/126.jpg new file mode 100644 index 0000000..997cd4b Binary files /dev/null and b/data/train/126.jpg differ diff --git a/data/train/127.jpg b/data/train/127.jpg new file mode 100644 index 0000000..8d570f2 Binary files /dev/null and b/data/train/127.jpg differ diff --git a/data/train/128.jpg b/data/train/128.jpg new file mode 100644 index 0000000..b846acd Binary files /dev/null and b/data/train/128.jpg differ diff --git a/data/train/129.jpg b/data/train/129.jpg new file mode 100644 index 0000000..cff389a Binary files /dev/null and b/data/train/129.jpg differ diff --git a/data/train/13.jpg b/data/train/13.jpg new file mode 100644 index 0000000..c6a27f1 Binary files /dev/null and b/data/train/13.jpg differ diff --git a/data/train/130.jpg b/data/train/130.jpg new file mode 100644 index 0000000..cb36116 Binary files /dev/null and b/data/train/130.jpg differ diff --git a/data/train/131.jpg b/data/train/131.jpg new file mode 100644 index 0000000..95db89f Binary files /dev/null and b/data/train/131.jpg differ diff --git a/data/train/132.jpg b/data/train/132.jpg new file mode 100644 index 0000000..53315cc Binary files /dev/null and b/data/train/132.jpg differ diff --git a/data/train/133.jpg b/data/train/133.jpg new file mode 100644 index 0000000..b183882 Binary files /dev/null and b/data/train/133.jpg differ diff --git a/data/train/134.jpg b/data/train/134.jpg new file mode 100644 index 0000000..b0475f9 Binary files /dev/null and b/data/train/134.jpg differ diff --git a/data/train/135.jpg b/data/train/135.jpg new file mode 100644 index 0000000..56d8680 Binary files /dev/null and b/data/train/135.jpg differ diff --git a/data/train/136.jpg b/data/train/136.jpg new file mode 100644 index 0000000..c7b307c Binary files /dev/null and b/data/train/136.jpg differ diff --git a/data/train/137.jpg b/data/train/137.jpg new file mode 100644 index 0000000..3ed530a Binary files /dev/null and b/data/train/137.jpg differ diff --git a/data/train/138.jpg b/data/train/138.jpg new file mode 100644 index 0000000..d426a02 Binary files /dev/null and b/data/train/138.jpg differ diff --git a/data/train/139.jpg b/data/train/139.jpg new file mode 100644 index 0000000..1919843 Binary files /dev/null and b/data/train/139.jpg differ diff --git a/data/train/14.jpg b/data/train/14.jpg new file mode 100644 index 0000000..f7c1905 Binary files /dev/null and b/data/train/14.jpg differ diff --git a/data/train/140.jpg b/data/train/140.jpg new file mode 100644 index 0000000..e6fa813 Binary files /dev/null and b/data/train/140.jpg differ diff --git a/data/train/141.jpg b/data/train/141.jpg new file mode 100644 index 0000000..5fe15b6 Binary files /dev/null and b/data/train/141.jpg differ diff --git a/data/train/142.jpg b/data/train/142.jpg new file mode 100644 index 0000000..4898ec0 Binary files /dev/null and b/data/train/142.jpg differ diff --git a/data/train/143.jpg b/data/train/143.jpg new file mode 100644 index 0000000..d115f48 Binary files /dev/null and b/data/train/143.jpg differ diff --git a/data/train/144.jpg b/data/train/144.jpg new file mode 100644 index 0000000..2e3e4b2 Binary files /dev/null and b/data/train/144.jpg differ diff --git a/data/train/145.jpg b/data/train/145.jpg new file mode 100644 index 0000000..cf7952a Binary files /dev/null and b/data/train/145.jpg differ diff --git a/data/train/146.jpg b/data/train/146.jpg new file mode 100644 index 0000000..540c97e Binary files /dev/null and b/data/train/146.jpg differ diff --git a/data/train/147.jpg b/data/train/147.jpg new file mode 100644 index 0000000..0d7c4a2 Binary files /dev/null and b/data/train/147.jpg differ diff --git a/data/train/148.jpg b/data/train/148.jpg new file mode 100644 index 0000000..b26d8ac Binary files /dev/null and b/data/train/148.jpg differ diff --git a/data/train/149.jpg b/data/train/149.jpg new file mode 100644 index 0000000..a41ceac Binary files /dev/null and b/data/train/149.jpg differ diff --git a/data/train/15.jpg b/data/train/15.jpg new file mode 100644 index 0000000..727fe37 Binary files /dev/null and b/data/train/15.jpg differ diff --git a/data/train/150.jpg b/data/train/150.jpg new file mode 100644 index 0000000..95cc38d Binary files /dev/null and b/data/train/150.jpg differ diff --git a/data/train/151.jpg b/data/train/151.jpg new file mode 100644 index 0000000..dd41360 Binary files /dev/null and b/data/train/151.jpg differ diff --git a/data/train/152.jpg b/data/train/152.jpg new file mode 100644 index 0000000..3aca0fc Binary files /dev/null and b/data/train/152.jpg differ diff --git a/data/train/153.jpg b/data/train/153.jpg new file mode 100644 index 0000000..564c949 Binary files /dev/null and b/data/train/153.jpg differ diff --git a/data/train/154.jpg b/data/train/154.jpg new file mode 100644 index 0000000..c438ef1 Binary files /dev/null and b/data/train/154.jpg differ diff --git a/data/train/155.jpg b/data/train/155.jpg new file mode 100644 index 0000000..c6b47ad Binary files /dev/null and b/data/train/155.jpg differ diff --git a/data/train/156.jpg b/data/train/156.jpg new file mode 100644 index 0000000..99883dd Binary files /dev/null and b/data/train/156.jpg differ diff --git a/data/train/157.jpg b/data/train/157.jpg new file mode 100644 index 0000000..f868098 Binary files /dev/null and b/data/train/157.jpg differ diff --git a/data/train/158.jpg b/data/train/158.jpg new file mode 100644 index 0000000..5d7ec1f Binary files /dev/null and b/data/train/158.jpg differ diff --git a/data/train/159.jpg b/data/train/159.jpg new file mode 100644 index 0000000..1801cbb Binary files /dev/null and b/data/train/159.jpg differ diff --git a/data/train/16.jpg b/data/train/16.jpg new file mode 100644 index 0000000..ce708c7 Binary files /dev/null and b/data/train/16.jpg differ diff --git a/data/train/160.jpg b/data/train/160.jpg new file mode 100644 index 0000000..3caf528 Binary files /dev/null and b/data/train/160.jpg differ diff --git a/data/train/161.jpg b/data/train/161.jpg new file mode 100644 index 0000000..a4623a1 Binary files /dev/null and b/data/train/161.jpg differ diff --git a/data/train/162.jpg b/data/train/162.jpg new file mode 100644 index 0000000..6ddb62f Binary files /dev/null and b/data/train/162.jpg differ diff --git a/data/train/163.jpg b/data/train/163.jpg new file mode 100644 index 0000000..f58c280 Binary files /dev/null and b/data/train/163.jpg differ diff --git a/data/train/164.jpg b/data/train/164.jpg new file mode 100644 index 0000000..6757240 Binary files /dev/null and b/data/train/164.jpg differ diff --git a/data/train/165.jpg b/data/train/165.jpg new file mode 100644 index 0000000..c218aa6 Binary files /dev/null and b/data/train/165.jpg differ diff --git a/data/train/166.jpg b/data/train/166.jpg new file mode 100644 index 0000000..4fba6d6 Binary files /dev/null and b/data/train/166.jpg differ diff --git a/data/train/167.jpg b/data/train/167.jpg new file mode 100644 index 0000000..2d9a8e2 Binary files /dev/null and b/data/train/167.jpg differ diff --git a/data/train/168.jpg b/data/train/168.jpg new file mode 100644 index 0000000..2314e5c Binary files /dev/null and b/data/train/168.jpg differ diff --git a/data/train/169.jpg b/data/train/169.jpg new file mode 100644 index 0000000..11016b9 Binary files /dev/null and b/data/train/169.jpg differ diff --git a/data/train/17.jpg b/data/train/17.jpg new file mode 100644 index 0000000..18d8b51 Binary files /dev/null and b/data/train/17.jpg differ diff --git a/data/train/170.jpg b/data/train/170.jpg new file mode 100644 index 0000000..423a8e0 Binary files /dev/null and b/data/train/170.jpg differ diff --git a/data/train/171.jpg b/data/train/171.jpg new file mode 100644 index 0000000..6659e7f Binary files /dev/null and b/data/train/171.jpg differ diff --git a/data/train/172.jpg b/data/train/172.jpg new file mode 100644 index 0000000..b6998f5 Binary files /dev/null and b/data/train/172.jpg differ diff --git a/data/train/173.jpg b/data/train/173.jpg new file mode 100644 index 0000000..759b368 Binary files /dev/null and b/data/train/173.jpg differ diff --git a/data/train/174.jpg b/data/train/174.jpg new file mode 100644 index 0000000..d13bfb9 Binary files /dev/null and b/data/train/174.jpg differ diff --git a/data/train/175.jpg b/data/train/175.jpg new file mode 100644 index 0000000..5928744 Binary files /dev/null and b/data/train/175.jpg differ diff --git a/data/train/176.jpg b/data/train/176.jpg new file mode 100644 index 0000000..440e846 Binary files /dev/null and b/data/train/176.jpg differ diff --git a/data/train/177.jpg b/data/train/177.jpg new file mode 100644 index 0000000..873f155 Binary files /dev/null and b/data/train/177.jpg differ diff --git a/data/train/178.jpg b/data/train/178.jpg new file mode 100644 index 0000000..5bc74cb Binary files /dev/null and b/data/train/178.jpg differ diff --git a/data/train/179.jpg b/data/train/179.jpg new file mode 100644 index 0000000..4069741 Binary files /dev/null and b/data/train/179.jpg differ diff --git a/data/train/18.jpg b/data/train/18.jpg new file mode 100644 index 0000000..5e7e579 Binary files /dev/null and b/data/train/18.jpg differ diff --git a/data/train/180.jpg b/data/train/180.jpg new file mode 100644 index 0000000..6faee6a Binary files /dev/null and b/data/train/180.jpg differ diff --git a/data/train/181.jpg b/data/train/181.jpg new file mode 100644 index 0000000..126ca89 Binary files /dev/null and b/data/train/181.jpg differ diff --git a/data/train/182.jpg b/data/train/182.jpg new file mode 100644 index 0000000..539a2d3 Binary files /dev/null and b/data/train/182.jpg differ diff --git a/data/train/183.jpg b/data/train/183.jpg new file mode 100644 index 0000000..5f69ef2 Binary files /dev/null and b/data/train/183.jpg differ diff --git a/data/train/184.jpg b/data/train/184.jpg new file mode 100644 index 0000000..4551782 Binary files /dev/null and b/data/train/184.jpg differ diff --git a/data/train/185.jpg b/data/train/185.jpg new file mode 100644 index 0000000..2555229 Binary files /dev/null and b/data/train/185.jpg differ diff --git a/data/train/186.jpg b/data/train/186.jpg new file mode 100644 index 0000000..94b7473 Binary files /dev/null and b/data/train/186.jpg differ diff --git a/data/train/187.jpg b/data/train/187.jpg new file mode 100644 index 0000000..3d6b780 Binary files /dev/null and b/data/train/187.jpg differ diff --git a/data/train/188.jpg b/data/train/188.jpg new file mode 100644 index 0000000..c55976d Binary files /dev/null and b/data/train/188.jpg differ diff --git a/data/train/189.jpg b/data/train/189.jpg new file mode 100644 index 0000000..4e2ab0a Binary files /dev/null and b/data/train/189.jpg differ diff --git a/data/train/19.jpg b/data/train/19.jpg new file mode 100644 index 0000000..0ba140d Binary files /dev/null and b/data/train/19.jpg differ diff --git a/data/train/190.jpg b/data/train/190.jpg new file mode 100644 index 0000000..707cd24 Binary files /dev/null and b/data/train/190.jpg differ diff --git a/data/train/191.jpg b/data/train/191.jpg new file mode 100644 index 0000000..cac3931 Binary files /dev/null and b/data/train/191.jpg differ diff --git a/data/train/192.jpg b/data/train/192.jpg new file mode 100644 index 0000000..615ec11 Binary files /dev/null and b/data/train/192.jpg differ diff --git a/data/train/193.jpg b/data/train/193.jpg new file mode 100644 index 0000000..eb7b07a Binary files /dev/null and b/data/train/193.jpg differ diff --git a/data/train/194.jpg b/data/train/194.jpg new file mode 100644 index 0000000..c660567 Binary files /dev/null and b/data/train/194.jpg differ diff --git a/data/train/195.jpg b/data/train/195.jpg new file mode 100644 index 0000000..eafd62a Binary files /dev/null and b/data/train/195.jpg differ diff --git a/data/train/196.jpg b/data/train/196.jpg new file mode 100644 index 0000000..9a87609 Binary files /dev/null and b/data/train/196.jpg differ diff --git a/data/train/197.jpg b/data/train/197.jpg new file mode 100644 index 0000000..3410b42 Binary files /dev/null and b/data/train/197.jpg differ diff --git a/data/train/198.jpg b/data/train/198.jpg new file mode 100644 index 0000000..ed306de Binary files /dev/null and b/data/train/198.jpg differ diff --git a/data/train/199.jpg b/data/train/199.jpg new file mode 100644 index 0000000..7caaf9a Binary files /dev/null and b/data/train/199.jpg differ diff --git a/data/train/2.jpg b/data/train/2.jpg new file mode 100644 index 0000000..8f7a610 Binary files /dev/null and b/data/train/2.jpg differ diff --git a/data/train/20.jpg b/data/train/20.jpg new file mode 100644 index 0000000..d43ce38 Binary files /dev/null and b/data/train/20.jpg differ diff --git a/data/train/200.jpg b/data/train/200.jpg new file mode 100644 index 0000000..1fdde40 Binary files /dev/null and b/data/train/200.jpg differ diff --git a/data/train/201.jpg b/data/train/201.jpg new file mode 100644 index 0000000..333f93f Binary files /dev/null and b/data/train/201.jpg differ diff --git a/data/train/202.jpg b/data/train/202.jpg new file mode 100644 index 0000000..5ccba43 Binary files /dev/null and b/data/train/202.jpg differ diff --git a/data/train/203.jpg b/data/train/203.jpg new file mode 100644 index 0000000..9dc91c6 Binary files /dev/null and b/data/train/203.jpg differ diff --git a/data/train/204.jpg b/data/train/204.jpg new file mode 100644 index 0000000..e09da1f Binary files /dev/null and b/data/train/204.jpg differ diff --git a/data/train/205.jpg b/data/train/205.jpg new file mode 100644 index 0000000..2db7a3a Binary files /dev/null and b/data/train/205.jpg differ diff --git a/data/train/206.jpg b/data/train/206.jpg new file mode 100644 index 0000000..6cfbbff Binary files /dev/null and b/data/train/206.jpg differ diff --git a/data/train/207.jpg b/data/train/207.jpg new file mode 100644 index 0000000..91b3152 Binary files /dev/null and b/data/train/207.jpg differ diff --git a/data/train/208.jpg b/data/train/208.jpg new file mode 100644 index 0000000..829735e Binary files /dev/null and b/data/train/208.jpg differ diff --git a/data/train/209.jpg b/data/train/209.jpg new file mode 100644 index 0000000..3e59d13 Binary files /dev/null and b/data/train/209.jpg differ diff --git a/data/train/21.jpg b/data/train/21.jpg new file mode 100644 index 0000000..4ff4123 Binary files /dev/null and b/data/train/21.jpg differ diff --git a/data/train/210.jpg b/data/train/210.jpg new file mode 100644 index 0000000..16faaf8 Binary files /dev/null and b/data/train/210.jpg differ diff --git a/data/train/211.jpg b/data/train/211.jpg new file mode 100644 index 0000000..a020927 Binary files /dev/null and b/data/train/211.jpg differ diff --git a/data/train/212.jpg b/data/train/212.jpg new file mode 100644 index 0000000..21a5128 Binary files /dev/null and b/data/train/212.jpg differ diff --git a/data/train/213.jpg b/data/train/213.jpg new file mode 100644 index 0000000..ab7a3f1 Binary files /dev/null and b/data/train/213.jpg differ diff --git a/data/train/214.jpg b/data/train/214.jpg new file mode 100644 index 0000000..7447d55 Binary files /dev/null and b/data/train/214.jpg differ diff --git a/data/train/215.jpg b/data/train/215.jpg new file mode 100644 index 0000000..30345ad Binary files /dev/null and b/data/train/215.jpg differ diff --git a/data/train/216.jpg b/data/train/216.jpg new file mode 100644 index 0000000..89ad603 Binary files /dev/null and b/data/train/216.jpg differ diff --git a/data/train/217.jpg b/data/train/217.jpg new file mode 100644 index 0000000..b1e1993 Binary files /dev/null and b/data/train/217.jpg differ diff --git a/data/train/218.jpg b/data/train/218.jpg new file mode 100644 index 0000000..c415d50 Binary files /dev/null and b/data/train/218.jpg differ diff --git a/data/train/219.jpg b/data/train/219.jpg new file mode 100644 index 0000000..65cfbf1 Binary files /dev/null and b/data/train/219.jpg differ diff --git a/data/train/22.jpg b/data/train/22.jpg new file mode 100644 index 0000000..fd8ae5b Binary files /dev/null and b/data/train/22.jpg differ diff --git a/data/train/220.jpg b/data/train/220.jpg new file mode 100644 index 0000000..c1d58f1 Binary files /dev/null and b/data/train/220.jpg differ diff --git a/data/train/221.jpg b/data/train/221.jpg new file mode 100644 index 0000000..d0830d5 Binary files /dev/null and b/data/train/221.jpg differ diff --git a/data/train/222.jpg b/data/train/222.jpg new file mode 100644 index 0000000..3ee3a71 Binary files /dev/null and b/data/train/222.jpg differ diff --git a/data/train/223.jpg b/data/train/223.jpg new file mode 100644 index 0000000..b45d761 Binary files /dev/null and b/data/train/223.jpg differ diff --git a/data/train/224.jpg b/data/train/224.jpg new file mode 100644 index 0000000..14a83b8 Binary files /dev/null and b/data/train/224.jpg differ diff --git a/data/train/225.jpg b/data/train/225.jpg new file mode 100644 index 0000000..252f9c9 Binary files /dev/null and b/data/train/225.jpg differ diff --git a/data/train/226.jpg b/data/train/226.jpg new file mode 100644 index 0000000..d5e37c6 Binary files /dev/null and b/data/train/226.jpg differ diff --git a/data/train/227.jpg b/data/train/227.jpg new file mode 100644 index 0000000..813bb02 Binary files /dev/null and b/data/train/227.jpg differ diff --git a/data/train/228.jpg b/data/train/228.jpg new file mode 100644 index 0000000..3cdbf5e Binary files /dev/null and b/data/train/228.jpg differ diff --git a/data/train/229.jpg b/data/train/229.jpg new file mode 100644 index 0000000..0a1a040 Binary files /dev/null and b/data/train/229.jpg differ diff --git a/data/train/23.jpg b/data/train/23.jpg new file mode 100644 index 0000000..51befb3 Binary files /dev/null and b/data/train/23.jpg differ diff --git a/data/train/230.jpg b/data/train/230.jpg new file mode 100644 index 0000000..72a8664 Binary files /dev/null and b/data/train/230.jpg differ diff --git a/data/train/231.jpg b/data/train/231.jpg new file mode 100644 index 0000000..95f26db Binary files /dev/null and b/data/train/231.jpg differ diff --git a/data/train/232.jpg b/data/train/232.jpg new file mode 100644 index 0000000..d75c37d Binary files /dev/null and b/data/train/232.jpg differ diff --git a/data/train/233.jpg b/data/train/233.jpg new file mode 100644 index 0000000..18de48e Binary files /dev/null and b/data/train/233.jpg differ diff --git a/data/train/234.jpg b/data/train/234.jpg new file mode 100644 index 0000000..4158917 Binary files /dev/null and b/data/train/234.jpg differ diff --git a/data/train/235.jpg b/data/train/235.jpg new file mode 100644 index 0000000..d987ebf Binary files /dev/null and b/data/train/235.jpg differ diff --git a/data/train/236.jpg b/data/train/236.jpg new file mode 100644 index 0000000..6e46d5e Binary files /dev/null and b/data/train/236.jpg differ diff --git a/data/train/237.jpg b/data/train/237.jpg new file mode 100644 index 0000000..dd24240 Binary files /dev/null and b/data/train/237.jpg differ diff --git a/data/train/238.jpg b/data/train/238.jpg new file mode 100644 index 0000000..ad18afc Binary files /dev/null and b/data/train/238.jpg differ diff --git a/data/train/239.jpg b/data/train/239.jpg new file mode 100644 index 0000000..d9eadfa Binary files /dev/null and b/data/train/239.jpg differ diff --git a/data/train/24.jpg b/data/train/24.jpg new file mode 100644 index 0000000..f02a844 Binary files /dev/null and b/data/train/24.jpg differ diff --git a/data/train/240.jpg b/data/train/240.jpg new file mode 100644 index 0000000..ec83782 Binary files /dev/null and b/data/train/240.jpg differ diff --git a/data/train/241.jpg b/data/train/241.jpg new file mode 100644 index 0000000..5650a5e Binary files /dev/null and b/data/train/241.jpg differ diff --git a/data/train/242.jpg b/data/train/242.jpg new file mode 100644 index 0000000..95fe48e Binary files /dev/null and b/data/train/242.jpg differ diff --git a/data/train/243.jpg b/data/train/243.jpg new file mode 100644 index 0000000..2855c91 Binary files /dev/null and b/data/train/243.jpg differ diff --git a/data/train/244.jpg b/data/train/244.jpg new file mode 100644 index 0000000..8276fcf Binary files /dev/null and b/data/train/244.jpg differ diff --git a/data/train/245.jpg b/data/train/245.jpg new file mode 100644 index 0000000..b790ec9 Binary files /dev/null and b/data/train/245.jpg differ diff --git a/data/train/246.jpg b/data/train/246.jpg new file mode 100644 index 0000000..72704e3 Binary files /dev/null and b/data/train/246.jpg differ diff --git a/data/train/247.jpg b/data/train/247.jpg new file mode 100644 index 0000000..e198726 Binary files /dev/null and b/data/train/247.jpg differ diff --git a/data/train/248.jpg b/data/train/248.jpg new file mode 100644 index 0000000..53e9c21 Binary files /dev/null and b/data/train/248.jpg differ diff --git a/data/train/249.jpg b/data/train/249.jpg new file mode 100644 index 0000000..9da00a7 Binary files /dev/null and b/data/train/249.jpg differ diff --git a/data/train/25.jpg b/data/train/25.jpg new file mode 100644 index 0000000..5df5823 Binary files /dev/null and b/data/train/25.jpg differ diff --git a/data/train/250.jpg b/data/train/250.jpg new file mode 100644 index 0000000..ebd1cb1 Binary files /dev/null and b/data/train/250.jpg differ diff --git a/data/train/251.jpg b/data/train/251.jpg new file mode 100644 index 0000000..bb6fc53 Binary files /dev/null and b/data/train/251.jpg differ diff --git a/data/train/252.jpg b/data/train/252.jpg new file mode 100644 index 0000000..1782236 Binary files /dev/null and b/data/train/252.jpg differ diff --git a/data/train/253.jpg b/data/train/253.jpg new file mode 100644 index 0000000..4fbbcd4 Binary files /dev/null and b/data/train/253.jpg differ diff --git a/data/train/254.jpg b/data/train/254.jpg new file mode 100644 index 0000000..0c7c325 Binary files /dev/null and b/data/train/254.jpg differ diff --git a/data/train/255.jpg b/data/train/255.jpg new file mode 100644 index 0000000..2873bc1 Binary files /dev/null and b/data/train/255.jpg differ diff --git a/data/train/256.jpg b/data/train/256.jpg new file mode 100644 index 0000000..9c10de7 Binary files /dev/null and b/data/train/256.jpg differ diff --git a/data/train/257.jpg b/data/train/257.jpg new file mode 100644 index 0000000..309e193 Binary files /dev/null and b/data/train/257.jpg differ diff --git a/data/train/258.jpg b/data/train/258.jpg new file mode 100644 index 0000000..adf35b6 Binary files /dev/null and b/data/train/258.jpg differ diff --git a/data/train/259.jpg b/data/train/259.jpg new file mode 100644 index 0000000..82eb442 Binary files /dev/null and b/data/train/259.jpg differ diff --git a/data/train/26.jpg b/data/train/26.jpg new file mode 100644 index 0000000..aa7cc7c Binary files /dev/null and b/data/train/26.jpg differ diff --git a/data/train/260.jpg b/data/train/260.jpg new file mode 100644 index 0000000..a012575 Binary files /dev/null and b/data/train/260.jpg differ diff --git a/data/train/261.jpg b/data/train/261.jpg new file mode 100644 index 0000000..9c60ee1 Binary files /dev/null and b/data/train/261.jpg differ diff --git a/data/train/262.jpg b/data/train/262.jpg new file mode 100644 index 0000000..515e1d8 Binary files /dev/null and b/data/train/262.jpg differ diff --git a/data/train/263.jpg b/data/train/263.jpg new file mode 100644 index 0000000..76c3c9e Binary files /dev/null and b/data/train/263.jpg differ diff --git a/data/train/264.jpg b/data/train/264.jpg new file mode 100644 index 0000000..2740ea1 Binary files /dev/null and b/data/train/264.jpg differ diff --git a/data/train/265.jpg b/data/train/265.jpg new file mode 100644 index 0000000..6dfa029 Binary files /dev/null and b/data/train/265.jpg differ diff --git a/data/train/266.jpg b/data/train/266.jpg new file mode 100644 index 0000000..713486e Binary files /dev/null and b/data/train/266.jpg differ diff --git a/data/train/267.jpg b/data/train/267.jpg new file mode 100644 index 0000000..bf9fec8 Binary files /dev/null and b/data/train/267.jpg differ diff --git a/data/train/268.jpg b/data/train/268.jpg new file mode 100644 index 0000000..6ec37a9 Binary files /dev/null and b/data/train/268.jpg differ diff --git a/data/train/269.jpg b/data/train/269.jpg new file mode 100644 index 0000000..6b86bef Binary files /dev/null and b/data/train/269.jpg differ diff --git a/data/train/27.jpg b/data/train/27.jpg new file mode 100644 index 0000000..a300146 Binary files /dev/null and b/data/train/27.jpg differ diff --git a/data/train/270.jpg b/data/train/270.jpg new file mode 100644 index 0000000..7b11c46 Binary files /dev/null and b/data/train/270.jpg differ diff --git a/data/train/271.jpg b/data/train/271.jpg new file mode 100644 index 0000000..594613e Binary files /dev/null and b/data/train/271.jpg differ diff --git a/data/train/272.jpg b/data/train/272.jpg new file mode 100644 index 0000000..428903d Binary files /dev/null and b/data/train/272.jpg differ diff --git a/data/train/273.jpg b/data/train/273.jpg new file mode 100644 index 0000000..63ef3bf Binary files /dev/null and b/data/train/273.jpg differ diff --git a/data/train/274.jpg b/data/train/274.jpg new file mode 100644 index 0000000..4c3372b Binary files /dev/null and b/data/train/274.jpg differ diff --git a/data/train/275.jpg b/data/train/275.jpg new file mode 100644 index 0000000..dd0e805 Binary files /dev/null and b/data/train/275.jpg differ diff --git a/data/train/276.jpg b/data/train/276.jpg new file mode 100644 index 0000000..76bac7b Binary files /dev/null and b/data/train/276.jpg differ diff --git a/data/train/277.jpg b/data/train/277.jpg new file mode 100644 index 0000000..95fa89d Binary files /dev/null and b/data/train/277.jpg differ diff --git a/data/train/278.jpg b/data/train/278.jpg new file mode 100644 index 0000000..50a62fc Binary files /dev/null and b/data/train/278.jpg differ diff --git a/data/train/279.jpg b/data/train/279.jpg new file mode 100644 index 0000000..3b29b64 Binary files /dev/null and b/data/train/279.jpg differ diff --git a/data/train/28.jpg b/data/train/28.jpg new file mode 100644 index 0000000..2990248 Binary files /dev/null and b/data/train/28.jpg differ diff --git a/data/train/280.jpg b/data/train/280.jpg new file mode 100644 index 0000000..50ae69f Binary files /dev/null and b/data/train/280.jpg differ diff --git a/data/train/281.jpg b/data/train/281.jpg new file mode 100644 index 0000000..ed04a8d Binary files /dev/null and b/data/train/281.jpg differ diff --git a/data/train/282.jpg b/data/train/282.jpg new file mode 100644 index 0000000..ab4e9ee Binary files /dev/null and b/data/train/282.jpg differ diff --git a/data/train/283.jpg b/data/train/283.jpg new file mode 100644 index 0000000..c81e8cf Binary files /dev/null and b/data/train/283.jpg differ diff --git a/data/train/284.jpg b/data/train/284.jpg new file mode 100644 index 0000000..2904300 Binary files /dev/null and b/data/train/284.jpg differ diff --git a/data/train/285.jpg b/data/train/285.jpg new file mode 100644 index 0000000..858f58f Binary files /dev/null and b/data/train/285.jpg differ diff --git a/data/train/286.jpg b/data/train/286.jpg new file mode 100644 index 0000000..b911e45 Binary files /dev/null and b/data/train/286.jpg differ diff --git a/data/train/287.jpg b/data/train/287.jpg new file mode 100644 index 0000000..dfbe4f6 Binary files /dev/null and b/data/train/287.jpg differ diff --git a/data/train/288.jpg b/data/train/288.jpg new file mode 100644 index 0000000..9d8546b Binary files /dev/null and b/data/train/288.jpg differ diff --git a/data/train/289.jpg b/data/train/289.jpg new file mode 100644 index 0000000..442df39 Binary files /dev/null and b/data/train/289.jpg differ diff --git a/data/train/29.jpg b/data/train/29.jpg new file mode 100644 index 0000000..d6d7c7b Binary files /dev/null and b/data/train/29.jpg differ diff --git a/data/train/290.jpg b/data/train/290.jpg new file mode 100644 index 0000000..1d3ff69 Binary files /dev/null and b/data/train/290.jpg differ diff --git a/data/train/291.jpg b/data/train/291.jpg new file mode 100644 index 0000000..f920a5e Binary files /dev/null and b/data/train/291.jpg differ diff --git a/data/train/292.jpg b/data/train/292.jpg new file mode 100644 index 0000000..bd2befe Binary files /dev/null and b/data/train/292.jpg differ diff --git a/data/train/293.jpg b/data/train/293.jpg new file mode 100644 index 0000000..2c2b30b Binary files /dev/null and b/data/train/293.jpg differ diff --git a/data/train/294.jpg b/data/train/294.jpg new file mode 100644 index 0000000..5d49533 Binary files /dev/null and b/data/train/294.jpg differ diff --git a/data/train/295.jpg b/data/train/295.jpg new file mode 100644 index 0000000..4a0fad6 Binary files /dev/null and b/data/train/295.jpg differ diff --git a/data/train/296.jpg b/data/train/296.jpg new file mode 100644 index 0000000..d8bd748 Binary files /dev/null and b/data/train/296.jpg differ diff --git a/data/train/297.jpg b/data/train/297.jpg new file mode 100644 index 0000000..51332e9 Binary files /dev/null and b/data/train/297.jpg differ diff --git a/data/train/298.jpg b/data/train/298.jpg new file mode 100644 index 0000000..05c000d Binary files /dev/null and b/data/train/298.jpg differ diff --git a/data/train/299.jpg b/data/train/299.jpg new file mode 100644 index 0000000..4261f87 Binary files /dev/null and b/data/train/299.jpg differ diff --git a/data/train/3.jpg b/data/train/3.jpg new file mode 100644 index 0000000..42b925a Binary files /dev/null and b/data/train/3.jpg differ diff --git a/data/train/30.jpg b/data/train/30.jpg new file mode 100644 index 0000000..050089e Binary files /dev/null and b/data/train/30.jpg differ diff --git a/data/train/300.jpg b/data/train/300.jpg new file mode 100644 index 0000000..aa041aa Binary files /dev/null and b/data/train/300.jpg differ diff --git a/data/train/301.jpg b/data/train/301.jpg new file mode 100644 index 0000000..69e8668 Binary files /dev/null and b/data/train/301.jpg differ diff --git a/data/train/302.jpg b/data/train/302.jpg new file mode 100644 index 0000000..67f25f0 Binary files /dev/null and b/data/train/302.jpg differ diff --git a/data/train/303.jpg b/data/train/303.jpg new file mode 100644 index 0000000..0a3fa62 Binary files /dev/null and b/data/train/303.jpg differ diff --git a/data/train/304.jpg b/data/train/304.jpg new file mode 100644 index 0000000..52758c6 Binary files /dev/null and b/data/train/304.jpg differ diff --git a/data/train/305.jpg b/data/train/305.jpg new file mode 100644 index 0000000..9a9997d Binary files /dev/null and b/data/train/305.jpg differ diff --git a/data/train/306.jpg b/data/train/306.jpg new file mode 100644 index 0000000..b6935cc Binary files /dev/null and b/data/train/306.jpg differ diff --git a/data/train/307.jpg b/data/train/307.jpg new file mode 100644 index 0000000..250e9af Binary files /dev/null and b/data/train/307.jpg differ diff --git a/data/train/308.jpg b/data/train/308.jpg new file mode 100644 index 0000000..72b09ab Binary files /dev/null and b/data/train/308.jpg differ diff --git a/data/train/309.jpg b/data/train/309.jpg new file mode 100644 index 0000000..b86aa81 Binary files /dev/null and b/data/train/309.jpg differ diff --git a/data/train/31.jpg b/data/train/31.jpg new file mode 100644 index 0000000..7e8fff2 Binary files /dev/null and b/data/train/31.jpg differ diff --git a/data/train/310.jpg b/data/train/310.jpg new file mode 100644 index 0000000..7123b7c Binary files /dev/null and b/data/train/310.jpg differ diff --git a/data/train/311.jpg b/data/train/311.jpg new file mode 100644 index 0000000..fc29312 Binary files /dev/null and b/data/train/311.jpg differ diff --git a/data/train/312.jpg b/data/train/312.jpg new file mode 100644 index 0000000..b2fbff4 Binary files /dev/null and b/data/train/312.jpg differ diff --git a/data/train/313.jpg b/data/train/313.jpg new file mode 100644 index 0000000..d9df50d Binary files /dev/null and b/data/train/313.jpg differ diff --git a/data/train/314.jpg b/data/train/314.jpg new file mode 100644 index 0000000..5b44993 Binary files /dev/null and b/data/train/314.jpg differ diff --git a/data/train/315.jpg b/data/train/315.jpg new file mode 100644 index 0000000..3644e90 Binary files /dev/null and b/data/train/315.jpg differ diff --git a/data/train/316.jpg b/data/train/316.jpg new file mode 100644 index 0000000..1836034 Binary files /dev/null and b/data/train/316.jpg differ diff --git a/data/train/317.jpg b/data/train/317.jpg new file mode 100644 index 0000000..6d49619 Binary files /dev/null and b/data/train/317.jpg differ diff --git a/data/train/318.jpg b/data/train/318.jpg new file mode 100644 index 0000000..8c2a022 Binary files /dev/null and b/data/train/318.jpg differ diff --git a/data/train/319.jpg b/data/train/319.jpg new file mode 100644 index 0000000..474dbb0 Binary files /dev/null and b/data/train/319.jpg differ diff --git a/data/train/32.jpg b/data/train/32.jpg new file mode 100644 index 0000000..69ce3f8 Binary files /dev/null and b/data/train/32.jpg differ diff --git a/data/train/320.jpg b/data/train/320.jpg new file mode 100644 index 0000000..aebf018 Binary files /dev/null and b/data/train/320.jpg differ diff --git a/data/train/321.jpg b/data/train/321.jpg new file mode 100644 index 0000000..01ca45b Binary files /dev/null and b/data/train/321.jpg differ diff --git a/data/train/322.jpg b/data/train/322.jpg new file mode 100644 index 0000000..45d7906 Binary files /dev/null and b/data/train/322.jpg differ diff --git a/data/train/323.jpg b/data/train/323.jpg new file mode 100644 index 0000000..dfa0d9a Binary files /dev/null and b/data/train/323.jpg differ diff --git a/data/train/324.jpg b/data/train/324.jpg new file mode 100644 index 0000000..d7c1ef6 Binary files /dev/null and b/data/train/324.jpg differ diff --git a/data/train/325.jpg b/data/train/325.jpg new file mode 100644 index 0000000..a6cbc03 Binary files /dev/null and b/data/train/325.jpg differ diff --git a/data/train/326.jpg b/data/train/326.jpg new file mode 100644 index 0000000..1771e72 Binary files /dev/null and b/data/train/326.jpg differ diff --git a/data/train/327.jpg b/data/train/327.jpg new file mode 100644 index 0000000..fb310e4 Binary files /dev/null and b/data/train/327.jpg differ diff --git a/data/train/328.jpg b/data/train/328.jpg new file mode 100644 index 0000000..a8dee7a Binary files /dev/null and b/data/train/328.jpg differ diff --git a/data/train/329.jpg b/data/train/329.jpg new file mode 100644 index 0000000..7b36d0a Binary files /dev/null and b/data/train/329.jpg differ diff --git a/data/train/33.jpg b/data/train/33.jpg new file mode 100644 index 0000000..de9a0d3 Binary files /dev/null and b/data/train/33.jpg differ diff --git a/data/train/330.jpg b/data/train/330.jpg new file mode 100644 index 0000000..851d773 Binary files /dev/null and b/data/train/330.jpg differ diff --git a/data/train/331.jpg b/data/train/331.jpg new file mode 100644 index 0000000..c7eaa80 Binary files /dev/null and b/data/train/331.jpg differ diff --git a/data/train/332.jpg b/data/train/332.jpg new file mode 100644 index 0000000..4794ec5 Binary files /dev/null and b/data/train/332.jpg differ diff --git a/data/train/333.jpg b/data/train/333.jpg new file mode 100644 index 0000000..e8cc492 Binary files /dev/null and b/data/train/333.jpg differ diff --git a/data/train/334.jpg b/data/train/334.jpg new file mode 100644 index 0000000..a236e64 Binary files /dev/null and b/data/train/334.jpg differ diff --git a/data/train/335.jpg b/data/train/335.jpg new file mode 100644 index 0000000..8b67cdd Binary files /dev/null and b/data/train/335.jpg differ diff --git a/data/train/336.jpg b/data/train/336.jpg new file mode 100644 index 0000000..1e25664 Binary files /dev/null and b/data/train/336.jpg differ diff --git a/data/train/337.jpg b/data/train/337.jpg new file mode 100644 index 0000000..e966e47 Binary files /dev/null and b/data/train/337.jpg differ diff --git a/data/train/338.jpg b/data/train/338.jpg new file mode 100644 index 0000000..fa8ff21 Binary files /dev/null and b/data/train/338.jpg differ diff --git a/data/train/339.jpg b/data/train/339.jpg new file mode 100644 index 0000000..7141a48 Binary files /dev/null and b/data/train/339.jpg differ diff --git a/data/train/34.jpg b/data/train/34.jpg new file mode 100644 index 0000000..c58c036 Binary files /dev/null and b/data/train/34.jpg differ diff --git a/data/train/340.jpg b/data/train/340.jpg new file mode 100644 index 0000000..e4c5979 Binary files /dev/null and b/data/train/340.jpg differ diff --git a/data/train/341.jpg b/data/train/341.jpg new file mode 100644 index 0000000..7a374e7 Binary files /dev/null and b/data/train/341.jpg differ diff --git a/data/train/342.jpg b/data/train/342.jpg new file mode 100644 index 0000000..a764239 Binary files /dev/null and b/data/train/342.jpg differ diff --git a/data/train/343.jpg b/data/train/343.jpg new file mode 100644 index 0000000..c9d5900 Binary files /dev/null and b/data/train/343.jpg differ diff --git a/data/train/344.jpg b/data/train/344.jpg new file mode 100644 index 0000000..fbe0dac Binary files /dev/null and b/data/train/344.jpg differ diff --git a/data/train/345.jpg b/data/train/345.jpg new file mode 100644 index 0000000..06ffb98 Binary files /dev/null and b/data/train/345.jpg differ diff --git a/data/train/346.jpg b/data/train/346.jpg new file mode 100644 index 0000000..1d622be Binary files /dev/null and b/data/train/346.jpg differ diff --git a/data/train/347.jpg b/data/train/347.jpg new file mode 100644 index 0000000..87509c6 Binary files /dev/null and b/data/train/347.jpg differ diff --git a/data/train/348.jpg b/data/train/348.jpg new file mode 100644 index 0000000..69e5388 Binary files /dev/null and b/data/train/348.jpg differ diff --git a/data/train/349.jpg b/data/train/349.jpg new file mode 100644 index 0000000..0511443 Binary files /dev/null and b/data/train/349.jpg differ diff --git a/data/train/35.jpg b/data/train/35.jpg new file mode 100644 index 0000000..bb852b2 Binary files /dev/null and b/data/train/35.jpg differ diff --git a/data/train/350.jpg b/data/train/350.jpg new file mode 100644 index 0000000..c3998e5 Binary files /dev/null and b/data/train/350.jpg differ diff --git a/data/train/351.jpg b/data/train/351.jpg new file mode 100644 index 0000000..2b54b43 Binary files /dev/null and b/data/train/351.jpg differ diff --git a/data/train/352.jpg b/data/train/352.jpg new file mode 100644 index 0000000..bb625ea Binary files /dev/null and b/data/train/352.jpg differ diff --git a/data/train/353.jpg b/data/train/353.jpg new file mode 100644 index 0000000..e18d358 Binary files /dev/null and b/data/train/353.jpg differ diff --git a/data/train/354.jpg b/data/train/354.jpg new file mode 100644 index 0000000..1597f1d Binary files /dev/null and b/data/train/354.jpg differ diff --git a/data/train/355.jpg b/data/train/355.jpg new file mode 100644 index 0000000..3f03f08 Binary files /dev/null and b/data/train/355.jpg differ diff --git a/data/train/356.jpg b/data/train/356.jpg new file mode 100644 index 0000000..9ad6275 Binary files /dev/null and b/data/train/356.jpg differ diff --git a/data/train/357.jpg b/data/train/357.jpg new file mode 100644 index 0000000..4d9bac1 Binary files /dev/null and b/data/train/357.jpg differ diff --git a/data/train/358.jpg b/data/train/358.jpg new file mode 100644 index 0000000..f6234ef Binary files /dev/null and b/data/train/358.jpg differ diff --git a/data/train/359.jpg b/data/train/359.jpg new file mode 100644 index 0000000..345a44b Binary files /dev/null and b/data/train/359.jpg differ diff --git a/data/train/36.jpg b/data/train/36.jpg new file mode 100644 index 0000000..2b9caf6 Binary files /dev/null and b/data/train/36.jpg differ diff --git a/data/train/360.jpg b/data/train/360.jpg new file mode 100644 index 0000000..24e00e3 Binary files /dev/null and b/data/train/360.jpg differ diff --git a/data/train/361.jpg b/data/train/361.jpg new file mode 100644 index 0000000..0a3d892 Binary files /dev/null and b/data/train/361.jpg differ diff --git a/data/train/362.jpg b/data/train/362.jpg new file mode 100644 index 0000000..522fa49 Binary files /dev/null and b/data/train/362.jpg differ diff --git a/data/train/363.jpg b/data/train/363.jpg new file mode 100644 index 0000000..c074aa6 Binary files /dev/null and b/data/train/363.jpg differ diff --git a/data/train/364.jpg b/data/train/364.jpg new file mode 100644 index 0000000..4f8d22c Binary files /dev/null and b/data/train/364.jpg differ diff --git a/data/train/365.jpg b/data/train/365.jpg new file mode 100644 index 0000000..bc3b281 Binary files /dev/null and b/data/train/365.jpg differ diff --git a/data/train/366.jpg b/data/train/366.jpg new file mode 100644 index 0000000..6d13e2c Binary files /dev/null and b/data/train/366.jpg differ diff --git a/data/train/367.jpg b/data/train/367.jpg new file mode 100644 index 0000000..380626c Binary files /dev/null and b/data/train/367.jpg differ diff --git a/data/train/368.jpg b/data/train/368.jpg new file mode 100644 index 0000000..2faa19b Binary files /dev/null and b/data/train/368.jpg differ diff --git a/data/train/369.jpg b/data/train/369.jpg new file mode 100644 index 0000000..b964e31 Binary files /dev/null and b/data/train/369.jpg differ diff --git a/data/train/37.jpg b/data/train/37.jpg new file mode 100644 index 0000000..e640319 Binary files /dev/null and b/data/train/37.jpg differ diff --git a/data/train/370.jpg b/data/train/370.jpg new file mode 100644 index 0000000..2064380 Binary files /dev/null and b/data/train/370.jpg differ diff --git a/data/train/371.jpg b/data/train/371.jpg new file mode 100644 index 0000000..0750482 Binary files /dev/null and b/data/train/371.jpg differ diff --git a/data/train/372.jpg b/data/train/372.jpg new file mode 100644 index 0000000..7e06a09 Binary files /dev/null and b/data/train/372.jpg differ diff --git a/data/train/373.jpg b/data/train/373.jpg new file mode 100644 index 0000000..6796c6d Binary files /dev/null and b/data/train/373.jpg differ diff --git a/data/train/374.jpg b/data/train/374.jpg new file mode 100644 index 0000000..180d976 Binary files /dev/null and b/data/train/374.jpg differ diff --git a/data/train/375.jpg b/data/train/375.jpg new file mode 100644 index 0000000..2e0d3c7 Binary files /dev/null and b/data/train/375.jpg differ diff --git a/data/train/376.jpg b/data/train/376.jpg new file mode 100644 index 0000000..323eae0 Binary files /dev/null and b/data/train/376.jpg differ diff --git a/data/train/377.jpg b/data/train/377.jpg new file mode 100644 index 0000000..bc9ff35 Binary files /dev/null and b/data/train/377.jpg differ diff --git a/data/train/378.jpg b/data/train/378.jpg new file mode 100644 index 0000000..1752c11 Binary files /dev/null and b/data/train/378.jpg differ diff --git a/data/train/379.jpg b/data/train/379.jpg new file mode 100644 index 0000000..0644902 Binary files /dev/null and b/data/train/379.jpg differ diff --git a/data/train/38.jpg b/data/train/38.jpg new file mode 100644 index 0000000..f3183ff Binary files /dev/null and b/data/train/38.jpg differ diff --git a/data/train/380.jpg b/data/train/380.jpg new file mode 100644 index 0000000..67afab0 Binary files /dev/null and b/data/train/380.jpg differ diff --git a/data/train/381.jpg b/data/train/381.jpg new file mode 100644 index 0000000..670ae30 Binary files /dev/null and b/data/train/381.jpg differ diff --git a/data/train/382.jpg b/data/train/382.jpg new file mode 100644 index 0000000..8f128bf Binary files /dev/null and b/data/train/382.jpg differ diff --git a/data/train/383.jpg b/data/train/383.jpg new file mode 100644 index 0000000..02b49e6 Binary files /dev/null and b/data/train/383.jpg differ diff --git a/data/train/384.jpg b/data/train/384.jpg new file mode 100644 index 0000000..0689ebe Binary files /dev/null and b/data/train/384.jpg differ diff --git a/data/train/385.jpg b/data/train/385.jpg new file mode 100644 index 0000000..c3a3234 Binary files /dev/null and b/data/train/385.jpg differ diff --git a/data/train/386.jpg b/data/train/386.jpg new file mode 100644 index 0000000..3f294f8 Binary files /dev/null and b/data/train/386.jpg differ diff --git a/data/train/387.jpg b/data/train/387.jpg new file mode 100644 index 0000000..58af6fd Binary files /dev/null and b/data/train/387.jpg differ diff --git a/data/train/388.jpg b/data/train/388.jpg new file mode 100644 index 0000000..2610fa4 Binary files /dev/null and b/data/train/388.jpg differ diff --git a/data/train/389.jpg b/data/train/389.jpg new file mode 100644 index 0000000..3ec84cd Binary files /dev/null and b/data/train/389.jpg differ diff --git a/data/train/39.jpg b/data/train/39.jpg new file mode 100644 index 0000000..b8f5aae Binary files /dev/null and b/data/train/39.jpg differ diff --git a/data/train/390.jpg b/data/train/390.jpg new file mode 100644 index 0000000..510c682 Binary files /dev/null and b/data/train/390.jpg differ diff --git a/data/train/391.jpg b/data/train/391.jpg new file mode 100644 index 0000000..8720e99 Binary files /dev/null and b/data/train/391.jpg differ diff --git a/data/train/392.jpg b/data/train/392.jpg new file mode 100644 index 0000000..5e56cc7 Binary files /dev/null and b/data/train/392.jpg differ diff --git a/data/train/393.jpg b/data/train/393.jpg new file mode 100644 index 0000000..1f986fd Binary files /dev/null and b/data/train/393.jpg differ diff --git a/data/train/394.jpg b/data/train/394.jpg new file mode 100644 index 0000000..a1cfa75 Binary files /dev/null and b/data/train/394.jpg differ diff --git a/data/train/395.jpg b/data/train/395.jpg new file mode 100644 index 0000000..2647904 Binary files /dev/null and b/data/train/395.jpg differ diff --git a/data/train/396.jpg b/data/train/396.jpg new file mode 100644 index 0000000..f5cea7e Binary files /dev/null and b/data/train/396.jpg differ diff --git a/data/train/397.jpg b/data/train/397.jpg new file mode 100644 index 0000000..5f5a988 Binary files /dev/null and b/data/train/397.jpg differ diff --git a/data/train/398.jpg b/data/train/398.jpg new file mode 100644 index 0000000..ddb9839 Binary files /dev/null and b/data/train/398.jpg differ diff --git a/data/train/399.jpg b/data/train/399.jpg new file mode 100644 index 0000000..e4fb5d9 Binary files /dev/null and b/data/train/399.jpg differ diff --git a/data/train/4.jpg b/data/train/4.jpg new file mode 100644 index 0000000..614ccaa Binary files /dev/null and b/data/train/4.jpg differ diff --git a/data/train/40.jpg b/data/train/40.jpg new file mode 100644 index 0000000..f9be48a Binary files /dev/null and b/data/train/40.jpg differ diff --git a/data/train/400.jpg b/data/train/400.jpg new file mode 100644 index 0000000..90a3817 Binary files /dev/null and b/data/train/400.jpg differ diff --git a/data/train/401.jpg b/data/train/401.jpg new file mode 100644 index 0000000..8d8db18 Binary files /dev/null and b/data/train/401.jpg differ diff --git a/data/train/402.jpg b/data/train/402.jpg new file mode 100644 index 0000000..e33d69a Binary files /dev/null and b/data/train/402.jpg differ diff --git a/data/train/403.jpg b/data/train/403.jpg new file mode 100644 index 0000000..4ce6eaf Binary files /dev/null and b/data/train/403.jpg differ diff --git a/data/train/404.jpg b/data/train/404.jpg new file mode 100644 index 0000000..f92a433 Binary files /dev/null and b/data/train/404.jpg differ diff --git a/data/train/405.jpg b/data/train/405.jpg new file mode 100644 index 0000000..e304a1e Binary files /dev/null and b/data/train/405.jpg differ diff --git a/data/train/406.jpg b/data/train/406.jpg new file mode 100644 index 0000000..55fb5a1 Binary files /dev/null and b/data/train/406.jpg differ diff --git a/data/train/407.jpg b/data/train/407.jpg new file mode 100644 index 0000000..a6d388f Binary files /dev/null and b/data/train/407.jpg differ diff --git a/data/train/408.jpg b/data/train/408.jpg new file mode 100644 index 0000000..b988731 Binary files /dev/null and b/data/train/408.jpg differ diff --git a/data/train/409.jpg b/data/train/409.jpg new file mode 100644 index 0000000..6bd5a89 Binary files /dev/null and b/data/train/409.jpg differ diff --git a/data/train/41.jpg b/data/train/41.jpg new file mode 100644 index 0000000..44a4f02 Binary files /dev/null and b/data/train/41.jpg differ diff --git a/data/train/410.jpg b/data/train/410.jpg new file mode 100644 index 0000000..e07222c Binary files /dev/null and b/data/train/410.jpg differ diff --git a/data/train/411.jpg b/data/train/411.jpg new file mode 100644 index 0000000..ee7a50f Binary files /dev/null and b/data/train/411.jpg differ diff --git a/data/train/412.jpg b/data/train/412.jpg new file mode 100644 index 0000000..b2a9176 Binary files /dev/null and b/data/train/412.jpg differ diff --git a/data/train/413.jpg b/data/train/413.jpg new file mode 100644 index 0000000..2ab5375 Binary files /dev/null and b/data/train/413.jpg differ diff --git a/data/train/414.jpg b/data/train/414.jpg new file mode 100644 index 0000000..2f8cd52 Binary files /dev/null and b/data/train/414.jpg differ diff --git a/data/train/415.jpg b/data/train/415.jpg new file mode 100644 index 0000000..cb624e0 Binary files /dev/null and b/data/train/415.jpg differ diff --git a/data/train/416.jpg b/data/train/416.jpg new file mode 100644 index 0000000..a3e41aa Binary files /dev/null and b/data/train/416.jpg differ diff --git a/data/train/417.jpg b/data/train/417.jpg new file mode 100644 index 0000000..0fb0e50 Binary files /dev/null and b/data/train/417.jpg differ diff --git a/data/train/418.jpg b/data/train/418.jpg new file mode 100644 index 0000000..bc351c5 Binary files /dev/null and b/data/train/418.jpg differ diff --git a/data/train/419.jpg b/data/train/419.jpg new file mode 100644 index 0000000..3e1e978 Binary files /dev/null and b/data/train/419.jpg differ diff --git a/data/train/42.jpg b/data/train/42.jpg new file mode 100644 index 0000000..6dc3c74 Binary files /dev/null and b/data/train/42.jpg differ diff --git a/data/train/420.jpg b/data/train/420.jpg new file mode 100644 index 0000000..42fe3e9 Binary files /dev/null and b/data/train/420.jpg differ diff --git a/data/train/421.jpg b/data/train/421.jpg new file mode 100644 index 0000000..c174733 Binary files /dev/null and b/data/train/421.jpg differ diff --git a/data/train/422.jpg b/data/train/422.jpg new file mode 100644 index 0000000..6a45ae8 Binary files /dev/null and b/data/train/422.jpg differ diff --git a/data/train/423.jpg b/data/train/423.jpg new file mode 100644 index 0000000..f48d692 Binary files /dev/null and b/data/train/423.jpg differ diff --git a/data/train/424.jpg b/data/train/424.jpg new file mode 100644 index 0000000..dee7a97 Binary files /dev/null and b/data/train/424.jpg differ diff --git a/data/train/425.jpg b/data/train/425.jpg new file mode 100644 index 0000000..ffed92c Binary files /dev/null and b/data/train/425.jpg differ diff --git a/data/train/426.jpg b/data/train/426.jpg new file mode 100644 index 0000000..16700a1 Binary files /dev/null and b/data/train/426.jpg differ diff --git a/data/train/427.jpg b/data/train/427.jpg new file mode 100644 index 0000000..3efd1f6 Binary files /dev/null and b/data/train/427.jpg differ diff --git a/data/train/428.jpg b/data/train/428.jpg new file mode 100644 index 0000000..f88e670 Binary files /dev/null and b/data/train/428.jpg differ diff --git a/data/train/429.jpg b/data/train/429.jpg new file mode 100644 index 0000000..62406f1 Binary files /dev/null and b/data/train/429.jpg differ diff --git a/data/train/43.jpg b/data/train/43.jpg new file mode 100644 index 0000000..87a1f84 Binary files /dev/null and b/data/train/43.jpg differ diff --git a/data/train/430.jpg b/data/train/430.jpg new file mode 100644 index 0000000..20bac04 Binary files /dev/null and b/data/train/430.jpg differ diff --git a/data/train/431.jpg b/data/train/431.jpg new file mode 100644 index 0000000..696300e Binary files /dev/null and b/data/train/431.jpg differ diff --git a/data/train/432.jpg b/data/train/432.jpg new file mode 100644 index 0000000..5fc7dfd Binary files /dev/null and b/data/train/432.jpg differ diff --git a/data/train/433.jpg b/data/train/433.jpg new file mode 100644 index 0000000..aa1a87f Binary files /dev/null and b/data/train/433.jpg differ diff --git a/data/train/434.jpg b/data/train/434.jpg new file mode 100644 index 0000000..848694a Binary files /dev/null and b/data/train/434.jpg differ diff --git a/data/train/435.jpg b/data/train/435.jpg new file mode 100644 index 0000000..dad956c Binary files /dev/null and b/data/train/435.jpg differ diff --git a/data/train/436.jpg b/data/train/436.jpg new file mode 100644 index 0000000..513b668 Binary files /dev/null and b/data/train/436.jpg differ diff --git a/data/train/437.jpg b/data/train/437.jpg new file mode 100644 index 0000000..e4a40e2 Binary files /dev/null and b/data/train/437.jpg differ diff --git a/data/train/438.jpg b/data/train/438.jpg new file mode 100644 index 0000000..26bd1ed Binary files /dev/null and b/data/train/438.jpg differ diff --git a/data/train/439.jpg b/data/train/439.jpg new file mode 100644 index 0000000..a7f1d69 Binary files /dev/null and b/data/train/439.jpg differ diff --git a/data/train/44.jpg b/data/train/44.jpg new file mode 100644 index 0000000..c55311f Binary files /dev/null and b/data/train/44.jpg differ diff --git a/data/train/440.jpg b/data/train/440.jpg new file mode 100644 index 0000000..1322b28 Binary files /dev/null and b/data/train/440.jpg differ diff --git a/data/train/441.jpg b/data/train/441.jpg new file mode 100644 index 0000000..227b609 Binary files /dev/null and b/data/train/441.jpg differ diff --git a/data/train/442.jpg b/data/train/442.jpg new file mode 100644 index 0000000..7f030cd Binary files /dev/null and b/data/train/442.jpg differ diff --git a/data/train/443.jpg b/data/train/443.jpg new file mode 100644 index 0000000..87ef9a3 Binary files /dev/null and b/data/train/443.jpg differ diff --git a/data/train/444.jpg b/data/train/444.jpg new file mode 100644 index 0000000..7080750 Binary files /dev/null and b/data/train/444.jpg differ diff --git a/data/train/445.jpg b/data/train/445.jpg new file mode 100644 index 0000000..09dc04b Binary files /dev/null and b/data/train/445.jpg differ diff --git a/data/train/446.jpg b/data/train/446.jpg new file mode 100644 index 0000000..33ebdf2 Binary files /dev/null and b/data/train/446.jpg differ diff --git a/data/train/447.jpg b/data/train/447.jpg new file mode 100644 index 0000000..4a46550 Binary files /dev/null and b/data/train/447.jpg differ diff --git a/data/train/448.jpg b/data/train/448.jpg new file mode 100644 index 0000000..d51ff3f Binary files /dev/null and b/data/train/448.jpg differ diff --git a/data/train/449.jpg b/data/train/449.jpg new file mode 100644 index 0000000..60430fb Binary files /dev/null and b/data/train/449.jpg differ diff --git a/data/train/45.jpg b/data/train/45.jpg new file mode 100644 index 0000000..a589318 Binary files /dev/null and b/data/train/45.jpg differ diff --git a/data/train/450.jpg b/data/train/450.jpg new file mode 100644 index 0000000..2f1ceaf Binary files /dev/null and b/data/train/450.jpg differ diff --git a/data/train/451.jpg b/data/train/451.jpg new file mode 100644 index 0000000..1b07baa Binary files /dev/null and b/data/train/451.jpg differ diff --git a/data/train/452.jpg b/data/train/452.jpg new file mode 100644 index 0000000..c7db3a4 Binary files /dev/null and b/data/train/452.jpg differ diff --git a/data/train/453.jpg b/data/train/453.jpg new file mode 100644 index 0000000..f60ca4b Binary files /dev/null and b/data/train/453.jpg differ diff --git a/data/train/454.jpg b/data/train/454.jpg new file mode 100644 index 0000000..ccf7ded Binary files /dev/null and b/data/train/454.jpg differ diff --git a/data/train/455.jpg b/data/train/455.jpg new file mode 100644 index 0000000..218f142 Binary files /dev/null and b/data/train/455.jpg differ diff --git a/data/train/456.jpg b/data/train/456.jpg new file mode 100644 index 0000000..8d0ca9f Binary files /dev/null and b/data/train/456.jpg differ diff --git a/data/train/457.jpg b/data/train/457.jpg new file mode 100644 index 0000000..59d50c6 Binary files /dev/null and b/data/train/457.jpg differ diff --git a/data/train/458.jpg b/data/train/458.jpg new file mode 100644 index 0000000..2ad7a1f Binary files /dev/null and b/data/train/458.jpg differ diff --git a/data/train/459.jpg b/data/train/459.jpg new file mode 100644 index 0000000..5931bcd Binary files /dev/null and b/data/train/459.jpg differ diff --git a/data/train/46.jpg b/data/train/46.jpg new file mode 100644 index 0000000..ce8719d Binary files /dev/null and b/data/train/46.jpg differ diff --git a/data/train/460.jpg b/data/train/460.jpg new file mode 100644 index 0000000..dffff50 Binary files /dev/null and b/data/train/460.jpg differ diff --git a/data/train/461.jpg b/data/train/461.jpg new file mode 100644 index 0000000..029d242 Binary files /dev/null and b/data/train/461.jpg differ diff --git a/data/train/462.jpg b/data/train/462.jpg new file mode 100644 index 0000000..4cd5f1f Binary files /dev/null and b/data/train/462.jpg differ diff --git a/data/train/463.jpg b/data/train/463.jpg new file mode 100644 index 0000000..82a1fa0 Binary files /dev/null and b/data/train/463.jpg differ diff --git a/data/train/464.jpg b/data/train/464.jpg new file mode 100644 index 0000000..51228ec Binary files /dev/null and b/data/train/464.jpg differ diff --git a/data/train/465.jpg b/data/train/465.jpg new file mode 100644 index 0000000..80a2ed8 Binary files /dev/null and b/data/train/465.jpg differ diff --git a/data/train/466.jpg b/data/train/466.jpg new file mode 100644 index 0000000..63466d8 Binary files /dev/null and b/data/train/466.jpg differ diff --git a/data/train/467.jpg b/data/train/467.jpg new file mode 100644 index 0000000..5eb3097 Binary files /dev/null and b/data/train/467.jpg differ diff --git a/data/train/468.jpg b/data/train/468.jpg new file mode 100644 index 0000000..9ce7679 Binary files /dev/null and b/data/train/468.jpg differ diff --git a/data/train/469.jpg b/data/train/469.jpg new file mode 100644 index 0000000..a8ce12c Binary files /dev/null and b/data/train/469.jpg differ diff --git a/data/train/47.jpg b/data/train/47.jpg new file mode 100644 index 0000000..fd6592a Binary files /dev/null and b/data/train/47.jpg differ diff --git a/data/train/470.jpg b/data/train/470.jpg new file mode 100644 index 0000000..8129611 Binary files /dev/null and b/data/train/470.jpg differ diff --git a/data/train/471.jpg b/data/train/471.jpg new file mode 100644 index 0000000..3b2f852 Binary files /dev/null and b/data/train/471.jpg differ diff --git a/data/train/472.jpg b/data/train/472.jpg new file mode 100644 index 0000000..789fc16 Binary files /dev/null and b/data/train/472.jpg differ diff --git a/data/train/473.jpg b/data/train/473.jpg new file mode 100644 index 0000000..9383d04 Binary files /dev/null and b/data/train/473.jpg differ diff --git a/data/train/474.jpg b/data/train/474.jpg new file mode 100644 index 0000000..cf02064 Binary files /dev/null and b/data/train/474.jpg differ diff --git a/data/train/475.jpg b/data/train/475.jpg new file mode 100644 index 0000000..935e5ab Binary files /dev/null and b/data/train/475.jpg differ diff --git a/data/train/476.jpg b/data/train/476.jpg new file mode 100644 index 0000000..b966a72 Binary files /dev/null and b/data/train/476.jpg differ diff --git a/data/train/477.jpg b/data/train/477.jpg new file mode 100644 index 0000000..b0344ab Binary files /dev/null and b/data/train/477.jpg differ diff --git a/data/train/478.jpg b/data/train/478.jpg new file mode 100644 index 0000000..7fe5238 Binary files /dev/null and b/data/train/478.jpg differ diff --git a/data/train/479.jpg b/data/train/479.jpg new file mode 100644 index 0000000..940a1d7 Binary files /dev/null and b/data/train/479.jpg differ diff --git a/data/train/48.jpg b/data/train/48.jpg new file mode 100644 index 0000000..2150efb Binary files /dev/null and b/data/train/48.jpg differ diff --git a/data/train/480.jpg b/data/train/480.jpg new file mode 100644 index 0000000..15e3319 Binary files /dev/null and b/data/train/480.jpg differ diff --git a/data/train/481.jpg b/data/train/481.jpg new file mode 100644 index 0000000..4e35b8c Binary files /dev/null and b/data/train/481.jpg differ diff --git a/data/train/482.jpg b/data/train/482.jpg new file mode 100644 index 0000000..e022294 Binary files /dev/null and b/data/train/482.jpg differ diff --git a/data/train/483.jpg b/data/train/483.jpg new file mode 100644 index 0000000..c938208 Binary files /dev/null and b/data/train/483.jpg differ diff --git a/data/train/484.jpg b/data/train/484.jpg new file mode 100644 index 0000000..970db99 Binary files /dev/null and b/data/train/484.jpg differ diff --git a/data/train/485.jpg b/data/train/485.jpg new file mode 100644 index 0000000..b362881 Binary files /dev/null and b/data/train/485.jpg differ diff --git a/data/train/486.jpg b/data/train/486.jpg new file mode 100644 index 0000000..6f67cee Binary files /dev/null and b/data/train/486.jpg differ diff --git a/data/train/487.jpg b/data/train/487.jpg new file mode 100644 index 0000000..614795a Binary files /dev/null and b/data/train/487.jpg differ diff --git a/data/train/488.jpg b/data/train/488.jpg new file mode 100644 index 0000000..a92c3d6 Binary files /dev/null and b/data/train/488.jpg differ diff --git a/data/train/489.jpg b/data/train/489.jpg new file mode 100644 index 0000000..6e0c0fb Binary files /dev/null and b/data/train/489.jpg differ diff --git a/data/train/49.jpg b/data/train/49.jpg new file mode 100644 index 0000000..25614c4 Binary files /dev/null and b/data/train/49.jpg differ diff --git a/data/train/490.jpg b/data/train/490.jpg new file mode 100644 index 0000000..05f04da Binary files /dev/null and b/data/train/490.jpg differ diff --git a/data/train/491.jpg b/data/train/491.jpg new file mode 100644 index 0000000..42f3939 Binary files /dev/null and b/data/train/491.jpg differ diff --git a/data/train/492.jpg b/data/train/492.jpg new file mode 100644 index 0000000..5135925 Binary files /dev/null and b/data/train/492.jpg differ diff --git a/data/train/493.jpg b/data/train/493.jpg new file mode 100644 index 0000000..8ebdfd8 Binary files /dev/null and b/data/train/493.jpg differ diff --git a/data/train/494.jpg b/data/train/494.jpg new file mode 100644 index 0000000..8b16148 Binary files /dev/null and b/data/train/494.jpg differ diff --git a/data/train/495.jpg b/data/train/495.jpg new file mode 100644 index 0000000..0fd156c Binary files /dev/null and b/data/train/495.jpg differ diff --git a/data/train/496.jpg b/data/train/496.jpg new file mode 100644 index 0000000..da52057 Binary files /dev/null and b/data/train/496.jpg differ diff --git a/data/train/497.jpg b/data/train/497.jpg new file mode 100644 index 0000000..65e4d05 Binary files /dev/null and b/data/train/497.jpg differ diff --git a/data/train/498.jpg b/data/train/498.jpg new file mode 100644 index 0000000..dd8f0e4 Binary files /dev/null and b/data/train/498.jpg differ diff --git a/data/train/499.jpg b/data/train/499.jpg new file mode 100644 index 0000000..0c0eac7 Binary files /dev/null and b/data/train/499.jpg differ diff --git a/data/train/5.jpg b/data/train/5.jpg new file mode 100644 index 0000000..e05f91f Binary files /dev/null and b/data/train/5.jpg differ diff --git a/data/train/50.jpg b/data/train/50.jpg new file mode 100644 index 0000000..78020b0 Binary files /dev/null and b/data/train/50.jpg differ diff --git a/data/train/500.jpg b/data/train/500.jpg new file mode 100644 index 0000000..1ecc9e7 Binary files /dev/null and b/data/train/500.jpg differ diff --git a/data/train/501.jpg b/data/train/501.jpg new file mode 100644 index 0000000..8a180c0 Binary files /dev/null and b/data/train/501.jpg differ diff --git a/data/train/502.jpg b/data/train/502.jpg new file mode 100644 index 0000000..1d7eb6d Binary files /dev/null and b/data/train/502.jpg differ diff --git a/data/train/503.jpg b/data/train/503.jpg new file mode 100644 index 0000000..5e56f66 Binary files /dev/null and b/data/train/503.jpg differ diff --git a/data/train/504.jpg b/data/train/504.jpg new file mode 100644 index 0000000..936c9fd Binary files /dev/null and b/data/train/504.jpg differ diff --git a/data/train/505.jpg b/data/train/505.jpg new file mode 100644 index 0000000..1fbf4e3 Binary files /dev/null and b/data/train/505.jpg differ diff --git a/data/train/506.jpg b/data/train/506.jpg new file mode 100644 index 0000000..f4daf96 Binary files /dev/null and b/data/train/506.jpg differ diff --git a/data/train/507.jpg b/data/train/507.jpg new file mode 100644 index 0000000..927646d Binary files /dev/null and b/data/train/507.jpg differ diff --git a/data/train/508.jpg b/data/train/508.jpg new file mode 100644 index 0000000..0c21bf2 Binary files /dev/null and b/data/train/508.jpg differ diff --git a/data/train/509.jpg b/data/train/509.jpg new file mode 100644 index 0000000..23007de Binary files /dev/null and b/data/train/509.jpg differ diff --git a/data/train/51.jpg b/data/train/51.jpg new file mode 100644 index 0000000..77ebff2 Binary files /dev/null and b/data/train/51.jpg differ diff --git a/data/train/510.jpg b/data/train/510.jpg new file mode 100644 index 0000000..1d06eab Binary files /dev/null and b/data/train/510.jpg differ diff --git a/data/train/511.jpg b/data/train/511.jpg new file mode 100644 index 0000000..ed709d6 Binary files /dev/null and b/data/train/511.jpg differ diff --git a/data/train/512.jpg b/data/train/512.jpg new file mode 100644 index 0000000..a1f4e4d Binary files /dev/null and b/data/train/512.jpg differ diff --git a/data/train/513.jpg b/data/train/513.jpg new file mode 100644 index 0000000..8bed0dc Binary files /dev/null and b/data/train/513.jpg differ diff --git a/data/train/514.jpg b/data/train/514.jpg new file mode 100644 index 0000000..ff3093d Binary files /dev/null and b/data/train/514.jpg differ diff --git a/data/train/515.jpg b/data/train/515.jpg new file mode 100644 index 0000000..9a5955f Binary files /dev/null and b/data/train/515.jpg differ diff --git a/data/train/516.jpg b/data/train/516.jpg new file mode 100644 index 0000000..1ab0315 Binary files /dev/null and b/data/train/516.jpg differ diff --git a/data/train/517.jpg b/data/train/517.jpg new file mode 100644 index 0000000..391f09e Binary files /dev/null and b/data/train/517.jpg differ diff --git a/data/train/518.jpg b/data/train/518.jpg new file mode 100644 index 0000000..4833a1e Binary files /dev/null and b/data/train/518.jpg differ diff --git a/data/train/519.jpg b/data/train/519.jpg new file mode 100644 index 0000000..825c41a Binary files /dev/null and b/data/train/519.jpg differ diff --git a/data/train/52.jpg b/data/train/52.jpg new file mode 100644 index 0000000..eb17d85 Binary files /dev/null and b/data/train/52.jpg differ diff --git a/data/train/520.jpg b/data/train/520.jpg new file mode 100644 index 0000000..e658c4f Binary files /dev/null and b/data/train/520.jpg differ diff --git a/data/train/521.jpg b/data/train/521.jpg new file mode 100644 index 0000000..cfd2cac Binary files /dev/null and b/data/train/521.jpg differ diff --git a/data/train/522.jpg b/data/train/522.jpg new file mode 100644 index 0000000..db191bc Binary files /dev/null and b/data/train/522.jpg differ diff --git a/data/train/523.jpg b/data/train/523.jpg new file mode 100644 index 0000000..c173c42 Binary files /dev/null and b/data/train/523.jpg differ diff --git a/data/train/524.jpg b/data/train/524.jpg new file mode 100644 index 0000000..5cb0b99 Binary files /dev/null and b/data/train/524.jpg differ diff --git a/data/train/525.jpg b/data/train/525.jpg new file mode 100644 index 0000000..7290373 Binary files /dev/null and b/data/train/525.jpg differ diff --git a/data/train/526.jpg b/data/train/526.jpg new file mode 100644 index 0000000..92c7436 Binary files /dev/null and b/data/train/526.jpg differ diff --git a/data/train/527.jpg b/data/train/527.jpg new file mode 100644 index 0000000..b4cf49e Binary files /dev/null and b/data/train/527.jpg differ diff --git a/data/train/528.jpg b/data/train/528.jpg new file mode 100644 index 0000000..47d4968 Binary files /dev/null and b/data/train/528.jpg differ diff --git a/data/train/529.jpg b/data/train/529.jpg new file mode 100644 index 0000000..e850d31 Binary files /dev/null and b/data/train/529.jpg differ diff --git a/data/train/53.jpg b/data/train/53.jpg new file mode 100644 index 0000000..f498758 Binary files /dev/null and b/data/train/53.jpg differ diff --git a/data/train/530.jpg b/data/train/530.jpg new file mode 100644 index 0000000..09b2a46 Binary files /dev/null and b/data/train/530.jpg differ diff --git a/data/train/531.jpg b/data/train/531.jpg new file mode 100644 index 0000000..2fe1d34 Binary files /dev/null and b/data/train/531.jpg differ diff --git a/data/train/532.jpg b/data/train/532.jpg new file mode 100644 index 0000000..5588c30 Binary files /dev/null and b/data/train/532.jpg differ diff --git a/data/train/533.jpg b/data/train/533.jpg new file mode 100644 index 0000000..985b812 Binary files /dev/null and b/data/train/533.jpg differ diff --git a/data/train/534.jpg b/data/train/534.jpg new file mode 100644 index 0000000..d2962c2 Binary files /dev/null and b/data/train/534.jpg differ diff --git a/data/train/535.jpg b/data/train/535.jpg new file mode 100644 index 0000000..9e66198 Binary files /dev/null and b/data/train/535.jpg differ diff --git a/data/train/536.jpg b/data/train/536.jpg new file mode 100644 index 0000000..0281d8d Binary files /dev/null and b/data/train/536.jpg differ diff --git a/data/train/537.jpg b/data/train/537.jpg new file mode 100644 index 0000000..4ed0a55 Binary files /dev/null and b/data/train/537.jpg differ diff --git a/data/train/538.jpg b/data/train/538.jpg new file mode 100644 index 0000000..6826498 Binary files /dev/null and b/data/train/538.jpg differ diff --git a/data/train/539.jpg b/data/train/539.jpg new file mode 100644 index 0000000..35540b5 Binary files /dev/null and b/data/train/539.jpg differ diff --git a/data/train/54.jpg b/data/train/54.jpg new file mode 100644 index 0000000..dcd3d13 Binary files /dev/null and b/data/train/54.jpg differ diff --git a/data/train/540.jpg b/data/train/540.jpg new file mode 100644 index 0000000..2ff2985 Binary files /dev/null and b/data/train/540.jpg differ diff --git a/data/train/541.jpg b/data/train/541.jpg new file mode 100644 index 0000000..9aa29da Binary files /dev/null and b/data/train/541.jpg differ diff --git a/data/train/542.jpg b/data/train/542.jpg new file mode 100644 index 0000000..0dfb74b Binary files /dev/null and b/data/train/542.jpg differ diff --git a/data/train/543.jpg b/data/train/543.jpg new file mode 100644 index 0000000..f1f7a47 Binary files /dev/null and b/data/train/543.jpg differ diff --git a/data/train/544.jpg b/data/train/544.jpg new file mode 100644 index 0000000..6c3a37a Binary files /dev/null and b/data/train/544.jpg differ diff --git a/data/train/545.jpg b/data/train/545.jpg new file mode 100644 index 0000000..5d11ddc Binary files /dev/null and b/data/train/545.jpg differ diff --git a/data/train/546.jpg b/data/train/546.jpg new file mode 100644 index 0000000..3914b03 Binary files /dev/null and b/data/train/546.jpg differ diff --git a/data/train/547.jpg b/data/train/547.jpg new file mode 100644 index 0000000..bc07993 Binary files /dev/null and b/data/train/547.jpg differ diff --git a/data/train/548.jpg b/data/train/548.jpg new file mode 100644 index 0000000..99702b3 Binary files /dev/null and b/data/train/548.jpg differ diff --git a/data/train/549.jpg b/data/train/549.jpg new file mode 100644 index 0000000..b80a57d Binary files /dev/null and b/data/train/549.jpg differ diff --git a/data/train/55.jpg b/data/train/55.jpg new file mode 100644 index 0000000..a184244 Binary files /dev/null and b/data/train/55.jpg differ diff --git a/data/train/550.jpg b/data/train/550.jpg new file mode 100644 index 0000000..685529b Binary files /dev/null and b/data/train/550.jpg differ diff --git a/data/train/551.jpg b/data/train/551.jpg new file mode 100644 index 0000000..ca2890b Binary files /dev/null and b/data/train/551.jpg differ diff --git a/data/train/552.jpg b/data/train/552.jpg new file mode 100644 index 0000000..9e76aee Binary files /dev/null and b/data/train/552.jpg differ diff --git a/data/train/553.jpg b/data/train/553.jpg new file mode 100644 index 0000000..1d8df14 Binary files /dev/null and b/data/train/553.jpg differ diff --git a/data/train/554.jpg b/data/train/554.jpg new file mode 100644 index 0000000..2152fb0 Binary files /dev/null and b/data/train/554.jpg differ diff --git a/data/train/555.jpg b/data/train/555.jpg new file mode 100644 index 0000000..796817d Binary files /dev/null and b/data/train/555.jpg differ diff --git a/data/train/556.jpg b/data/train/556.jpg new file mode 100644 index 0000000..12e27c3 Binary files /dev/null and b/data/train/556.jpg differ diff --git a/data/train/557.jpg b/data/train/557.jpg new file mode 100644 index 0000000..645025e Binary files /dev/null and b/data/train/557.jpg differ diff --git a/data/train/558.jpg b/data/train/558.jpg new file mode 100644 index 0000000..43bae78 Binary files /dev/null and b/data/train/558.jpg differ diff --git a/data/train/559.jpg b/data/train/559.jpg new file mode 100644 index 0000000..6331e9b Binary files /dev/null and b/data/train/559.jpg differ diff --git a/data/train/56.jpg b/data/train/56.jpg new file mode 100644 index 0000000..dde9f15 Binary files /dev/null and b/data/train/56.jpg differ diff --git a/data/train/560.jpg b/data/train/560.jpg new file mode 100644 index 0000000..bf0d122 Binary files /dev/null and b/data/train/560.jpg differ diff --git a/data/train/561.jpg b/data/train/561.jpg new file mode 100644 index 0000000..ce5e059 Binary files /dev/null and b/data/train/561.jpg differ diff --git a/data/train/562.jpg b/data/train/562.jpg new file mode 100644 index 0000000..e29064f Binary files /dev/null and b/data/train/562.jpg differ diff --git a/data/train/563.jpg b/data/train/563.jpg new file mode 100644 index 0000000..dcc5edf Binary files /dev/null and b/data/train/563.jpg differ diff --git a/data/train/564.jpg b/data/train/564.jpg new file mode 100644 index 0000000..62dcafa Binary files /dev/null and b/data/train/564.jpg differ diff --git a/data/train/565.jpg b/data/train/565.jpg new file mode 100644 index 0000000..14124d1 Binary files /dev/null and b/data/train/565.jpg differ diff --git a/data/train/566.jpg b/data/train/566.jpg new file mode 100644 index 0000000..6cb50e0 Binary files /dev/null and b/data/train/566.jpg differ diff --git a/data/train/567.jpg b/data/train/567.jpg new file mode 100644 index 0000000..82807ed Binary files /dev/null and b/data/train/567.jpg differ diff --git a/data/train/568.jpg b/data/train/568.jpg new file mode 100644 index 0000000..14cbade Binary files /dev/null and b/data/train/568.jpg differ diff --git a/data/train/569.jpg b/data/train/569.jpg new file mode 100644 index 0000000..6f26823 Binary files /dev/null and b/data/train/569.jpg differ diff --git a/data/train/57.jpg b/data/train/57.jpg new file mode 100644 index 0000000..015de43 Binary files /dev/null and b/data/train/57.jpg differ diff --git a/data/train/570.jpg b/data/train/570.jpg new file mode 100644 index 0000000..1c29125 Binary files /dev/null and b/data/train/570.jpg differ diff --git a/data/train/571.jpg b/data/train/571.jpg new file mode 100644 index 0000000..bc4dec5 Binary files /dev/null and b/data/train/571.jpg differ diff --git a/data/train/572.jpg b/data/train/572.jpg new file mode 100644 index 0000000..0f6a0c0 Binary files /dev/null and b/data/train/572.jpg differ diff --git a/data/train/573.jpg b/data/train/573.jpg new file mode 100644 index 0000000..1964748 Binary files /dev/null and b/data/train/573.jpg differ diff --git a/data/train/574.jpg b/data/train/574.jpg new file mode 100644 index 0000000..598f866 Binary files /dev/null and b/data/train/574.jpg differ diff --git a/data/train/575.jpg b/data/train/575.jpg new file mode 100644 index 0000000..323e24f Binary files /dev/null and b/data/train/575.jpg differ diff --git a/data/train/576.jpg b/data/train/576.jpg new file mode 100644 index 0000000..a0c6434 Binary files /dev/null and b/data/train/576.jpg differ diff --git a/data/train/577.jpg b/data/train/577.jpg new file mode 100644 index 0000000..467017d Binary files /dev/null and b/data/train/577.jpg differ diff --git a/data/train/578.jpg b/data/train/578.jpg new file mode 100644 index 0000000..f04e47e Binary files /dev/null and b/data/train/578.jpg differ diff --git a/data/train/579.jpg b/data/train/579.jpg new file mode 100644 index 0000000..d313a43 Binary files /dev/null and b/data/train/579.jpg differ diff --git a/data/train/58.jpg b/data/train/58.jpg new file mode 100644 index 0000000..09f7e7d Binary files /dev/null and b/data/train/58.jpg differ diff --git a/data/train/580.jpg b/data/train/580.jpg new file mode 100644 index 0000000..620ce14 Binary files /dev/null and b/data/train/580.jpg differ diff --git a/data/train/581.jpg b/data/train/581.jpg new file mode 100644 index 0000000..e33b068 Binary files /dev/null and b/data/train/581.jpg differ diff --git a/data/train/582.jpg b/data/train/582.jpg new file mode 100644 index 0000000..b0345a2 Binary files /dev/null and b/data/train/582.jpg differ diff --git a/data/train/583.jpg b/data/train/583.jpg new file mode 100644 index 0000000..b6322c7 Binary files /dev/null and b/data/train/583.jpg differ diff --git a/data/train/584.jpg b/data/train/584.jpg new file mode 100644 index 0000000..55f734f Binary files /dev/null and b/data/train/584.jpg differ diff --git a/data/train/585.jpg b/data/train/585.jpg new file mode 100644 index 0000000..8daf689 Binary files /dev/null and b/data/train/585.jpg differ diff --git a/data/train/586.jpg b/data/train/586.jpg new file mode 100644 index 0000000..014e271 Binary files /dev/null and b/data/train/586.jpg differ diff --git a/data/train/587.jpg b/data/train/587.jpg new file mode 100644 index 0000000..06c7043 Binary files /dev/null and b/data/train/587.jpg differ diff --git a/data/train/588.jpg b/data/train/588.jpg new file mode 100644 index 0000000..13d9e32 Binary files /dev/null and b/data/train/588.jpg differ diff --git a/data/train/589.jpg b/data/train/589.jpg new file mode 100644 index 0000000..2e73745 Binary files /dev/null and b/data/train/589.jpg differ diff --git a/data/train/59.jpg b/data/train/59.jpg new file mode 100644 index 0000000..c5a3bea Binary files /dev/null and b/data/train/59.jpg differ diff --git a/data/train/590.jpg b/data/train/590.jpg new file mode 100644 index 0000000..53cfbd5 Binary files /dev/null and b/data/train/590.jpg differ diff --git a/data/train/591.jpg b/data/train/591.jpg new file mode 100644 index 0000000..669c866 Binary files /dev/null and b/data/train/591.jpg differ diff --git a/data/train/592.jpg b/data/train/592.jpg new file mode 100644 index 0000000..4be33ef Binary files /dev/null and b/data/train/592.jpg differ diff --git a/data/train/593.jpg b/data/train/593.jpg new file mode 100644 index 0000000..3fc3a7f Binary files /dev/null and b/data/train/593.jpg differ diff --git a/data/train/594.jpg b/data/train/594.jpg new file mode 100644 index 0000000..93d64e8 Binary files /dev/null and b/data/train/594.jpg differ diff --git a/data/train/595.jpg b/data/train/595.jpg new file mode 100644 index 0000000..83a77d1 Binary files /dev/null and b/data/train/595.jpg differ diff --git a/data/train/596.jpg b/data/train/596.jpg new file mode 100644 index 0000000..6ee00a2 Binary files /dev/null and b/data/train/596.jpg differ diff --git a/data/train/597.jpg b/data/train/597.jpg new file mode 100644 index 0000000..3d61524 Binary files /dev/null and b/data/train/597.jpg differ diff --git a/data/train/598.jpg b/data/train/598.jpg new file mode 100644 index 0000000..487cbb9 Binary files /dev/null and b/data/train/598.jpg differ diff --git a/data/train/599.jpg b/data/train/599.jpg new file mode 100644 index 0000000..310bab2 Binary files /dev/null and b/data/train/599.jpg differ diff --git a/data/train/6.jpg b/data/train/6.jpg new file mode 100644 index 0000000..086de0d Binary files /dev/null and b/data/train/6.jpg differ diff --git a/data/train/60.jpg b/data/train/60.jpg new file mode 100644 index 0000000..66a7636 Binary files /dev/null and b/data/train/60.jpg differ diff --git a/data/train/600.jpg b/data/train/600.jpg new file mode 100644 index 0000000..96fe491 Binary files /dev/null and b/data/train/600.jpg differ diff --git a/data/train/601.jpg b/data/train/601.jpg new file mode 100644 index 0000000..6c43d54 Binary files /dev/null and b/data/train/601.jpg differ diff --git a/data/train/602.jpg b/data/train/602.jpg new file mode 100644 index 0000000..b4ff2b7 Binary files /dev/null and b/data/train/602.jpg differ diff --git a/data/train/603.jpg b/data/train/603.jpg new file mode 100644 index 0000000..6e99787 Binary files /dev/null and b/data/train/603.jpg differ diff --git a/data/train/604.jpg b/data/train/604.jpg new file mode 100644 index 0000000..ecc0ae2 Binary files /dev/null and b/data/train/604.jpg differ diff --git a/data/train/605.jpg b/data/train/605.jpg new file mode 100644 index 0000000..c942625 Binary files /dev/null and b/data/train/605.jpg differ diff --git a/data/train/606.jpg b/data/train/606.jpg new file mode 100644 index 0000000..138945f Binary files /dev/null and b/data/train/606.jpg differ diff --git a/data/train/607.jpg b/data/train/607.jpg new file mode 100644 index 0000000..d5eda28 Binary files /dev/null and b/data/train/607.jpg differ diff --git a/data/train/608.jpg b/data/train/608.jpg new file mode 100644 index 0000000..0454757 Binary files /dev/null and b/data/train/608.jpg differ diff --git a/data/train/609.jpg b/data/train/609.jpg new file mode 100644 index 0000000..b7fdcc4 Binary files /dev/null and b/data/train/609.jpg differ diff --git a/data/train/61.jpg b/data/train/61.jpg new file mode 100644 index 0000000..3728ef2 Binary files /dev/null and b/data/train/61.jpg differ diff --git a/data/train/610.jpg b/data/train/610.jpg new file mode 100644 index 0000000..027fb64 Binary files /dev/null and b/data/train/610.jpg differ diff --git a/data/train/611.jpg b/data/train/611.jpg new file mode 100644 index 0000000..f453b2d Binary files /dev/null and b/data/train/611.jpg differ diff --git a/data/train/612.jpg b/data/train/612.jpg new file mode 100644 index 0000000..4464d26 Binary files /dev/null and b/data/train/612.jpg differ diff --git a/data/train/613.jpg b/data/train/613.jpg new file mode 100644 index 0000000..cbe82cf Binary files /dev/null and b/data/train/613.jpg differ diff --git a/data/train/614.jpg b/data/train/614.jpg new file mode 100644 index 0000000..69960f6 Binary files /dev/null and b/data/train/614.jpg differ diff --git a/data/train/615.jpg b/data/train/615.jpg new file mode 100644 index 0000000..b6b3d3d Binary files /dev/null and b/data/train/615.jpg differ diff --git a/data/train/616.jpg b/data/train/616.jpg new file mode 100644 index 0000000..dd95649 Binary files /dev/null and b/data/train/616.jpg differ diff --git a/data/train/617.jpg b/data/train/617.jpg new file mode 100644 index 0000000..99d003f Binary files /dev/null and b/data/train/617.jpg differ diff --git a/data/train/618.jpg b/data/train/618.jpg new file mode 100644 index 0000000..4867aae Binary files /dev/null and b/data/train/618.jpg differ diff --git a/data/train/619.jpg b/data/train/619.jpg new file mode 100644 index 0000000..3d5c1b5 Binary files /dev/null and b/data/train/619.jpg differ diff --git a/data/train/62.jpg b/data/train/62.jpg new file mode 100644 index 0000000..570e46a Binary files /dev/null and b/data/train/62.jpg differ diff --git a/data/train/620.jpg b/data/train/620.jpg new file mode 100644 index 0000000..2358655 Binary files /dev/null and b/data/train/620.jpg differ diff --git a/data/train/621.jpg b/data/train/621.jpg new file mode 100644 index 0000000..267db45 Binary files /dev/null and b/data/train/621.jpg differ diff --git a/data/train/622.jpg b/data/train/622.jpg new file mode 100644 index 0000000..f8bd629 Binary files /dev/null and b/data/train/622.jpg differ diff --git a/data/train/623.jpg b/data/train/623.jpg new file mode 100644 index 0000000..8813156 Binary files /dev/null and b/data/train/623.jpg differ diff --git a/data/train/624.jpg b/data/train/624.jpg new file mode 100644 index 0000000..12d46ac Binary files /dev/null and b/data/train/624.jpg differ diff --git a/data/train/625.jpg b/data/train/625.jpg new file mode 100644 index 0000000..ba13294 Binary files /dev/null and b/data/train/625.jpg differ diff --git a/data/train/626.jpg b/data/train/626.jpg new file mode 100644 index 0000000..06d284c Binary files /dev/null and b/data/train/626.jpg differ diff --git a/data/train/627.jpg b/data/train/627.jpg new file mode 100644 index 0000000..e5673e5 Binary files /dev/null and b/data/train/627.jpg differ diff --git a/data/train/628.jpg b/data/train/628.jpg new file mode 100644 index 0000000..3490a93 Binary files /dev/null and b/data/train/628.jpg differ diff --git a/data/train/629.jpg b/data/train/629.jpg new file mode 100644 index 0000000..7302b56 Binary files /dev/null and b/data/train/629.jpg differ diff --git a/data/train/63.jpg b/data/train/63.jpg new file mode 100644 index 0000000..863b495 Binary files /dev/null and b/data/train/63.jpg differ diff --git a/data/train/630.jpg b/data/train/630.jpg new file mode 100644 index 0000000..0de2d81 Binary files /dev/null and b/data/train/630.jpg differ diff --git a/data/train/631.jpg b/data/train/631.jpg new file mode 100644 index 0000000..a08e1d3 Binary files /dev/null and b/data/train/631.jpg differ diff --git a/data/train/632.jpg b/data/train/632.jpg new file mode 100644 index 0000000..1a40163 Binary files /dev/null and b/data/train/632.jpg differ diff --git a/data/train/633.jpg b/data/train/633.jpg new file mode 100644 index 0000000..0df8cdb Binary files /dev/null and b/data/train/633.jpg differ diff --git a/data/train/634.jpg b/data/train/634.jpg new file mode 100644 index 0000000..7108040 Binary files /dev/null and b/data/train/634.jpg differ diff --git a/data/train/635.jpg b/data/train/635.jpg new file mode 100644 index 0000000..efa21ea Binary files /dev/null and b/data/train/635.jpg differ diff --git a/data/train/636.jpg b/data/train/636.jpg new file mode 100644 index 0000000..2fe3772 Binary files /dev/null and b/data/train/636.jpg differ diff --git a/data/train/637.jpg b/data/train/637.jpg new file mode 100644 index 0000000..5a94097 Binary files /dev/null and b/data/train/637.jpg differ diff --git a/data/train/638.jpg b/data/train/638.jpg new file mode 100644 index 0000000..9dbddf3 Binary files /dev/null and b/data/train/638.jpg differ diff --git a/data/train/639.jpg b/data/train/639.jpg new file mode 100644 index 0000000..0a87690 Binary files /dev/null and b/data/train/639.jpg differ diff --git a/data/train/64.jpg b/data/train/64.jpg new file mode 100644 index 0000000..ba08820 Binary files /dev/null and b/data/train/64.jpg differ diff --git a/data/train/640.jpg b/data/train/640.jpg new file mode 100644 index 0000000..fb86bc3 Binary files /dev/null and b/data/train/640.jpg differ diff --git a/data/train/641.jpg b/data/train/641.jpg new file mode 100644 index 0000000..8de6481 Binary files /dev/null and b/data/train/641.jpg differ diff --git a/data/train/642.jpg b/data/train/642.jpg new file mode 100644 index 0000000..3b9e01c Binary files /dev/null and b/data/train/642.jpg differ diff --git a/data/train/643.jpg b/data/train/643.jpg new file mode 100644 index 0000000..b83c17d Binary files /dev/null and b/data/train/643.jpg differ diff --git a/data/train/644.jpg b/data/train/644.jpg new file mode 100644 index 0000000..2c8e208 Binary files /dev/null and b/data/train/644.jpg differ diff --git a/data/train/645.jpg b/data/train/645.jpg new file mode 100644 index 0000000..281959d Binary files /dev/null and b/data/train/645.jpg differ diff --git a/data/train/646.jpg b/data/train/646.jpg new file mode 100644 index 0000000..7917d82 Binary files /dev/null and b/data/train/646.jpg differ diff --git a/data/train/647.jpg b/data/train/647.jpg new file mode 100644 index 0000000..0841fa5 Binary files /dev/null and b/data/train/647.jpg differ diff --git a/data/train/648.jpg b/data/train/648.jpg new file mode 100644 index 0000000..61592a7 Binary files /dev/null and b/data/train/648.jpg differ diff --git a/data/train/649.jpg b/data/train/649.jpg new file mode 100644 index 0000000..2b57267 Binary files /dev/null and b/data/train/649.jpg differ diff --git a/data/train/65.jpg b/data/train/65.jpg new file mode 100644 index 0000000..39c748f Binary files /dev/null and b/data/train/65.jpg differ diff --git a/data/train/650.jpg b/data/train/650.jpg new file mode 100644 index 0000000..f92f6c0 Binary files /dev/null and b/data/train/650.jpg differ diff --git a/data/train/651.jpg b/data/train/651.jpg new file mode 100644 index 0000000..3d19f74 Binary files /dev/null and b/data/train/651.jpg differ diff --git a/data/train/652.jpg b/data/train/652.jpg new file mode 100644 index 0000000..69dcba7 Binary files /dev/null and b/data/train/652.jpg differ diff --git a/data/train/653.jpg b/data/train/653.jpg new file mode 100644 index 0000000..949de76 Binary files /dev/null and b/data/train/653.jpg differ diff --git a/data/train/654.jpg b/data/train/654.jpg new file mode 100644 index 0000000..7ce16a5 Binary files /dev/null and b/data/train/654.jpg differ diff --git a/data/train/655.jpg b/data/train/655.jpg new file mode 100644 index 0000000..3095df2 Binary files /dev/null and b/data/train/655.jpg differ diff --git a/data/train/656.jpg b/data/train/656.jpg new file mode 100644 index 0000000..a48fee8 Binary files /dev/null and b/data/train/656.jpg differ diff --git a/data/train/657.jpg b/data/train/657.jpg new file mode 100644 index 0000000..b5abbae Binary files /dev/null and b/data/train/657.jpg differ diff --git a/data/train/658.jpg b/data/train/658.jpg new file mode 100644 index 0000000..946d54a Binary files /dev/null and b/data/train/658.jpg differ diff --git a/data/train/659.jpg b/data/train/659.jpg new file mode 100644 index 0000000..a201750 Binary files /dev/null and b/data/train/659.jpg differ diff --git a/data/train/66.jpg b/data/train/66.jpg new file mode 100644 index 0000000..a1ed1a1 Binary files /dev/null and b/data/train/66.jpg differ diff --git a/data/train/660.jpg b/data/train/660.jpg new file mode 100644 index 0000000..d238cab Binary files /dev/null and b/data/train/660.jpg differ diff --git a/data/train/661.jpg b/data/train/661.jpg new file mode 100644 index 0000000..424d484 Binary files /dev/null and b/data/train/661.jpg differ diff --git a/data/train/662.jpg b/data/train/662.jpg new file mode 100644 index 0000000..5a79235 Binary files /dev/null and b/data/train/662.jpg differ diff --git a/data/train/663.jpg b/data/train/663.jpg new file mode 100644 index 0000000..db1b9ea Binary files /dev/null and b/data/train/663.jpg differ diff --git a/data/train/664.jpg b/data/train/664.jpg new file mode 100644 index 0000000..7874515 Binary files /dev/null and b/data/train/664.jpg differ diff --git a/data/train/665.jpg b/data/train/665.jpg new file mode 100644 index 0000000..f21033c Binary files /dev/null and b/data/train/665.jpg differ diff --git a/data/train/666.jpg b/data/train/666.jpg new file mode 100644 index 0000000..3b0c567 Binary files /dev/null and b/data/train/666.jpg differ diff --git a/data/train/667.jpg b/data/train/667.jpg new file mode 100644 index 0000000..25abc8f Binary files /dev/null and b/data/train/667.jpg differ diff --git a/data/train/668.jpg b/data/train/668.jpg new file mode 100644 index 0000000..0f34855 Binary files /dev/null and b/data/train/668.jpg differ diff --git a/data/train/669.jpg b/data/train/669.jpg new file mode 100644 index 0000000..d4e3bd9 Binary files /dev/null and b/data/train/669.jpg differ diff --git a/data/train/67.jpg b/data/train/67.jpg new file mode 100644 index 0000000..771e5c0 Binary files /dev/null and b/data/train/67.jpg differ diff --git a/data/train/670.jpg b/data/train/670.jpg new file mode 100644 index 0000000..f3e330c Binary files /dev/null and b/data/train/670.jpg differ diff --git a/data/train/671.jpg b/data/train/671.jpg new file mode 100644 index 0000000..bea8603 Binary files /dev/null and b/data/train/671.jpg differ diff --git a/data/train/672.jpg b/data/train/672.jpg new file mode 100644 index 0000000..f12c754 Binary files /dev/null and b/data/train/672.jpg differ diff --git a/data/train/673.jpg b/data/train/673.jpg new file mode 100644 index 0000000..56c8b1a Binary files /dev/null and b/data/train/673.jpg differ diff --git a/data/train/674.jpg b/data/train/674.jpg new file mode 100644 index 0000000..e753d91 Binary files /dev/null and b/data/train/674.jpg differ diff --git a/data/train/675.jpg b/data/train/675.jpg new file mode 100644 index 0000000..52758c6 Binary files /dev/null and b/data/train/675.jpg differ diff --git a/data/train/676.jpg b/data/train/676.jpg new file mode 100644 index 0000000..79dd035 Binary files /dev/null and b/data/train/676.jpg differ diff --git a/data/train/677.jpg b/data/train/677.jpg new file mode 100644 index 0000000..07c8223 Binary files /dev/null and b/data/train/677.jpg differ diff --git a/data/train/678.jpg b/data/train/678.jpg new file mode 100644 index 0000000..42aa924 Binary files /dev/null and b/data/train/678.jpg differ diff --git a/data/train/679.jpg b/data/train/679.jpg new file mode 100644 index 0000000..051586c Binary files /dev/null and b/data/train/679.jpg differ diff --git a/data/train/68.jpg b/data/train/68.jpg new file mode 100644 index 0000000..6cf41a5 Binary files /dev/null and b/data/train/68.jpg differ diff --git a/data/train/680.jpg b/data/train/680.jpg new file mode 100644 index 0000000..eff12e2 Binary files /dev/null and b/data/train/680.jpg differ diff --git a/data/train/681.jpg b/data/train/681.jpg new file mode 100644 index 0000000..91dcbd3 Binary files /dev/null and b/data/train/681.jpg differ diff --git a/data/train/682.jpg b/data/train/682.jpg new file mode 100644 index 0000000..958763a Binary files /dev/null and b/data/train/682.jpg differ diff --git a/data/train/683.jpg b/data/train/683.jpg new file mode 100644 index 0000000..42ff2f2 Binary files /dev/null and b/data/train/683.jpg differ diff --git a/data/train/684.jpg b/data/train/684.jpg new file mode 100644 index 0000000..d6137ce Binary files /dev/null and b/data/train/684.jpg differ diff --git a/data/train/685.jpg b/data/train/685.jpg new file mode 100644 index 0000000..f81dcb4 Binary files /dev/null and b/data/train/685.jpg differ diff --git a/data/train/686.jpg b/data/train/686.jpg new file mode 100644 index 0000000..5e17fb6 Binary files /dev/null and b/data/train/686.jpg differ diff --git a/data/train/687.jpg b/data/train/687.jpg new file mode 100644 index 0000000..e4a3883 Binary files /dev/null and b/data/train/687.jpg differ diff --git a/data/train/688.jpg b/data/train/688.jpg new file mode 100644 index 0000000..d65bbf6 Binary files /dev/null and b/data/train/688.jpg differ diff --git a/data/train/689.jpg b/data/train/689.jpg new file mode 100644 index 0000000..ec3d35e Binary files /dev/null and b/data/train/689.jpg differ diff --git a/data/train/69.jpg b/data/train/69.jpg new file mode 100644 index 0000000..4871925 Binary files /dev/null and b/data/train/69.jpg differ diff --git a/data/train/690.jpg b/data/train/690.jpg new file mode 100644 index 0000000..48b77c0 Binary files /dev/null and b/data/train/690.jpg differ diff --git a/data/train/691.jpg b/data/train/691.jpg new file mode 100644 index 0000000..154e8cf Binary files /dev/null and b/data/train/691.jpg differ diff --git a/data/train/692.jpg b/data/train/692.jpg new file mode 100644 index 0000000..ffa49bd Binary files /dev/null and b/data/train/692.jpg differ diff --git a/data/train/693.jpg b/data/train/693.jpg new file mode 100644 index 0000000..3eb460a Binary files /dev/null and b/data/train/693.jpg differ diff --git a/data/train/694.jpg b/data/train/694.jpg new file mode 100644 index 0000000..9d52b83 Binary files /dev/null and b/data/train/694.jpg differ diff --git a/data/train/695.jpg b/data/train/695.jpg new file mode 100644 index 0000000..a2695f0 Binary files /dev/null and b/data/train/695.jpg differ diff --git a/data/train/696.jpg b/data/train/696.jpg new file mode 100644 index 0000000..f934eca Binary files /dev/null and b/data/train/696.jpg differ diff --git a/data/train/697.jpg b/data/train/697.jpg new file mode 100644 index 0000000..ae7fe0a Binary files /dev/null and b/data/train/697.jpg differ diff --git a/data/train/698.jpg b/data/train/698.jpg new file mode 100644 index 0000000..314407d Binary files /dev/null and b/data/train/698.jpg differ diff --git a/data/train/699.jpg b/data/train/699.jpg new file mode 100644 index 0000000..87ed8ad Binary files /dev/null and b/data/train/699.jpg differ diff --git a/data/train/7.jpg b/data/train/7.jpg new file mode 100644 index 0000000..b70c3ea Binary files /dev/null and b/data/train/7.jpg differ diff --git a/data/train/70.jpg b/data/train/70.jpg new file mode 100644 index 0000000..95913c1 Binary files /dev/null and b/data/train/70.jpg differ diff --git a/data/train/700.jpg b/data/train/700.jpg new file mode 100644 index 0000000..b6cd0c7 Binary files /dev/null and b/data/train/700.jpg differ diff --git a/data/train/701.jpg b/data/train/701.jpg new file mode 100644 index 0000000..045d90d Binary files /dev/null and b/data/train/701.jpg differ diff --git a/data/train/702.jpg b/data/train/702.jpg new file mode 100644 index 0000000..6fa2037 Binary files /dev/null and b/data/train/702.jpg differ diff --git a/data/train/703.jpg b/data/train/703.jpg new file mode 100644 index 0000000..3283a81 Binary files /dev/null and b/data/train/703.jpg differ diff --git a/data/train/704.jpg b/data/train/704.jpg new file mode 100644 index 0000000..2d5e97d Binary files /dev/null and b/data/train/704.jpg differ diff --git a/data/train/705.jpg b/data/train/705.jpg new file mode 100644 index 0000000..91dfd29 Binary files /dev/null and b/data/train/705.jpg differ diff --git a/data/train/706.jpg b/data/train/706.jpg new file mode 100644 index 0000000..c4c80a2 Binary files /dev/null and b/data/train/706.jpg differ diff --git a/data/train/707.jpg b/data/train/707.jpg new file mode 100644 index 0000000..48e86b9 Binary files /dev/null and b/data/train/707.jpg differ diff --git a/data/train/708.jpg b/data/train/708.jpg new file mode 100644 index 0000000..0bce85e Binary files /dev/null and b/data/train/708.jpg differ diff --git a/data/train/709.jpg b/data/train/709.jpg new file mode 100644 index 0000000..73019ae Binary files /dev/null and b/data/train/709.jpg differ diff --git a/data/train/71.jpg b/data/train/71.jpg new file mode 100644 index 0000000..c77157a Binary files /dev/null and b/data/train/71.jpg differ diff --git a/data/train/710.jpg b/data/train/710.jpg new file mode 100644 index 0000000..8829522 Binary files /dev/null and b/data/train/710.jpg differ diff --git a/data/train/711.jpg b/data/train/711.jpg new file mode 100644 index 0000000..09c2fc1 Binary files /dev/null and b/data/train/711.jpg differ diff --git a/data/train/712.jpg b/data/train/712.jpg new file mode 100644 index 0000000..ac5eeeb Binary files /dev/null and b/data/train/712.jpg differ diff --git a/data/train/713.jpg b/data/train/713.jpg new file mode 100644 index 0000000..732dd5a Binary files /dev/null and b/data/train/713.jpg differ diff --git a/data/train/714.jpg b/data/train/714.jpg new file mode 100644 index 0000000..52b24aa Binary files /dev/null and b/data/train/714.jpg differ diff --git a/data/train/715.jpg b/data/train/715.jpg new file mode 100644 index 0000000..13d2f7a Binary files /dev/null and b/data/train/715.jpg differ diff --git a/data/train/716.jpg b/data/train/716.jpg new file mode 100644 index 0000000..0bae91d Binary files /dev/null and b/data/train/716.jpg differ diff --git a/data/train/717.jpg b/data/train/717.jpg new file mode 100644 index 0000000..b447b9e Binary files /dev/null and b/data/train/717.jpg differ diff --git a/data/train/718.jpg b/data/train/718.jpg new file mode 100644 index 0000000..ac5eeeb Binary files /dev/null and b/data/train/718.jpg differ diff --git a/data/train/719.jpg b/data/train/719.jpg new file mode 100644 index 0000000..f65e115 Binary files /dev/null and b/data/train/719.jpg differ diff --git a/data/train/72.jpg b/data/train/72.jpg new file mode 100644 index 0000000..1ae58f9 Binary files /dev/null and b/data/train/72.jpg differ diff --git a/data/train/720.jpg b/data/train/720.jpg new file mode 100644 index 0000000..f94b046 Binary files /dev/null and b/data/train/720.jpg differ diff --git a/data/train/721.jpg b/data/train/721.jpg new file mode 100644 index 0000000..7832ae0 Binary files /dev/null and b/data/train/721.jpg differ diff --git a/data/train/722.jpg b/data/train/722.jpg new file mode 100644 index 0000000..3bd2e46 Binary files /dev/null and b/data/train/722.jpg differ diff --git a/data/train/723.jpg b/data/train/723.jpg new file mode 100644 index 0000000..82297d6 Binary files /dev/null and b/data/train/723.jpg differ diff --git a/data/train/724.jpg b/data/train/724.jpg new file mode 100644 index 0000000..b7c65b4 Binary files /dev/null and b/data/train/724.jpg differ diff --git a/data/train/725.jpg b/data/train/725.jpg new file mode 100644 index 0000000..f2d638d Binary files /dev/null and b/data/train/725.jpg differ diff --git a/data/train/726.jpg b/data/train/726.jpg new file mode 100644 index 0000000..62aa9cd Binary files /dev/null and b/data/train/726.jpg differ diff --git a/data/train/727.jpg b/data/train/727.jpg new file mode 100644 index 0000000..9566bb6 Binary files /dev/null and b/data/train/727.jpg differ diff --git a/data/train/728.jpg b/data/train/728.jpg new file mode 100644 index 0000000..87c6d9b Binary files /dev/null and b/data/train/728.jpg differ diff --git a/data/train/729.jpg b/data/train/729.jpg new file mode 100644 index 0000000..4131ec1 Binary files /dev/null and b/data/train/729.jpg differ diff --git a/data/train/73.jpg b/data/train/73.jpg new file mode 100644 index 0000000..a0193d7 Binary files /dev/null and b/data/train/73.jpg differ diff --git a/data/train/730.jpg b/data/train/730.jpg new file mode 100644 index 0000000..5ae79f8 Binary files /dev/null and b/data/train/730.jpg differ diff --git a/data/train/731.jpg b/data/train/731.jpg new file mode 100644 index 0000000..6217624 Binary files /dev/null and b/data/train/731.jpg differ diff --git a/data/train/732.jpg b/data/train/732.jpg new file mode 100644 index 0000000..b7c1838 Binary files /dev/null and b/data/train/732.jpg differ diff --git a/data/train/733.jpg b/data/train/733.jpg new file mode 100644 index 0000000..a7a75c4 Binary files /dev/null and b/data/train/733.jpg differ diff --git a/data/train/734.jpg b/data/train/734.jpg new file mode 100644 index 0000000..8c2bdaf Binary files /dev/null and b/data/train/734.jpg differ diff --git a/data/train/735.jpg b/data/train/735.jpg new file mode 100644 index 0000000..812cbf5 Binary files /dev/null and b/data/train/735.jpg differ diff --git a/data/train/736.jpg b/data/train/736.jpg new file mode 100644 index 0000000..d742bc7 Binary files /dev/null and b/data/train/736.jpg differ diff --git a/data/train/737.jpg b/data/train/737.jpg new file mode 100644 index 0000000..546548a Binary files /dev/null and b/data/train/737.jpg differ diff --git a/data/train/738.jpg b/data/train/738.jpg new file mode 100644 index 0000000..93a09a9 Binary files /dev/null and b/data/train/738.jpg differ diff --git a/data/train/739.jpg b/data/train/739.jpg new file mode 100644 index 0000000..6bb6d38 Binary files /dev/null and b/data/train/739.jpg differ diff --git a/data/train/74.jpg b/data/train/74.jpg new file mode 100644 index 0000000..e61435f Binary files /dev/null and b/data/train/74.jpg differ diff --git a/data/train/740.jpg b/data/train/740.jpg new file mode 100644 index 0000000..50864d2 Binary files /dev/null and b/data/train/740.jpg differ diff --git a/data/train/741.jpg b/data/train/741.jpg new file mode 100644 index 0000000..c204b88 Binary files /dev/null and b/data/train/741.jpg differ diff --git a/data/train/742.jpg b/data/train/742.jpg new file mode 100644 index 0000000..53c0c06 Binary files /dev/null and b/data/train/742.jpg differ diff --git a/data/train/743.jpg b/data/train/743.jpg new file mode 100644 index 0000000..df73b51 Binary files /dev/null and b/data/train/743.jpg differ diff --git a/data/train/744.jpg b/data/train/744.jpg new file mode 100644 index 0000000..83d0ecc Binary files /dev/null and b/data/train/744.jpg differ diff --git a/data/train/745.jpg b/data/train/745.jpg new file mode 100644 index 0000000..904c1b7 Binary files /dev/null and b/data/train/745.jpg differ diff --git a/data/train/746.jpg b/data/train/746.jpg new file mode 100644 index 0000000..3a536f6 Binary files /dev/null and b/data/train/746.jpg differ diff --git a/data/train/747.jpg b/data/train/747.jpg new file mode 100644 index 0000000..196be23 Binary files /dev/null and b/data/train/747.jpg differ diff --git a/data/train/748.jpg b/data/train/748.jpg new file mode 100644 index 0000000..ec09ef0 Binary files /dev/null and b/data/train/748.jpg differ diff --git a/data/train/749.jpg b/data/train/749.jpg new file mode 100644 index 0000000..46bc464 Binary files /dev/null and b/data/train/749.jpg differ diff --git a/data/train/75.jpg b/data/train/75.jpg new file mode 100644 index 0000000..9ed5cf4 Binary files /dev/null and b/data/train/75.jpg differ diff --git a/data/train/750.jpg b/data/train/750.jpg new file mode 100644 index 0000000..a783bc0 Binary files /dev/null and b/data/train/750.jpg differ diff --git a/data/train/751.jpg b/data/train/751.jpg new file mode 100644 index 0000000..97adbb6 Binary files /dev/null and b/data/train/751.jpg differ diff --git a/data/train/752.jpg b/data/train/752.jpg new file mode 100644 index 0000000..c90a073 Binary files /dev/null and b/data/train/752.jpg differ diff --git a/data/train/753.jpg b/data/train/753.jpg new file mode 100644 index 0000000..372ffbb Binary files /dev/null and b/data/train/753.jpg differ diff --git a/data/train/754.jpg b/data/train/754.jpg new file mode 100644 index 0000000..6b7d42a Binary files /dev/null and b/data/train/754.jpg differ diff --git a/data/train/755.jpg b/data/train/755.jpg new file mode 100644 index 0000000..8a6a46f Binary files /dev/null and b/data/train/755.jpg differ diff --git a/data/train/756.jpg b/data/train/756.jpg new file mode 100644 index 0000000..0da2b9d Binary files /dev/null and b/data/train/756.jpg differ diff --git a/data/train/757.jpg b/data/train/757.jpg new file mode 100644 index 0000000..d4dd10b Binary files /dev/null and b/data/train/757.jpg differ diff --git a/data/train/758.jpg b/data/train/758.jpg new file mode 100644 index 0000000..5f15a33 Binary files /dev/null and b/data/train/758.jpg differ diff --git a/data/train/759.jpg b/data/train/759.jpg new file mode 100644 index 0000000..ab11d09 Binary files /dev/null and b/data/train/759.jpg differ diff --git a/data/train/76.jpg b/data/train/76.jpg new file mode 100644 index 0000000..fbeb0ce Binary files /dev/null and b/data/train/76.jpg differ diff --git a/data/train/760.jpg b/data/train/760.jpg new file mode 100644 index 0000000..0f0e9ee Binary files /dev/null and b/data/train/760.jpg differ diff --git a/data/train/761.jpg b/data/train/761.jpg new file mode 100644 index 0000000..73b0761 Binary files /dev/null and b/data/train/761.jpg differ diff --git a/data/train/762.jpg b/data/train/762.jpg new file mode 100644 index 0000000..629b013 Binary files /dev/null and b/data/train/762.jpg differ diff --git a/data/train/763.jpg b/data/train/763.jpg new file mode 100644 index 0000000..edb1c96 Binary files /dev/null and b/data/train/763.jpg differ diff --git a/data/train/764.jpg b/data/train/764.jpg new file mode 100644 index 0000000..22f7671 Binary files /dev/null and b/data/train/764.jpg differ diff --git a/data/train/765.jpg b/data/train/765.jpg new file mode 100644 index 0000000..01ff1ec Binary files /dev/null and b/data/train/765.jpg differ diff --git a/data/train/766.jpg b/data/train/766.jpg new file mode 100644 index 0000000..d8b2c6f Binary files /dev/null and b/data/train/766.jpg differ diff --git a/data/train/767.jpg b/data/train/767.jpg new file mode 100644 index 0000000..021b8c5 Binary files /dev/null and b/data/train/767.jpg differ diff --git a/data/train/768.jpg b/data/train/768.jpg new file mode 100644 index 0000000..31e22e3 Binary files /dev/null and b/data/train/768.jpg differ diff --git a/data/train/769.jpg b/data/train/769.jpg new file mode 100644 index 0000000..13868e2 Binary files /dev/null and b/data/train/769.jpg differ diff --git a/data/train/77.jpg b/data/train/77.jpg new file mode 100644 index 0000000..6c04c6e Binary files /dev/null and b/data/train/77.jpg differ diff --git a/data/train/770.jpg b/data/train/770.jpg new file mode 100644 index 0000000..902fcef Binary files /dev/null and b/data/train/770.jpg differ diff --git a/data/train/771.jpg b/data/train/771.jpg new file mode 100644 index 0000000..3e10b17 Binary files /dev/null and b/data/train/771.jpg differ diff --git a/data/train/772.jpg b/data/train/772.jpg new file mode 100644 index 0000000..7a742c5 Binary files /dev/null and b/data/train/772.jpg differ diff --git a/data/train/773.jpg b/data/train/773.jpg new file mode 100644 index 0000000..145a5c4 Binary files /dev/null and b/data/train/773.jpg differ diff --git a/data/train/774.jpg b/data/train/774.jpg new file mode 100644 index 0000000..8a57737 Binary files /dev/null and b/data/train/774.jpg differ diff --git a/data/train/775.jpg b/data/train/775.jpg new file mode 100644 index 0000000..e1b62cc Binary files /dev/null and b/data/train/775.jpg differ diff --git a/data/train/776.jpg b/data/train/776.jpg new file mode 100644 index 0000000..a02ec9e Binary files /dev/null and b/data/train/776.jpg differ diff --git a/data/train/777.jpg b/data/train/777.jpg new file mode 100644 index 0000000..fa97c91 Binary files /dev/null and b/data/train/777.jpg differ diff --git a/data/train/778.jpg b/data/train/778.jpg new file mode 100644 index 0000000..90cb7a1 Binary files /dev/null and b/data/train/778.jpg differ diff --git a/data/train/779.jpg b/data/train/779.jpg new file mode 100644 index 0000000..63cc050 Binary files /dev/null and b/data/train/779.jpg differ diff --git a/data/train/78.jpg b/data/train/78.jpg new file mode 100644 index 0000000..83e1aa6 Binary files /dev/null and b/data/train/78.jpg differ diff --git a/data/train/780.jpg b/data/train/780.jpg new file mode 100644 index 0000000..3d8d5b9 Binary files /dev/null and b/data/train/780.jpg differ diff --git a/data/train/781.jpg b/data/train/781.jpg new file mode 100644 index 0000000..8d1c71b Binary files /dev/null and b/data/train/781.jpg differ diff --git a/data/train/782.jpg b/data/train/782.jpg new file mode 100644 index 0000000..2dec677 Binary files /dev/null and b/data/train/782.jpg differ diff --git a/data/train/783.jpg b/data/train/783.jpg new file mode 100644 index 0000000..3cdab25 Binary files /dev/null and b/data/train/783.jpg differ diff --git a/data/train/784.jpg b/data/train/784.jpg new file mode 100644 index 0000000..244a848 Binary files /dev/null and b/data/train/784.jpg differ diff --git a/data/train/785.jpg b/data/train/785.jpg new file mode 100644 index 0000000..992de48 Binary files /dev/null and b/data/train/785.jpg differ diff --git a/data/train/786.jpg b/data/train/786.jpg new file mode 100644 index 0000000..3488e52 Binary files /dev/null and b/data/train/786.jpg differ diff --git a/data/train/787.jpg b/data/train/787.jpg new file mode 100644 index 0000000..aaa4674 Binary files /dev/null and b/data/train/787.jpg differ diff --git a/data/train/788.jpg b/data/train/788.jpg new file mode 100644 index 0000000..610826f Binary files /dev/null and b/data/train/788.jpg differ diff --git a/data/train/789.jpg b/data/train/789.jpg new file mode 100644 index 0000000..c3c001f Binary files /dev/null and b/data/train/789.jpg differ diff --git a/data/train/79.jpg b/data/train/79.jpg new file mode 100644 index 0000000..846a3b4 Binary files /dev/null and b/data/train/79.jpg differ diff --git a/data/train/790.jpg b/data/train/790.jpg new file mode 100644 index 0000000..f2dc44f Binary files /dev/null and b/data/train/790.jpg differ diff --git a/data/train/791.jpg b/data/train/791.jpg new file mode 100644 index 0000000..1cc114b Binary files /dev/null and b/data/train/791.jpg differ diff --git a/data/train/792.jpg b/data/train/792.jpg new file mode 100644 index 0000000..790faf1 Binary files /dev/null and b/data/train/792.jpg differ diff --git a/data/train/793.jpg b/data/train/793.jpg new file mode 100644 index 0000000..906df0f Binary files /dev/null and b/data/train/793.jpg differ diff --git a/data/train/794.jpg b/data/train/794.jpg new file mode 100644 index 0000000..bb58956 Binary files /dev/null and b/data/train/794.jpg differ diff --git a/data/train/795.jpg b/data/train/795.jpg new file mode 100644 index 0000000..2095bee Binary files /dev/null and b/data/train/795.jpg differ diff --git a/data/train/796.jpg b/data/train/796.jpg new file mode 100644 index 0000000..cedf811 Binary files /dev/null and b/data/train/796.jpg differ diff --git a/data/train/797.jpg b/data/train/797.jpg new file mode 100644 index 0000000..764afe7 Binary files /dev/null and b/data/train/797.jpg differ diff --git a/data/train/798.jpg b/data/train/798.jpg new file mode 100644 index 0000000..8ccb510 Binary files /dev/null and b/data/train/798.jpg differ diff --git a/data/train/799.jpg b/data/train/799.jpg new file mode 100644 index 0000000..77c01f7 Binary files /dev/null and b/data/train/799.jpg differ diff --git a/data/train/8.jpg b/data/train/8.jpg new file mode 100644 index 0000000..a35b7a5 Binary files /dev/null and b/data/train/8.jpg differ diff --git a/data/train/80.jpg b/data/train/80.jpg new file mode 100644 index 0000000..0dd5318 Binary files /dev/null and b/data/train/80.jpg differ diff --git a/data/train/800.jpg b/data/train/800.jpg new file mode 100644 index 0000000..38dc042 Binary files /dev/null and b/data/train/800.jpg differ diff --git a/data/train/801.jpg b/data/train/801.jpg new file mode 100644 index 0000000..9ced075 Binary files /dev/null and b/data/train/801.jpg differ diff --git a/data/train/802.jpg b/data/train/802.jpg new file mode 100644 index 0000000..fab1b9f Binary files /dev/null and b/data/train/802.jpg differ diff --git a/data/train/803.jpg b/data/train/803.jpg new file mode 100644 index 0000000..ae9e809 Binary files /dev/null and b/data/train/803.jpg differ diff --git a/data/train/804.jpg b/data/train/804.jpg new file mode 100644 index 0000000..7023a4e Binary files /dev/null and b/data/train/804.jpg differ diff --git a/data/train/805.jpg b/data/train/805.jpg new file mode 100644 index 0000000..eab8cfd Binary files /dev/null and b/data/train/805.jpg differ diff --git a/data/train/806.jpg b/data/train/806.jpg new file mode 100644 index 0000000..29cb0b2 Binary files /dev/null and b/data/train/806.jpg differ diff --git a/data/train/807.jpg b/data/train/807.jpg new file mode 100644 index 0000000..30906c9 Binary files /dev/null and b/data/train/807.jpg differ diff --git a/data/train/808.jpg b/data/train/808.jpg new file mode 100644 index 0000000..9a9360b Binary files /dev/null and b/data/train/808.jpg differ diff --git a/data/train/809.jpg b/data/train/809.jpg new file mode 100644 index 0000000..89406e0 Binary files /dev/null and b/data/train/809.jpg differ diff --git a/data/train/81.jpg b/data/train/81.jpg new file mode 100644 index 0000000..12aa9ce Binary files /dev/null and b/data/train/81.jpg differ diff --git a/data/train/810.jpg b/data/train/810.jpg new file mode 100644 index 0000000..e1df29a Binary files /dev/null and b/data/train/810.jpg differ diff --git a/data/train/811.jpg b/data/train/811.jpg new file mode 100644 index 0000000..568b05d Binary files /dev/null and b/data/train/811.jpg differ diff --git a/data/train/812.jpg b/data/train/812.jpg new file mode 100644 index 0000000..a2de06e Binary files /dev/null and b/data/train/812.jpg differ diff --git a/data/train/813.jpg b/data/train/813.jpg new file mode 100644 index 0000000..02c3bcb Binary files /dev/null and b/data/train/813.jpg differ diff --git a/data/train/814.jpg b/data/train/814.jpg new file mode 100644 index 0000000..98f1319 Binary files /dev/null and b/data/train/814.jpg differ diff --git a/data/train/815.jpg b/data/train/815.jpg new file mode 100644 index 0000000..98a373b Binary files /dev/null and b/data/train/815.jpg differ diff --git a/data/train/816.jpg b/data/train/816.jpg new file mode 100644 index 0000000..197de0b Binary files /dev/null and b/data/train/816.jpg differ diff --git a/data/train/817.jpg b/data/train/817.jpg new file mode 100644 index 0000000..85c21f4 Binary files /dev/null and b/data/train/817.jpg differ diff --git a/data/train/818.jpg b/data/train/818.jpg new file mode 100644 index 0000000..0964b20 Binary files /dev/null and b/data/train/818.jpg differ diff --git a/data/train/819.jpg b/data/train/819.jpg new file mode 100644 index 0000000..82acedd Binary files /dev/null and b/data/train/819.jpg differ diff --git a/data/train/82.jpg b/data/train/82.jpg new file mode 100644 index 0000000..f2143a1 Binary files /dev/null and b/data/train/82.jpg differ diff --git a/data/train/820.jpg b/data/train/820.jpg new file mode 100644 index 0000000..ae8ac6f Binary files /dev/null and b/data/train/820.jpg differ diff --git a/data/train/821.jpg b/data/train/821.jpg new file mode 100644 index 0000000..f7d05be Binary files /dev/null and b/data/train/821.jpg differ diff --git a/data/train/822.jpg b/data/train/822.jpg new file mode 100644 index 0000000..b87598b Binary files /dev/null and b/data/train/822.jpg differ diff --git a/data/train/823.jpg b/data/train/823.jpg new file mode 100644 index 0000000..3ad26ee Binary files /dev/null and b/data/train/823.jpg differ diff --git a/data/train/824.jpg b/data/train/824.jpg new file mode 100644 index 0000000..2802d06 Binary files /dev/null and b/data/train/824.jpg differ diff --git a/data/train/825.jpg b/data/train/825.jpg new file mode 100644 index 0000000..2d69946 Binary files /dev/null and b/data/train/825.jpg differ diff --git a/data/train/826.jpg b/data/train/826.jpg new file mode 100644 index 0000000..e748ea0 Binary files /dev/null and b/data/train/826.jpg differ diff --git a/data/train/827.jpg b/data/train/827.jpg new file mode 100644 index 0000000..546c378 Binary files /dev/null and b/data/train/827.jpg differ diff --git a/data/train/828.jpg b/data/train/828.jpg new file mode 100644 index 0000000..d1e9799 Binary files /dev/null and b/data/train/828.jpg differ diff --git a/data/train/829.jpg b/data/train/829.jpg new file mode 100644 index 0000000..d1907b7 Binary files /dev/null and b/data/train/829.jpg differ diff --git a/data/train/83.jpg b/data/train/83.jpg new file mode 100644 index 0000000..a4e1a93 Binary files /dev/null and b/data/train/83.jpg differ diff --git a/data/train/830.jpg b/data/train/830.jpg new file mode 100644 index 0000000..fbb142c Binary files /dev/null and b/data/train/830.jpg differ diff --git a/data/train/831.jpg b/data/train/831.jpg new file mode 100644 index 0000000..f241f3b Binary files /dev/null and b/data/train/831.jpg differ diff --git a/data/train/832.jpg b/data/train/832.jpg new file mode 100644 index 0000000..d519611 Binary files /dev/null and b/data/train/832.jpg differ diff --git a/data/train/833.jpg b/data/train/833.jpg new file mode 100644 index 0000000..254841e Binary files /dev/null and b/data/train/833.jpg differ diff --git a/data/train/834.jpg b/data/train/834.jpg new file mode 100644 index 0000000..51043a6 Binary files /dev/null and b/data/train/834.jpg differ diff --git a/data/train/835.jpg b/data/train/835.jpg new file mode 100644 index 0000000..bbf9f46 Binary files /dev/null and b/data/train/835.jpg differ diff --git a/data/train/836.jpg b/data/train/836.jpg new file mode 100644 index 0000000..44d8dfd Binary files /dev/null and b/data/train/836.jpg differ diff --git a/data/train/837.jpg b/data/train/837.jpg new file mode 100644 index 0000000..532b5eb Binary files /dev/null and b/data/train/837.jpg differ diff --git a/data/train/838.jpg b/data/train/838.jpg new file mode 100644 index 0000000..174c7c8 Binary files /dev/null and b/data/train/838.jpg differ diff --git a/data/train/839.jpg b/data/train/839.jpg new file mode 100644 index 0000000..129af81 Binary files /dev/null and b/data/train/839.jpg differ diff --git a/data/train/84.jpg b/data/train/84.jpg new file mode 100644 index 0000000..20d5fc4 Binary files /dev/null and b/data/train/84.jpg differ diff --git a/data/train/840.jpg b/data/train/840.jpg new file mode 100644 index 0000000..5dd066b Binary files /dev/null and b/data/train/840.jpg differ diff --git a/data/train/841.jpg b/data/train/841.jpg new file mode 100644 index 0000000..1d9c0d5 Binary files /dev/null and b/data/train/841.jpg differ diff --git a/data/train/842.jpg b/data/train/842.jpg new file mode 100644 index 0000000..e238f7f Binary files /dev/null and b/data/train/842.jpg differ diff --git a/data/train/843.jpg b/data/train/843.jpg new file mode 100644 index 0000000..874b4f9 Binary files /dev/null and b/data/train/843.jpg differ diff --git a/data/train/844.jpg b/data/train/844.jpg new file mode 100644 index 0000000..4a7d1eb Binary files /dev/null and b/data/train/844.jpg differ diff --git a/data/train/845.jpg b/data/train/845.jpg new file mode 100644 index 0000000..b2cda53 Binary files /dev/null and b/data/train/845.jpg differ diff --git a/data/train/846.jpg b/data/train/846.jpg new file mode 100644 index 0000000..05f6b4f Binary files /dev/null and b/data/train/846.jpg differ diff --git a/data/train/847.jpg b/data/train/847.jpg new file mode 100644 index 0000000..a8837e2 Binary files /dev/null and b/data/train/847.jpg differ diff --git a/data/train/848.jpg b/data/train/848.jpg new file mode 100644 index 0000000..efc695e Binary files /dev/null and b/data/train/848.jpg differ diff --git a/data/train/849.jpg b/data/train/849.jpg new file mode 100644 index 0000000..34a3548 Binary files /dev/null and b/data/train/849.jpg differ diff --git a/data/train/85.jpg b/data/train/85.jpg new file mode 100644 index 0000000..3f83bb5 Binary files /dev/null and b/data/train/85.jpg differ diff --git a/data/train/850.jpg b/data/train/850.jpg new file mode 100644 index 0000000..f34b560 Binary files /dev/null and b/data/train/850.jpg differ diff --git a/data/train/851.jpg b/data/train/851.jpg new file mode 100644 index 0000000..02c2f24 Binary files /dev/null and b/data/train/851.jpg differ diff --git a/data/train/852.jpg b/data/train/852.jpg new file mode 100644 index 0000000..980124e Binary files /dev/null and b/data/train/852.jpg differ diff --git a/data/train/853.jpg b/data/train/853.jpg new file mode 100644 index 0000000..dc4848d Binary files /dev/null and b/data/train/853.jpg differ diff --git a/data/train/854.jpg b/data/train/854.jpg new file mode 100644 index 0000000..79905db Binary files /dev/null and b/data/train/854.jpg differ diff --git a/data/train/855.jpg b/data/train/855.jpg new file mode 100644 index 0000000..a3cbf51 Binary files /dev/null and b/data/train/855.jpg differ diff --git a/data/train/856.jpg b/data/train/856.jpg new file mode 100644 index 0000000..d9996e2 Binary files /dev/null and b/data/train/856.jpg differ diff --git a/data/train/857.jpg b/data/train/857.jpg new file mode 100644 index 0000000..90a374c Binary files /dev/null and b/data/train/857.jpg differ diff --git a/data/train/858.jpg b/data/train/858.jpg new file mode 100644 index 0000000..c4c01ac Binary files /dev/null and b/data/train/858.jpg differ diff --git a/data/train/859.jpg b/data/train/859.jpg new file mode 100644 index 0000000..cdcaf66 Binary files /dev/null and b/data/train/859.jpg differ diff --git a/data/train/86.jpg b/data/train/86.jpg new file mode 100644 index 0000000..5db65cc Binary files /dev/null and b/data/train/86.jpg differ diff --git a/data/train/860.jpg b/data/train/860.jpg new file mode 100644 index 0000000..5143fda Binary files /dev/null and b/data/train/860.jpg differ diff --git a/data/train/861.jpg b/data/train/861.jpg new file mode 100644 index 0000000..458375c Binary files /dev/null and b/data/train/861.jpg differ diff --git a/data/train/862.jpg b/data/train/862.jpg new file mode 100644 index 0000000..7d9ed10 Binary files /dev/null and b/data/train/862.jpg differ diff --git a/data/train/863.jpg b/data/train/863.jpg new file mode 100644 index 0000000..6327cd0 Binary files /dev/null and b/data/train/863.jpg differ diff --git a/data/train/864.jpg b/data/train/864.jpg new file mode 100644 index 0000000..7707474 Binary files /dev/null and b/data/train/864.jpg differ diff --git a/data/train/865.jpg b/data/train/865.jpg new file mode 100644 index 0000000..47696c6 Binary files /dev/null and b/data/train/865.jpg differ diff --git a/data/train/866.jpg b/data/train/866.jpg new file mode 100644 index 0000000..a433307 Binary files /dev/null and b/data/train/866.jpg differ diff --git a/data/train/867.jpg b/data/train/867.jpg new file mode 100644 index 0000000..613403e Binary files /dev/null and b/data/train/867.jpg differ diff --git a/data/train/868.jpg b/data/train/868.jpg new file mode 100644 index 0000000..eaa7761 Binary files /dev/null and b/data/train/868.jpg differ diff --git a/data/train/869.jpg b/data/train/869.jpg new file mode 100644 index 0000000..61d9d5a Binary files /dev/null and b/data/train/869.jpg differ diff --git a/data/train/87.jpg b/data/train/87.jpg new file mode 100644 index 0000000..0e58245 Binary files /dev/null and b/data/train/87.jpg differ diff --git a/data/train/870.jpg b/data/train/870.jpg new file mode 100644 index 0000000..ee020f2 Binary files /dev/null and b/data/train/870.jpg differ diff --git a/data/train/871.jpg b/data/train/871.jpg new file mode 100644 index 0000000..3063da9 Binary files /dev/null and b/data/train/871.jpg differ diff --git a/data/train/872.jpg b/data/train/872.jpg new file mode 100644 index 0000000..0000643 Binary files /dev/null and b/data/train/872.jpg differ diff --git a/data/train/873.jpg b/data/train/873.jpg new file mode 100644 index 0000000..58d21ae Binary files /dev/null and b/data/train/873.jpg differ diff --git a/data/train/874.jpg b/data/train/874.jpg new file mode 100644 index 0000000..fe86a39 Binary files /dev/null and b/data/train/874.jpg differ diff --git a/data/train/875.jpg b/data/train/875.jpg new file mode 100644 index 0000000..1f5e4fb Binary files /dev/null and b/data/train/875.jpg differ diff --git a/data/train/876.jpg b/data/train/876.jpg new file mode 100644 index 0000000..29b1051 Binary files /dev/null and b/data/train/876.jpg differ diff --git a/data/train/877.jpg b/data/train/877.jpg new file mode 100644 index 0000000..dbbfd89 Binary files /dev/null and b/data/train/877.jpg differ diff --git a/data/train/878.jpg b/data/train/878.jpg new file mode 100644 index 0000000..3541127 Binary files /dev/null and b/data/train/878.jpg differ diff --git a/data/train/879.jpg b/data/train/879.jpg new file mode 100644 index 0000000..1a479b8 Binary files /dev/null and b/data/train/879.jpg differ diff --git a/data/train/88.jpg b/data/train/88.jpg new file mode 100644 index 0000000..47e3240 Binary files /dev/null and b/data/train/88.jpg differ diff --git a/data/train/880.jpg b/data/train/880.jpg new file mode 100644 index 0000000..9c88bf3 Binary files /dev/null and b/data/train/880.jpg differ diff --git a/data/train/881.jpg b/data/train/881.jpg new file mode 100644 index 0000000..0a86a30 Binary files /dev/null and b/data/train/881.jpg differ diff --git a/data/train/882.jpg b/data/train/882.jpg new file mode 100644 index 0000000..63c90c1 Binary files /dev/null and b/data/train/882.jpg differ diff --git a/data/train/883.jpg b/data/train/883.jpg new file mode 100644 index 0000000..ed53a39 Binary files /dev/null and b/data/train/883.jpg differ diff --git a/data/train/884.jpg b/data/train/884.jpg new file mode 100644 index 0000000..d5976ea Binary files /dev/null and b/data/train/884.jpg differ diff --git a/data/train/885.jpg b/data/train/885.jpg new file mode 100644 index 0000000..51aa003 Binary files /dev/null and b/data/train/885.jpg differ diff --git a/data/train/886.jpg b/data/train/886.jpg new file mode 100644 index 0000000..41d8f71 Binary files /dev/null and b/data/train/886.jpg differ diff --git a/data/train/887.jpg b/data/train/887.jpg new file mode 100644 index 0000000..4ed22d7 Binary files /dev/null and b/data/train/887.jpg differ diff --git a/data/train/888.jpg b/data/train/888.jpg new file mode 100644 index 0000000..843f277 Binary files /dev/null and b/data/train/888.jpg differ diff --git a/data/train/889.jpg b/data/train/889.jpg new file mode 100644 index 0000000..cb71294 Binary files /dev/null and b/data/train/889.jpg differ diff --git a/data/train/89.jpg b/data/train/89.jpg new file mode 100644 index 0000000..0f43267 Binary files /dev/null and b/data/train/89.jpg differ diff --git a/data/train/890.jpg b/data/train/890.jpg new file mode 100644 index 0000000..7227963 Binary files /dev/null and b/data/train/890.jpg differ diff --git a/data/train/891.jpg b/data/train/891.jpg new file mode 100644 index 0000000..809d5ac Binary files /dev/null and b/data/train/891.jpg differ diff --git a/data/train/892.jpg b/data/train/892.jpg new file mode 100644 index 0000000..9bc4907 Binary files /dev/null and b/data/train/892.jpg differ diff --git a/data/train/893.jpg b/data/train/893.jpg new file mode 100644 index 0000000..080905e Binary files /dev/null and b/data/train/893.jpg differ diff --git a/data/train/894.jpg b/data/train/894.jpg new file mode 100644 index 0000000..0037944 Binary files /dev/null and b/data/train/894.jpg differ diff --git a/data/train/895.jpg b/data/train/895.jpg new file mode 100644 index 0000000..78be96c Binary files /dev/null and b/data/train/895.jpg differ diff --git a/data/train/896.jpg b/data/train/896.jpg new file mode 100644 index 0000000..e121f21 Binary files /dev/null and b/data/train/896.jpg differ diff --git a/data/train/897.jpg b/data/train/897.jpg new file mode 100644 index 0000000..3b60342 Binary files /dev/null and b/data/train/897.jpg differ diff --git a/data/train/898.jpg b/data/train/898.jpg new file mode 100644 index 0000000..a8ef00c Binary files /dev/null and b/data/train/898.jpg differ diff --git a/data/train/899.jpg b/data/train/899.jpg new file mode 100644 index 0000000..4e26fe3 Binary files /dev/null and b/data/train/899.jpg differ diff --git a/data/train/9.jpg b/data/train/9.jpg new file mode 100644 index 0000000..df24a77 Binary files /dev/null and b/data/train/9.jpg differ diff --git a/data/train/90.jpg b/data/train/90.jpg new file mode 100644 index 0000000..e69773a Binary files /dev/null and b/data/train/90.jpg differ diff --git a/data/train/91.jpg b/data/train/91.jpg new file mode 100644 index 0000000..e834a2c Binary files /dev/null and b/data/train/91.jpg differ diff --git a/data/train/92.jpg b/data/train/92.jpg new file mode 100644 index 0000000..6c4d3a9 Binary files /dev/null and b/data/train/92.jpg differ diff --git a/data/train/93.jpg b/data/train/93.jpg new file mode 100644 index 0000000..1388f85 Binary files /dev/null and b/data/train/93.jpg differ diff --git a/data/train/94.jpg b/data/train/94.jpg new file mode 100644 index 0000000..0ab74c9 Binary files /dev/null and b/data/train/94.jpg differ diff --git a/data/train/95.jpg b/data/train/95.jpg new file mode 100644 index 0000000..e6392cd Binary files /dev/null and b/data/train/95.jpg differ diff --git a/data/train/96.jpg b/data/train/96.jpg new file mode 100644 index 0000000..5dc2b64 Binary files /dev/null and b/data/train/96.jpg differ diff --git a/data/train/97.jpg b/data/train/97.jpg new file mode 100644 index 0000000..fe2ca54 Binary files /dev/null and b/data/train/97.jpg differ diff --git a/data/train/98.jpg b/data/train/98.jpg new file mode 100644 index 0000000..7a9ee28 Binary files /dev/null and b/data/train/98.jpg differ diff --git a/data/train/99.jpg b/data/train/99.jpg new file mode 100644 index 0000000..c25f02b Binary files /dev/null and b/data/train/99.jpg differ diff --git a/data/verify/900.jpg b/data/verify/900.jpg new file mode 100644 index 0000000..fd93d32 Binary files /dev/null and b/data/verify/900.jpg differ diff --git a/data/verify/901.jpg b/data/verify/901.jpg new file mode 100644 index 0000000..b1bde4b Binary files /dev/null and b/data/verify/901.jpg differ diff --git a/data/verify/902.jpg b/data/verify/902.jpg new file mode 100644 index 0000000..e1ab27d Binary files /dev/null and b/data/verify/902.jpg differ diff --git a/data/verify/903.jpg b/data/verify/903.jpg new file mode 100644 index 0000000..3ee4177 Binary files /dev/null and b/data/verify/903.jpg differ diff --git a/data/verify/904.jpg b/data/verify/904.jpg new file mode 100644 index 0000000..f2b9d45 Binary files /dev/null and b/data/verify/904.jpg differ diff --git a/data/verify/905.jpg b/data/verify/905.jpg new file mode 100644 index 0000000..5c93cca Binary files /dev/null and b/data/verify/905.jpg differ diff --git a/data/verify/906.jpg b/data/verify/906.jpg new file mode 100644 index 0000000..8601b13 Binary files /dev/null and b/data/verify/906.jpg differ diff --git a/data/verify/907.jpg b/data/verify/907.jpg new file mode 100644 index 0000000..3c34b25 Binary files /dev/null and b/data/verify/907.jpg differ diff --git a/data/verify/908.jpg b/data/verify/908.jpg new file mode 100644 index 0000000..3dc0c11 Binary files /dev/null and b/data/verify/908.jpg differ diff --git a/data/verify/909.jpg b/data/verify/909.jpg new file mode 100644 index 0000000..54691d6 Binary files /dev/null and b/data/verify/909.jpg differ diff --git a/data/verify/910.jpg b/data/verify/910.jpg new file mode 100644 index 0000000..d04e2a5 Binary files /dev/null and b/data/verify/910.jpg differ diff --git a/data/verify/911.jpg b/data/verify/911.jpg new file mode 100644 index 0000000..10eb2e5 Binary files /dev/null and b/data/verify/911.jpg differ diff --git a/data/verify/912.jpg b/data/verify/912.jpg new file mode 100644 index 0000000..392bb2b Binary files /dev/null and b/data/verify/912.jpg differ diff --git a/data/verify/913.jpg b/data/verify/913.jpg new file mode 100644 index 0000000..0d7e016 Binary files /dev/null and b/data/verify/913.jpg differ diff --git a/data/verify/914.jpg b/data/verify/914.jpg new file mode 100644 index 0000000..e58ae43 Binary files /dev/null and b/data/verify/914.jpg differ diff --git a/data/verify/915.jpg b/data/verify/915.jpg new file mode 100644 index 0000000..93a687b Binary files /dev/null and b/data/verify/915.jpg differ diff --git a/data/verify/916.jpg b/data/verify/916.jpg new file mode 100644 index 0000000..a680434 Binary files /dev/null and b/data/verify/916.jpg differ diff --git a/data/verify/917.jpg b/data/verify/917.jpg new file mode 100644 index 0000000..707e780 Binary files /dev/null and b/data/verify/917.jpg differ diff --git a/data/verify/918.jpg b/data/verify/918.jpg new file mode 100644 index 0000000..254ced4 Binary files /dev/null and b/data/verify/918.jpg differ diff --git a/data/verify/919.jpg b/data/verify/919.jpg new file mode 100644 index 0000000..b4d2792 Binary files /dev/null and b/data/verify/919.jpg differ diff --git a/data/verify/920.jpg b/data/verify/920.jpg new file mode 100644 index 0000000..898bd75 Binary files /dev/null and b/data/verify/920.jpg differ diff --git a/data/verify/921.jpg b/data/verify/921.jpg new file mode 100644 index 0000000..13b02fb Binary files /dev/null and b/data/verify/921.jpg differ diff --git a/data/verify/922.jpg b/data/verify/922.jpg new file mode 100644 index 0000000..1321473 Binary files /dev/null and b/data/verify/922.jpg differ diff --git a/data/verify/923.jpg b/data/verify/923.jpg new file mode 100644 index 0000000..7e3002c Binary files /dev/null and b/data/verify/923.jpg differ diff --git a/data/verify/924.jpg b/data/verify/924.jpg new file mode 100644 index 0000000..8a8223f Binary files /dev/null and b/data/verify/924.jpg differ diff --git a/data/verify/925.jpg b/data/verify/925.jpg new file mode 100644 index 0000000..fe419d0 Binary files /dev/null and b/data/verify/925.jpg differ diff --git a/data/verify/926.jpg b/data/verify/926.jpg new file mode 100644 index 0000000..ea2d821 Binary files /dev/null and b/data/verify/926.jpg differ diff --git a/data/verify/927.jpg b/data/verify/927.jpg new file mode 100644 index 0000000..36ebb9b Binary files /dev/null and b/data/verify/927.jpg differ diff --git a/data/verify/928.jpg b/data/verify/928.jpg new file mode 100644 index 0000000..06df85b Binary files /dev/null and b/data/verify/928.jpg differ diff --git a/data/verify/929.jpg b/data/verify/929.jpg new file mode 100644 index 0000000..089f663 Binary files /dev/null and b/data/verify/929.jpg differ diff --git a/data/verify/930.jpg b/data/verify/930.jpg new file mode 100644 index 0000000..0a974c6 Binary files /dev/null and b/data/verify/930.jpg differ diff --git a/data/verify/931.jpg b/data/verify/931.jpg new file mode 100644 index 0000000..a55da70 Binary files /dev/null and b/data/verify/931.jpg differ diff --git a/data/verify/932.jpg b/data/verify/932.jpg new file mode 100644 index 0000000..9f7beb2 Binary files /dev/null and b/data/verify/932.jpg differ diff --git a/data/verify/933.jpg b/data/verify/933.jpg new file mode 100644 index 0000000..9fb9b77 Binary files /dev/null and b/data/verify/933.jpg differ diff --git a/data/verify/934.jpg b/data/verify/934.jpg new file mode 100644 index 0000000..5f15077 Binary files /dev/null and b/data/verify/934.jpg differ diff --git a/data/verify/935.jpg b/data/verify/935.jpg new file mode 100644 index 0000000..9f11beb Binary files /dev/null and b/data/verify/935.jpg differ diff --git a/data/verify/936.jpg b/data/verify/936.jpg new file mode 100644 index 0000000..a07c31c Binary files /dev/null and b/data/verify/936.jpg differ diff --git a/data/verify/937.jpg b/data/verify/937.jpg new file mode 100644 index 0000000..7f7bec6 Binary files /dev/null and b/data/verify/937.jpg differ diff --git a/data/verify/938.jpg b/data/verify/938.jpg new file mode 100644 index 0000000..d492488 Binary files /dev/null and b/data/verify/938.jpg differ diff --git a/data/verify/939.jpg b/data/verify/939.jpg new file mode 100644 index 0000000..2428337 Binary files /dev/null and b/data/verify/939.jpg differ diff --git a/data/verify/940.jpg b/data/verify/940.jpg new file mode 100644 index 0000000..072162c Binary files /dev/null and b/data/verify/940.jpg differ diff --git a/data/verify/941.jpg b/data/verify/941.jpg new file mode 100644 index 0000000..f0f24f2 Binary files /dev/null and b/data/verify/941.jpg differ diff --git a/data/verify/942.jpg b/data/verify/942.jpg new file mode 100644 index 0000000..901eda3 Binary files /dev/null and b/data/verify/942.jpg differ diff --git a/data/verify/943.jpg b/data/verify/943.jpg new file mode 100644 index 0000000..3d71348 Binary files /dev/null and b/data/verify/943.jpg differ diff --git a/data/verify/944.jpg b/data/verify/944.jpg new file mode 100644 index 0000000..bbb21f9 Binary files /dev/null and b/data/verify/944.jpg differ diff --git a/data/verify/945.jpg b/data/verify/945.jpg new file mode 100644 index 0000000..a478459 Binary files /dev/null and b/data/verify/945.jpg differ diff --git a/data/verify/946.jpg b/data/verify/946.jpg new file mode 100644 index 0000000..4c77f76 Binary files /dev/null and b/data/verify/946.jpg differ diff --git a/data/verify/947.jpg b/data/verify/947.jpg new file mode 100644 index 0000000..94cde1c Binary files /dev/null and b/data/verify/947.jpg differ diff --git a/data/verify/948.jpg b/data/verify/948.jpg new file mode 100644 index 0000000..3fbb9ba Binary files /dev/null and b/data/verify/948.jpg differ diff --git a/data/verify/949.jpg b/data/verify/949.jpg new file mode 100644 index 0000000..0f6a35a Binary files /dev/null and b/data/verify/949.jpg differ diff --git a/data/verify/950.jpg b/data/verify/950.jpg new file mode 100644 index 0000000..0dd678e Binary files /dev/null and b/data/verify/950.jpg differ diff --git a/data/verify/951.jpg b/data/verify/951.jpg new file mode 100644 index 0000000..a3d1f09 Binary files /dev/null and b/data/verify/951.jpg differ diff --git a/data/verify/952.jpg b/data/verify/952.jpg new file mode 100644 index 0000000..f67cd8c Binary files /dev/null and b/data/verify/952.jpg differ diff --git a/data/verify/953.jpg b/data/verify/953.jpg new file mode 100644 index 0000000..915fbf5 Binary files /dev/null and b/data/verify/953.jpg differ diff --git a/data/verify/954.jpg b/data/verify/954.jpg new file mode 100644 index 0000000..41b9a7c Binary files /dev/null and b/data/verify/954.jpg differ diff --git a/data/verify/955.jpg b/data/verify/955.jpg new file mode 100644 index 0000000..3d16f14 Binary files /dev/null and b/data/verify/955.jpg differ diff --git a/data/verify/956.jpg b/data/verify/956.jpg new file mode 100644 index 0000000..8f03041 Binary files /dev/null and b/data/verify/956.jpg differ diff --git a/data/verify/957.jpg b/data/verify/957.jpg new file mode 100644 index 0000000..a0f98bb Binary files /dev/null and b/data/verify/957.jpg differ diff --git a/data/verify/958.jpg b/data/verify/958.jpg new file mode 100644 index 0000000..b2144d0 Binary files /dev/null and b/data/verify/958.jpg differ diff --git a/data/verify/959.jpg b/data/verify/959.jpg new file mode 100644 index 0000000..2584704 Binary files /dev/null and b/data/verify/959.jpg differ diff --git a/data/verify/960.jpg b/data/verify/960.jpg new file mode 100644 index 0000000..c4c26ab Binary files /dev/null and b/data/verify/960.jpg differ diff --git a/data/verify/961.jpg b/data/verify/961.jpg new file mode 100644 index 0000000..55aa180 Binary files /dev/null and b/data/verify/961.jpg differ diff --git a/data/verify/962.jpg b/data/verify/962.jpg new file mode 100644 index 0000000..0ca8767 Binary files /dev/null and b/data/verify/962.jpg differ diff --git a/data/verify/963.jpg b/data/verify/963.jpg new file mode 100644 index 0000000..951ab5e Binary files /dev/null and b/data/verify/963.jpg differ diff --git a/data/verify/964.jpg b/data/verify/964.jpg new file mode 100644 index 0000000..42ed11e Binary files /dev/null and b/data/verify/964.jpg differ diff --git a/data/verify/965.jpg b/data/verify/965.jpg new file mode 100644 index 0000000..2d4d3f2 Binary files /dev/null and b/data/verify/965.jpg differ diff --git a/data/verify/966.jpg b/data/verify/966.jpg new file mode 100644 index 0000000..4382312 Binary files /dev/null and b/data/verify/966.jpg differ diff --git a/data/verify/967.jpg b/data/verify/967.jpg new file mode 100644 index 0000000..8885aac Binary files /dev/null and b/data/verify/967.jpg differ diff --git a/data/verify/968.jpg b/data/verify/968.jpg new file mode 100644 index 0000000..1c41c88 Binary files /dev/null and b/data/verify/968.jpg differ diff --git a/data/verify/969.jpg b/data/verify/969.jpg new file mode 100644 index 0000000..d8f3550 Binary files /dev/null and b/data/verify/969.jpg differ diff --git a/data/verify/970.jpg b/data/verify/970.jpg new file mode 100644 index 0000000..3d7d243 Binary files /dev/null and b/data/verify/970.jpg differ diff --git a/data/verify/971.jpg b/data/verify/971.jpg new file mode 100644 index 0000000..bb1a0dd Binary files /dev/null and b/data/verify/971.jpg differ diff --git a/data/verify/972.jpg b/data/verify/972.jpg new file mode 100644 index 0000000..854fcb4 Binary files /dev/null and b/data/verify/972.jpg differ diff --git a/data/verify/973.jpg b/data/verify/973.jpg new file mode 100644 index 0000000..693a355 Binary files /dev/null and b/data/verify/973.jpg differ diff --git a/data/verify/974.jpg b/data/verify/974.jpg new file mode 100644 index 0000000..e3fea33 Binary files /dev/null and b/data/verify/974.jpg differ diff --git a/data/verify/975.jpg b/data/verify/975.jpg new file mode 100644 index 0000000..9fa5498 Binary files /dev/null and b/data/verify/975.jpg differ diff --git a/data/verify/976.jpg b/data/verify/976.jpg new file mode 100644 index 0000000..68aa694 Binary files /dev/null and b/data/verify/976.jpg differ diff --git a/data/verify/977.jpg b/data/verify/977.jpg new file mode 100644 index 0000000..c9639c5 Binary files /dev/null and b/data/verify/977.jpg differ diff --git a/data/verify/978.jpg b/data/verify/978.jpg new file mode 100644 index 0000000..2be3679 Binary files /dev/null and b/data/verify/978.jpg differ diff --git a/data/verify/979.jpg b/data/verify/979.jpg new file mode 100644 index 0000000..ead2eb4 Binary files /dev/null and b/data/verify/979.jpg differ diff --git a/data/verify/980.jpg b/data/verify/980.jpg new file mode 100644 index 0000000..edb4474 Binary files /dev/null and b/data/verify/980.jpg differ diff --git a/data/verify/981.jpg b/data/verify/981.jpg new file mode 100644 index 0000000..053ffc6 Binary files /dev/null and b/data/verify/981.jpg differ diff --git a/data/verify/982.jpg b/data/verify/982.jpg new file mode 100644 index 0000000..99724aa Binary files /dev/null and b/data/verify/982.jpg differ diff --git a/data/verify/983.jpg b/data/verify/983.jpg new file mode 100644 index 0000000..23e5300 Binary files /dev/null and b/data/verify/983.jpg differ diff --git a/data/verify/984.jpg b/data/verify/984.jpg new file mode 100644 index 0000000..e71fa31 Binary files /dev/null and b/data/verify/984.jpg differ diff --git a/data/verify/985.jpg b/data/verify/985.jpg new file mode 100644 index 0000000..1f46b13 Binary files /dev/null and b/data/verify/985.jpg differ diff --git a/data/verify/986.jpg b/data/verify/986.jpg new file mode 100644 index 0000000..c2dc579 Binary files /dev/null and b/data/verify/986.jpg differ diff --git a/data/verify/987.jpg b/data/verify/987.jpg new file mode 100644 index 0000000..0e9face Binary files /dev/null and b/data/verify/987.jpg differ diff --git a/data/verify/988.jpg b/data/verify/988.jpg new file mode 100644 index 0000000..2d7ed21 Binary files /dev/null and b/data/verify/988.jpg differ diff --git a/data/verify/989.jpg b/data/verify/989.jpg new file mode 100644 index 0000000..d3ab2c3 Binary files /dev/null and b/data/verify/989.jpg differ diff --git a/data/verify/990.jpg b/data/verify/990.jpg new file mode 100644 index 0000000..d89dd96 Binary files /dev/null and b/data/verify/990.jpg differ diff --git a/data/verify/991.jpg b/data/verify/991.jpg new file mode 100644 index 0000000..b80c38b Binary files /dev/null and b/data/verify/991.jpg differ diff --git a/data/verify/992.jpg b/data/verify/992.jpg new file mode 100644 index 0000000..82a656b Binary files /dev/null and b/data/verify/992.jpg differ diff --git a/data/verify/993.jpg b/data/verify/993.jpg new file mode 100644 index 0000000..a09034e Binary files /dev/null and b/data/verify/993.jpg differ diff --git a/data/verify/994.jpg b/data/verify/994.jpg new file mode 100644 index 0000000..df23efa Binary files /dev/null and b/data/verify/994.jpg differ diff --git a/data/verify/995.jpg b/data/verify/995.jpg new file mode 100644 index 0000000..d09e012 Binary files /dev/null and b/data/verify/995.jpg differ diff --git a/data/verify/996.jpg b/data/verify/996.jpg new file mode 100644 index 0000000..62283e7 Binary files /dev/null and b/data/verify/996.jpg differ diff --git a/data/verify/997.jpg b/data/verify/997.jpg new file mode 100644 index 0000000..25ca12d Binary files /dev/null and b/data/verify/997.jpg differ diff --git a/data/verify/998.jpg b/data/verify/998.jpg new file mode 100644 index 0000000..8d38470 Binary files /dev/null and b/data/verify/998.jpg differ diff --git a/data/verify/999.jpg b/data/verify/999.jpg new file mode 100644 index 0000000..0e72e90 Binary files /dev/null and b/data/verify/999.jpg differ diff --git a/img/adjust.png b/img/adjust.png new file mode 100644 index 0000000..b8a6e01 Binary files /dev/null and b/img/adjust.png differ diff --git a/img/arrow.png b/img/arrow.png new file mode 100644 index 0000000..e2238c3 Binary files /dev/null and b/img/arrow.png differ diff --git a/img/arrow1.png b/img/arrow1.png new file mode 100644 index 0000000..358c4e1 Binary files /dev/null and b/img/arrow1.png differ diff --git a/img/arrow2.png b/img/arrow2.png new file mode 100644 index 0000000..332617b Binary files /dev/null and b/img/arrow2.png differ diff --git a/img/classifier.png b/img/classifier.png new file mode 100644 index 0000000..eb5d4ed Binary files /dev/null and b/img/classifier.png differ diff --git a/img/conv.png b/img/conv.png new file mode 100644 index 0000000..6b9947d Binary files /dev/null and b/img/conv.png differ diff --git a/img/data.png b/img/data.png new file mode 100644 index 0000000..cc5d92b Binary files /dev/null and b/img/data.png differ diff --git a/img/error.png b/img/error.png new file mode 100644 index 0000000..fce0d95 Binary files /dev/null and b/img/error.png differ diff --git a/img/full_connect.png b/img/full_connect.png new file mode 100644 index 0000000..1cb227b Binary files /dev/null and b/img/full_connect.png differ diff --git a/img/image/微信图片_20230423141125.png b/img/image/微信图片_20230423141125.png new file mode 100644 index 0000000..7c78817 Binary files /dev/null and b/img/image/微信图片_20230423141125.png differ diff --git a/img/image/微信截图_20230423141909.png b/img/image/微信截图_20230423141909.png new file mode 100644 index 0000000..d5530ba Binary files /dev/null and b/img/image/微信截图_20230423141909.png differ diff --git a/img/image/微信截图_20230423142037.png b/img/image/微信截图_20230423142037.png new file mode 100644 index 0000000..1b49217 Binary files /dev/null and b/img/image/微信截图_20230423142037.png differ diff --git a/img/image/微信截图_20230423142053.png b/img/image/微信截图_20230423142053.png new file mode 100644 index 0000000..72d6752 Binary files /dev/null and b/img/image/微信截图_20230423142053.png differ diff --git a/img/image/微信截图_20230423142134.png b/img/image/微信截图_20230423142134.png new file mode 100644 index 0000000..f82cb6c Binary files /dev/null and b/img/image/微信截图_20230423142134.png differ diff --git a/img/image/微信截图_20230423142210.png b/img/image/微信截图_20230423142210.png new file mode 100644 index 0000000..00a51e5 Binary files /dev/null and b/img/image/微信截图_20230423142210.png differ diff --git a/img/image/微信截图_20230423142401.png b/img/image/微信截图_20230423142401.png new file mode 100644 index 0000000..716af1c Binary files /dev/null and b/img/image/微信截图_20230423142401.png differ diff --git a/img/image/微信截图_20230423142436.png b/img/image/微信截图_20230423142436.png new file mode 100644 index 0000000..2c65ca6 Binary files /dev/null and b/img/image/微信截图_20230423142436.png differ diff --git a/img/image/微信截图_20230423142447.png b/img/image/微信截图_20230423142447.png new file mode 100644 index 0000000..761e72d Binary files /dev/null and b/img/image/微信截图_20230423142447.png differ diff --git a/img/nonlinear.png b/img/nonlinear.png new file mode 100644 index 0000000..13390a8 Binary files /dev/null and b/img/nonlinear.png differ diff --git a/img/pool.png b/img/pool.png new file mode 100644 index 0000000..1d424f2 Binary files /dev/null and b/img/pool.png differ diff --git a/list.pkl b/list.pkl new file mode 100644 index 0000000..f61e02a Binary files /dev/null and b/list.pkl differ diff --git a/model.pkl b/model.pkl new file mode 100644 index 0000000..d6b661f Binary files /dev/null and b/model.pkl differ