今天早上3点就醒了,在床上读了一会原著,忍不住又看了一遍chap6的视频,后来到自习室继续看,对RNN\LSTM\GRU有了更深入的理解。吃完饭以后想着把BP再看下,毕竟这很基础。今天有时间再去回看下梯度下降。这些概念以前都看过,也挣扎过,所以知道大家学习时的痛苦。总觉得网上很少有教程能给出overview && vivid的解释,so i am trying to figure it out!
说来有趣,现在再来看这些概念,感觉比以前多理解了不少,有意思!!!
最近也进入了疯狂吸收cs知识的时候,求知欲爆棚!!!都没什么时间学英语了,不过要抓紧机会早成正反馈局面!!!

好了,现在08:16-------开始敲chap3的八股代码了!!!

------------------------------续D2

chap3实践

(一)问题
1、compile中的meric是仅仅打印出来,还是会根据这个选w参数???
就仅仅打印出来,供人参考,不参与优化;优化还是根据loss
参考文献:
https://blog.csdn.net/chenhepg/article/details/115721826
这篇里面还写了常用的参数;当然官网也有

2.model.fit的validation_freq参数
这个是说,过多少个epoch,用testdata验证一下。

3.super().init()用法
“我理解是,当需要继承父类构造函数中的内容,且子类需要在父类的基础上补充时,使用super().init()方法。

我的理解就是,先继承别人的,然后再进行补充,就要用这个super()
参考链接:
https://www.cnblogs.com/hancece/p/11177852.html

4.Model类中call函数的参数
原来第二个参数是input呀,怪不得。


(二)自己完成fashion数据集的任务
1、先看看数据集的样子



好开心呀,第一次自己独立写模型,虽然很简单,但是还是很开心!!!
代码如下:

import tensorflow as tf
from tensorflow.keras import Model
from tensorflow.keras.layers import Flatten,Dense
import matplotlib.pyplot as plt
fashion = tf.keras.datasets.fashion_mnist
(x_train, y_train), (x_test, y_test) = fashion.load_data()
x_train,x_test = x_train/255.0,x_test/255.0

class FashionModel(Model):
def init(self):
super(FashionModel, self).init()
self.f1 = Flatten()
self.d1 = Dense(128, activation=‘relu’)
self.d2 = Dense(10, activation=‘softmax’)
def call(self, x):
x = self.f1(x)
x = self.d1(x)
y = self.d2(x)
return y
model = FashionModel()

model.compile(optimizer=‘adam’,
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False),
metrics=[‘sparse_categorical_accuracy’])

model.fit(x_train,y_train,batch_size=32,epochs=5,validation_data=(x_test,y_test),validation_freq=1)
model.summary()

训练效果:

后期会学画acc图的!!!!!

chap4很重要的其他附加功能


1、自制数据集,解决本领域应用(解决如何将本领域数据规则化导入)
(1)img.convert(‘L’)
PIL有九种不同模式: 1,L,P,RGB,RGBA,CMYK,YCbCr,I,F。
相当于转换为灰度图像,每个像素点用8个bit表示,表示0-255的灰度。
如果参数是1,也是用8位表示,不过是非黑即白,见参考链接。
img.convert(‘1’)
参考链接:https://www.cnblogs.com/haifwu/p/12825741.html

(2)reshape中-1的含义

https://blog.csdn.net/weixin_39449570/article/details/78619196

这么操作估计是因为np.save只能存1维和2维。所以需要转换吧。这样上面reshape的问题也解决了
https://blog.csdn.net/u010089444/article/details/52738479

(3)这里整体思路很有意思,值得学习
A、如果之前没保存数据,就生成数据并保存;如果保存了,就直接加载进来【毕竟生成一次还挺麻烦的】
B、生成train和test的思路相同,所以写个函数来实现:
读取txt的每一行,【0】为图片名称,求图片路径,加载图片,并进行处理;【1】为标签;分别一一对应保存进入x和y_。最后把列表变为np类型返回 x = np.array(x)# turn into numpy
不过不知道为什么要把y_变成64位整型??/
C、PIL的Image可以用来加载、处理图片

具体代码:

