重生学神有系统
时间:2023-05-21 来源: 作者:一碗酸梅汤
不一定。
硬盘格式化,就安全了吗
也难说。
那么,重新分区呢
很遗憾,只要有心,还是可以复原的,否则也不会有“x照门”了……
那么,反复用垃圾数据涂抹、覆盖原始文件,这总行了吧
理论上是可以的。
不过,你得熟悉计算机存储系统的工作机制。
对于不同类型,和不同介质的存储设备,要采取针对性的策略,才能彻底销毁数据。
比如支持并开启trim的ssd,也就是固态硬盘。
写入数据时,由芯片控制,数据均匀分布在每个区块里,以保证均衡使用全部的存储颗粒。
系统在删除数据时,并不会向硬盘发出删除指令,只使用volume bitmap来记录被“删除”的信息所在的位置。
而每次更新文件数据时,也会尽量写入新块,并把原本占用的区块,标记为“无效”。
这样一来,实际上,被删除或顶替的数据,在物理上仍然存在。
当且仅当所有空闲区块都占满时,才会在写入数据时,使用被标记为“无效”或“删除”的区块。
也就是说,没有方法能够可靠地删除整个ssd上的内容,或者存放在ssd或者u盘上的特定文件。
靠文件粉碎机制都很难彻底消除痕迹,就算格式化后,用垃圾数据把盘写满,也并不能万无一失。
有些数据恢复高手,会有许多让你瞠目结舌的操作。
可惜的是,高老师的这个u盘,可能只是一份拷贝,并不是原始数据盘。
这样一来,数据还原软件也无能为力。
经过一番研究,江寒发现,并没什么投机取巧的可能。
也就是说,只能按照原定计划,重建信息表。
高老师提供的《报名信息表》残缺不全。
只有不到30%的行,还保留着性别、民族等寥寥几列。
剩下的70%,除了姓名和序号,什么都没有了。
住址、联系人、联系电话等等,一点也没剩下。
至于《原始信息表》,的确如老高所说,除了身份证号缺了几位,其他数据都正常。
那么,这种现象是怎么造成的呢
江寒有个初步的猜想。
&n
第52章 “感知机”的初次实战
业余黑客有个潜规则。
政府机关、金融系统、电子商务……这类网站的后台,是机密重地,通常有高手坐镇,没事最好别去溜达。
被网监或者安全专家盯上,十有落不了好。
而个人网站、小型办公网络、学校网站……
这种信息安全不太敏感的,仅仅是浏览或下载一些数据,一般不会有什么大问题。
比如从铁道部官网12306爬点数据,做个辅助订票系统什么的……
但无论任何地方,肆意破坏总是不被允许的,这是底线。
《原始数据表》的奇怪情况,身份证位数不对,侧面支持了这种可能性。
通过黑客手段获取数据,有时候会遇到一些匪夷所思的问题,比如数据格式特殊,下载的数据宽度受限……
有时候,甚至在后台数据库里,只能找到数据的一部分,而其余部分被保存在无法访问的文件里。
写后台程序的人,会基于各种各样的理由,写出可读性极差的代码。
比如:读写效率、数据安全、修补bug、系统健壮……
又或者不想被人继承代码,取代自己的位置,甚至单纯为了个人兴趣、编程风格……
都可能导致这些人,搞出种种令人费解的骚操作。
当然,也可能老高的技术还有缺陷,或者他是从虚拟内存、交换文件里挖掘出来的数据。
也有可能在“作案”过程中被人盯上,不得不提前断开连接……
总之,摆在江寒面前的,就是这么两张各有缺陷的表格,外加一个图片压缩包。
接下来,江寒首先要做的,是从《原始数据表》里,筛选出需要的记录,复制到《报名信息表》里。
这一步非常简单,只要用excel自带的vbscript编写一个小脚本,将两个表格按照姓名匹配,就可以得到每个考生在原始表里的行号。
当然,同名同姓是避免不了的,可能报名信息里一个“张三”,在原始数据里会找到一堆“张三”……这个一会儿再说。
脚本编程非常简单,江寒只用了二十分钟,就写完程序并调试无误。
按了一下预设的快捷键,脚本开始执行。
一边是3万多行的考生姓名,一边是10万多行的原始数据,脚本足足跑了八分钟,才得到了一个映射关系表。
接下来,是第二个脚本,参照映射关系表,将原始数据文件筛选出需要保留的行,其他行全都删除,然后按照《报名信息表》的序号,重新进行排序,得到临时文件1。
这个临时文件的行数,要比报名表多出几千行,这是因为江寒对重名进行了处理,将重名的人都编上了相同的二级序号。
接下来处理重名。
经过一番分析,江寒发现,原始数据表和报名信息表里的数据,排列顺序是有规律的。
其以地区为主关键字,所在学校为次要关键字,而所在班级则是第三关键字排序。
也就是说,一个学校里,一个班级的人,都挨在一起,学校、地区之间也没有混乱。
这样就好办了。
由于临时文件已经按序号排列,重名的人拥有同样的二级序号,自然就聚拢在了一起。
这时,只要看一下这些人的所在地区和学校,就能轻松分辨出哪些是多余的,那个才是真正对应于《报名信息表》的。
如果一个班级也有同名,就只能具体情况具体分析了,实在确定不了的,就先记下来,放在一边,以后再说。
一番整理后,临时文件1已经十分接近高老师希望得到的《报名信息表》。
联系电话、家庭住址,毕业学校、班级、民族、年龄、出生年月日都有了。
接下来是重头戏,通过照片判断每个学生的性别。
幸运的是,虽然《原始数据表》里的身份证号,残缺不全,导致性别信息不可用,可是《报名信息表》里还有部分残余的性别数据。
这就给江寒减少了许多负担。
接下来,先将照片.rar解压,然后观察了一下。
三万多张照片,按学校、班级分类,放入几千个文件夹中。
每个文件的大小,都在10kb至30kb之间。
像素只有210120,不算特别清晰,但看清面部特征,还是没什么问题的。
其中,同班级里重名的情况,都在姓名后标记着数字1、2……
江寒猜想,这可能是输入报名表的顺序。
接下来要做的,就是在临时文件1里,找到每张照片对应的人。
这很简单,照片的文件名就是姓名,轻松就能和表格里的名字对上。
第53章 大功告成
不过,在跑代码之前,还要对数据进行预处理。
江寒先从报名信息表中,将性别信息仍然“健在”的行挑出来,只保留序号、姓名和性别,另存为label.xls。
这些记录一共9527条,大约占三万多条数据总数的30%。
它们对应着9527张真彩色照片。
24位真彩色的图片,每个像素点在内存里,要占用3个字节的存储单元。
每张照片有210x120个像素,这样读入一张照片,需要的内存空间就是210x120x3=75600个byte。
9527条数据,共需要9527x75600=720241200b≈686.88m≈0.7g!
这个内存开销,还是比较容易接受的。
但是,“感知机”的算法,需要进行大量浮点乘法运算。
对每个像素的每个rgb分量都算一遍
没那个必要,也太浪费时间。
所以,聪明的做法,是先把照片数据“压缩”一下。
江寒给“感知机”的代码,添加了一个loaddata函数,用来读取和处理照片数据。
在这个函数里,先定义一个二维的整形数组feature。
然后从label.xls中读出序号、姓名信息,按照刚才建立的索引表,找到对应的照片文件。
下一步,将照片读取到内存中,读取的同时,将每个像素二值化。
具体做法是:色彩浓度在阈值以上的像素,取值为1,低于阈值就让它为0。
这样一来,原本的真彩色照片,就被转换成了黑白轮廓图。
然后,再将轮廓图中的0或者1的取值,按照从左到右、从上到下的顺序,重新编排成一行数据,存放到数组feature中。
feature中的每一行,都存储了一张照片的二值化信息。
一共9027张照片,就需要9027行。
全部照片处理完毕后,就得到了一个巨大的二维数组feature。
它有25200列、9027行!
接下来,定义一个拥有9027个整形元素的一维数组label。
从label.xls中读入性别信息,男生设为1,女生设为0,存放在数组label中。
feature加上对应的label,就构成了训练数据集。
训练“感知机”时,将一行行feature代入公式中,进行加权和运算,其结果再通过sign函数,转换为0或1,然后和对应的label值对照。
如果不相符,就调整权重和偏置,然后重新计算。
当每一个feature代入公式后,都能计算出正确的label时,就得到了一组权重和偏置。
也就是说,构建出了一个可用的数学模型。
依据这个模型,计算机就可以读入任何一张同尺寸、类型的照片,对其二值化的数据代入模型中运算,并根据运算结果判断分类归属。
这就是典型的机器学习过程,计算机从数据中自己“学”到了某种规律。
即使这种规律,人类并不一定完全理解,也不见得能用数学语言解释清楚……
剩下的就比较简单了。
接下来,江寒又添加了几个函数,用来输出运算结果、观察运行情况等。
最后,从头调试了一遍,确认没啥bug后,将代码重新编译,然后运行了起来。
屏幕上有一些数字,表示当前正在处理的数据,和训练进度的百分比。
十分钟后,后一个数字才刚刚达到1.3%。
这表示,完整训练一遍,大约需要13个小时……
之所以这么慢,主要是江寒的程序,比较追求稳定性,以及调试的方便、快捷,并没特别讲究执行效率。
当然,即使他用心优化,估计也需要8个小时以上,才能完成训练。
虽然有点慢,但其实没什么关系,训练过程并不需要人工干预,挂机等着就行。
第二天早晨,江寒起床后,先看了下训练进度,还差了大约13%才能完成,就先去班级上课。
中午吃完饭回来,训练终于结束了。
而存放权重和偏置参数的weight数组,也以内存映像的方式,保存在了一个二进制文件中。
接下来就简单了。
重建一个一模一样的感知机模型,加载上这个权重文件,就可以用它来判断剩余照片的性别了。
江寒重新改写代码,然后运行。
这次十分迅速,只用了不到20分钟,就将两万一千来张照片,全部处理完毕。
这就是“感知机”,或者说“人工神经网络”的特点。
训练起来特别耗时,一旦训练完成,工作起来非常快捷。
至于正确率,江寒初步估计,大大超过99%,21000条未经训练的数据里,判断出错的,绝不超过10人。
比人类肉眼的识别率低不到哪里去。
事实上,“感知机”或者说“人工神经网络”的错误率,跟训练数据、测试数据的质量有很大关系。
如果比较规范,达到100%的识别率都不算稀奇。
猜你喜欢