写在前面
tensorflow2.0是真的香!Anaconda是真的香!
大一寒假,开始折腾神经网络,之前买了不少相关书籍,虽说全部都看了一遍,但是感觉自己对一些细节还是理解得不是很清晰。(算了,该黑箱就黑箱)。高三数据有玩过tensorflow1.x,搭了个线性回归和全连接神经网络的mnist就没了。然后就去写开源固定翼飞控的程序了QAQ。(开源链接:https://gitee.com/pineconepi/PineconePi_Pilot)。然后本来计划着大一上学期在校时间玩玩,结果仍然是咕咕咕,因为各种事情鸽掉了。日常唠嗑结束了,下面开始正文:
关于jetson nano +tensorflow 的更多代码分享见:
https://gitee.com/xddcore/Jetson_Nano
关于tensorflow,anaconda的安装,百度上一搜有一大把,我就不再重述一遍了,大家自行百度就行。
官方API文档链接(学tensorflow真的不用买书,看API文档就行了QAQ):
https://tensorflow.google.cn/api_docs/python/tf
制作自己的数据集
相信刚刚入门神经网络的小白都会有一个疑问:“虽然我自己跑了mnist,fashion mnist等数据集,但是我想有个自己的数据集啊QAQ。我要训练个神经网络,帮我找npy啊(说出了程序猿的心声)”。那么现在就围绕自己制作数据集开始。大家目前接触到的数据都是图像数据(大概分为两类,BMP(单色位,也就是黑白),RGB(也就是彩色,一般是RGB888))
想制作训练集,很简单,阅读完官方API文档后,我写出了如下程序:
import os
import tensorflow as tf
from PIL import Image #注意Image,后面会用到
import matplotlib.pyplot as plt
import numpy as np
i = 0
cwd='E:/AI/datasets/dogvs.cat/train/'#根目录
classes=['dog','cat'] #狗与猫
writer= tf.io.TFRecordWriter("train.tfrecords") #要生成的文件
for index,name in enumerate(classes):
class_path = cwd + name + '/'
for img_name in os.listdir(class_path):
img_path=class_path+img_name #每一个图片的地址
img=Image.open(img_path)
img= img.resize((128,128))
img_raw=img.tobytes()#将图片转化为二进制格式
example = tf.train.Example(
features=tf.train.Features(
feature={
"label": tf.train.Feature(int64_list=tf.train.Int64List(value=[index])),
'img_raw': tf.train.Feature(bytes_list=tf.train.BytesList(value=[img_raw]))
}
)
) #example对象对label和image数据进行封装
writer.write(example.SerializeToString()) #序列化为字符串
i = i + 1
print("已写入"+str(i)+"张图片")
writer.close()
上述程序功能很清楚,读取根目录下的标有分类文件夹,标签用0,1表示(0:狗,1:猫),然后将图片resize成128*128分辨率,然后转成String根据设置好的特征写入到TFRecord文件中,标签以int写入。(为啥要这样弄,别问我,问就是官方文档就说得像这样弄)。
用TFRecord的好处,以二进制编码,后面训练时加载速度会比较快(如果你是AMD 3990X+4路RTX 2080TI,当我没说)
数据集制作好了,现在开始进行训练
追《大主宰》去了,虽然自己不喜欢看小说,但是小说改编的电视剧是真的香QAQ。后面有空再更新