import numpy as np
import tensorflow as tf
from PIL import Image
import os
# mnist = tf.keras.datasets.mnist
# (x_train, y_train), (x_test, y_test) = mnist.load_data()
# x_train, x_test = x_train / 255.0, x_test / 255.0
# 自己写入数据集
train_path = './mnist_image_label/mnist_train_jpg_60000/'
train_txt = './mnist_image_label/mnist_train_jpg_60000.txt'
x_train_savepath = './mnist_image_label/mnist_x_train.npy'
y_train_savepath = './mnist_image_label/mnist_y_train.npy'test_path = './mnist_image_label/mnist_test_jpg_10000/'
test_txt = './mnist_image_label/mnist_test_jpg_10000.txt'
x_test_savepath = './mnist_image_label/mnist_x_test.npy'
y_test_savepath = './mnist_image_label/mnist_y_test.npy'
# 图片路径,标签文件
def generateds(path, txt):f = open(txt, 'r')contents = f.readlines()f.close()x,y_ =[],[]for content in contents:value = content.split()img_path = path+value[0]img = Image.open(img_path)# 图片变为8位宽灰度值的np.array格式img = np.array(img.convert('L'))img/=255.x.append(img)y_.append(value[1])print('loading:'+content)x = np.array(x)# turn into numpyy_ = np.array(y_)y_ = y_.astype(np.int64)#变为64位整型return x,y_if os.path.exists(x_train_savepath) and os.path.exists(y_train_savepath)\and os.path.exists(x_test_savepath) and os.path.exists(y_test_savepath):print('----------------Load Datasets--------------')x_train_save = np.load(x_train_savepath)y_train = np.load(y_train_savepath)x_test_save = np.load(x_test_savepath)y_test = np.load(y_test_savepath)# 在np.save的时候只能存1维或2维,所以需要转换.本身是28*28的数据,恢复回来~x_train = np.reshape(x_train_save, (len(x_train_save),28,28))x_test = np.reshape(x_test_save, (len(x_test_save),28,28))
else:print('-------------Generate Datasets-----------------')x_train, y_train = generateds(train_path, train_txt)x_test, y_test = generateds(test_path, test_txt)print('-------------Save Datasets-----------------')x_train_save = np.reshape(x_train,(len(x_train),-1))x_test_save = np.reshape(x_test,(len(x_test),-1))np.save(x_train_savepath, x_train_save)np.save(y_train_savepath, y_train)np.save(x_test_savepath, x_test_save)np.save(y_test_savepath, y_test)

2、数据增强,扩充数据集(这里以image为例,有接口,注意它在六步八股文中的位置——在第二步,数据处理的部分)

(1)在做数据增强后,model.fit中的内容也要改变。

(2)数据增强本身

不知道为啥要给数据增加一个维度???

3、断点续训,存取模型(这个很重要啊!!!注意位置,在fit训练部分)
(1)取模型就用model.load_weights(path)

(2)存模型有两步
A定义回调函数

B在model.fit中设置,并取得返回值history

4、参数提取,存入文本(上面已经可以存模型,存参数了,但是参数具体时多少呢?也挺重要的)
(1)用model.trainable_variables返回参数
(2)设置np.set_printoptions(threshold=np.inf)保证能够被全部打印出来,不被省略

5、acc/losss可视化,查看训练效果(不会有人不会可视化叭????)
咱就是说,没瞎想到刚才因为保存模型参数用到的回调函数的返回值history,居然这么nb。可以调出来这么多东西——相当于整个在训练过程中的这写我写的metrics里的评价指标和loss都有了。好家伙,直接plt就可以了。

好家了个活,连plt画子图都出来了。
好家伙在,我这个结果也是吓死我了

6、应用程序,给图识别(讲的其实是如何在别人的work上迁移模型直接进行预测,真好真贴心)
(1)复现模型(好进行前向传播)
(2)加载参数
(3)预测

嗯,我就自创一个把,根据之前保存的模型,对当前路径的几张图片进行预测

(1)img.resize参数

这个resize是改变图片大小,后面的参数是选择图片质量
参考:https://blog.csdn.net/xjp_xujiping/article/details/81607964

需要注意的是
(1)定义模型路径
(2)复现模型
(3)加载模型
(4)加载待预测数据并进行预处理,使其更符合训练时的情景。
(5)预测

带预测数据咋这样???tf.newaxis,…
这个就是相当于待预测数据不是没有batch那一维度嘛,生生加一个维度。

结果如上,可见tf.newaxis的主要用途是增加一个维度,位置不同,增加的维度是第几维也相对不一样,可以解决用训练好的神经网络模型进行预测时的维度不匹配问题。

参考链接:https://blog.csdn.net/qq_40183315/article/details/107808112

突然想到一件事,之前在想为什么这种框架里没有设置3种data集?现在看到这个validation和train突然想到!!!!!!!!!整个就叫做一个train,其实分为小弟的train和validation,这是我不断看数据去跳整的部分。为了分离test,甚至都不让test进入,真隔离了。

** plt.pause(1)这又是啥玩意**
就是暂停一会,再继续画。像参考文献这样,加入for循环,保持图像位置不变,调整别的东西以后,就有点像动画???
参考文献:https://vimsky.com/examples/usage/matplotlib-pyplot-pause-in-python.html
** plt.set_cmap(‘gray’)有啥用
**
就是显示灰度图的意思

为啥我把这个处理注释掉,结果这么差呢??
这个是只有黑色和白色的高对比度图片,拒绝背景噪声,阈值可选择


哦哦哦,又去听了下课。原来训练的时候时黑底白字,现在时白底黑字。要转换一下

黑白反转,效果也一般

然后老师这里用的时高对比度,就上面那个图。

---------0844敲完了p8sequential定义结构

-----0900敲完了p11calss定义结构,去接杯水,休息一下

------0906回来继续写啦

----0913完成p13导入并可视化mnist数据集

—0920完成了P14定义了更复杂的模型;并且验证数据集是单独导入的;对灰度数据进行了处理

-----0929完成了p15,虽然只是换成了用class定义模型结构,但是为了巩固代码,我还是都默写了一遍。

----------------0950完成fashion作业,因为class比sequential更加灵活,所以在task中就只练习了这一个定义模型的方法,去接杯水,休息一下~回来看chap4了!!!!!!!我先git一下
git add --all – ‘:!d.txt’
哎,class4中的txt太大了,传不上去,只好学习如何git add忽略文件

---------1002去接个水,回来继续

-------11:00完成chap4自制数据集的功能~
去干饭!!!!!!!!!
commit了一下,这次只commit了我自己写的文件,那个大数据集没交。。。

--------13:25中午去洗了澡,帮同学correct英文摘要,弄自己的电子签名,现在继续写啦~

-----------1514终于完成了chap4,要去休息一下了!!!!!!!

—去做了核酸检测、看了一会CATTI的书武峰12天D1,然后趴了一会,听了一个大数据分享,我感觉很有意思,正好想学Transformer,可以做做!
今天还看了莫凡的多线程教程,争取把多进程也看完!!!
现在2051,打算把武峰老师视频课D1学完,然后报名比赛,再学点别的之类的去睡啦!

NLP学习D3-TF2chap3-4总结和代码实现(八股框架+CNN网络合集)+多线程相关推荐

  1. GAN生成对抗网络合集(三):InfoGAN和ACGAN-指定类别生成模拟样本的GAN(附代码)

    1 InfoGAN-带有隐含信息的GAN InfoGAN是一种把信息论与GAN相融合的神经网络,能够使网络具有信息解读功能.        GAN的生成器在构建样本时使用了任意的噪声向量x',并从低维 ...

  2. 记录重要的NLP学习资源链接

    整理一些NLP学习资源(不止NLP,本人主要关注NLP),如果有更好的,欢迎分享_ NLP 中文自然语言处理相关资料 https://github.com/crownpku/Awesome-Chine ...

  3. js/d3.min.js_在5分钟内学习D3.js

    js/d3.min.js by Sohaib Nehal 通过Sohaib Nehal 在5分钟内学习D3.js (Learn D3.js in 5 minutes) 创建数据可视表示的简介 (An ...

  4. NLP学习难在哪里?这份最全NLP学习路线图帮你解决难题!

    作为一名人工智能之自然语言处理的技术小享,最常被问到的莫过于「如何入门NLP」了? 今天小享就整理了保姆级NLP学习路线图(思维导图),非常的全面和清晰,分享给大家. 希望这个指南会伴随你们一起成长哟 ...

  5. NLP学习————实现一个BERT(简记)

    NLP学习-实现一个BERT(简记) 本文主要内容是介绍了BERT的代码结构.具体实现与原理,对BERT的一些简记 内容包括以下几个部分: BERT Tokenization 分词模型(BertTok ...

  6. 基于图灵机器人接口的简单NLP学习

    说明 图灵机器人提供在线接口,用户可自行注册学习,注册后官方提供想用的接口和连接方式,仅仅由于兴趣,做一个相当简单的聊天机器人,并开放核心源码,希望各位有闲情逸致的同胞可以继续丰富修改或扩展. 本品仅 ...

  7. c++服务器开发学习--02--MySQL,Redis,ASIO,iocp,TrinityCore代码结构,c++对象模型

    c++服务器开发学习--02--MySQL,Redis,ASIO,iocp,TrinityCore代码结构,c++对象模型 MySQL 问题 Redis Asio iocp TrinityCore代码 ...

  8. 曝!BAT大厂NLP学习进阶之法~

    "语言理解是人工智能领域皇冠上的明珠." --比尔盖茨 自然语言处理是一门综合性的学问,它远远不止机器学习算法.相比图像或语音,文本的变化更加复杂,例如从预处理来看,NLP 就要求 ...

  9. L1-015 跟奥巴马一起画方块 (15分) 美国总统奥巴马不仅呼吁所有人都学习编程,甚至以身作则编写代码,成为美国历史上首位编写计算机代码的总统。2014年底,为庆祝“计算机科学教育周”正式启动,奥

    美国总统奥巴马不仅呼吁所有人都学习编程,甚至以身作则编写代码,成为美国历史上首位编写计算机代码的总统.2014年底,为庆祝"计算机科学教育周"正式启动,奥巴马编写了很简单的计算机代 ...

最新文章

  1. html 传参数 菜单自动展开,【HTML5】Jquery打造竖向伸缩/展开菜单
  2. caj文件浏览器_解决CAJ阅读器读取学位论文卡到爆炸的问题
  3. HDU2147 kiki's game
  4. 6个免费视频、音频素材网,视频剪辑必备
  5. python圣诞节祝福_Pyhton表白代码——浪漫圣诞节
  6. Node.js内置模块 events的基本使用
  7. 解决 Component inside <Transition> renders non-element root node that cannot be animated 问题
  8. Hadoop三大框架之MapReduce工作流程
  9. dump文件调试技巧(产生Dump文件)
  10. mui android连接蓝牙打印机打印
  11. android+蓝牙遥控器,一种通过蓝牙遥控安卓设备的方法与流程
  12. WeChat----网站接入微信登录(前端)
  13. 我的为人处事真的有问题吗?
  14. 关于CMNET和CMWAP联网实践
  15. (免费分享)基于javaweb,ssm旅游信息系统
  16. 谷歌因安卓涉嫌垄断被罚51亿美元,上诉称:没看到我们在和苹果竞争?
  17. 基于HTML+CSS+JavaScript制作简单的大学生网页设计——我的家乡湖南
  18. sicily 1214
  19. js获取服务器的时间
  20. php初始化对象菜鸟教程,菜鸟教程php面向对象

热门文章

  1. 平头哥RVB2601板子上手——“救砖“记
  2. python center函数_利用Python函数实现一个万历表完整示例
  3. 一灯大师,基于imx6ull点亮LED灯
  4. MIT要用人工智能帮你做菜:上传美食照片,给你一份菜谱
  5. systemverilog 宏定义 `define 用法。
  6. 使用mysql导入本地文件文件时提示ERROR 1148 (42000): The used command is not allowed with this MySQL version
  7. Himall商城文件操作接口Commons
  8. win8 ie浏览器打不开
  9. HMAC原理及SM3-HMAC实现
  10. CloudSim有关NetworkDatacenter的学习