陈珏 发布的文章

from os import mkdir, listdir
from os.path import isdir, basename
from random import choice, randrange
from string import digits
from PIL import Image, ImageDraw # pillow
from PIL.ImageFont import truetype
from sklearn import svm
from sklearn.model_selection import train_test_split

图像尺寸、图片中的数字字体大小、噪点比例

width, height = 30, 60
fontSize = 40
noiseRate = 8

def generateDigits(dstDir='datasets', num=4000):

# 生成num个包含数字的图片文件存放于当前目录下的datasets子目录
if not isdir(dstDir):
    mkdir(dstDir)
# digits.txt用来存储每个图片对应的数字
with open(dstDir+'\\digits.txt', 'w') as fp:
    for i in range(num):
        # 随机选择一个数字,生成对应的彩色图像文件
        digit = choice(digits)
        im = Image.new('RGB', (width,height), (255,255,255))
        imDraw = ImageDraw.Draw(im)
        font = truetype('c:\\windows\\fonts\\TIMESBD.TTF',
                          fontSize)
        imDraw.text((0,0), digit, font=font, fill=(0,0,0))
        # 加入随机干扰
        for j in range(int(noiseRate*width*height)):
            w, h = randrange(1, width-1), randrange(height)
            # 水平交换两个相邻像素的颜色
            c1 = im.getpixel((w,h))
            c2 = im.getpixel((w+1,h))                
            imDraw.point((w,h), fill=c2)
            imDraw.point((w+1,h), fill=c1)
        im.save(dstDir+'\\'+str(i)+'.jpg')
        fp.write(digit+'\n')

def loadDigits(dstDir='datasets'):

# 获取所有图像文件名
digitsFile = [dstDir+'\\'+fn for fn in listdir(dstDir)
               if fn.endswith('.jpg')]
# 按编号排序
digitsFile.sort(key=lambda fn: int(basename(fn)[:-4]))
# digitsData用于存放读取的图片中数字信息
# 每个图片中所有像素值存放于digitsData中的一行数据
digitsData = []
for fn in digitsFile:
    with Image.open(fn) as im:
        data = [sum(im.getpixel((w,h)))/len(im.getpixel((w,h)))
                 for w in range(width)
                 for h in range(height)]
        digitsData.append(data)
# digitsLabel用于存放图片中数字的标准分类
with open(dstDir+'\\digits.txt') as fp:
    digitsLabel = fp.readlines()
digitsLabel = [label.strip() for label in digitsLabel]
return (digitsData, digitsLabel)

生成图片文件

generateDigits(num=4000)

加载数据

data = loadDigits()
print('数据加载完成。')

随机划分训练集和测试集,其中参数test_size用来指定测试集大小

X_train, X_test, y_train, y_test = train_test_split(data[0],

                                                data[1],
                                                test_size=0.1)

创建并训练模型

svcClassifier = svm.SVC(kernel="linear", C=1000, gamma=0.001)
svcClassifier.fit(X_train, y_train)
print('模型训练完成。')

使用测试集对模型进行评分

score = svcClassifier.score(X_test, y_test)
print('模型测试得分:', score)

import numpy as np
from sklearn import tree
X = np.array([[0,0,0],[0,0,1],[0,1,0],[0,1,1],[1,0,0],[1,0,1],[1,1,0],[1,1,1]])
y = [0,1,1,1,2,3,3,4]
clf = tree.DecisionTreeClassifier()
clf.fit(X,y)

clf.predict([[1,0,0]])

import graphviz
dot_data = tree.export_graphviz(clf, out_file=None)
graph = graphviz.Source(dot_data)
graph.render('result')

result.pdf

from sklearn.linear_model import LinearRegression
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split

boston = load_boston()
X = boston['data']
y = boston['target']

X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2,random_state=42)
clf=LinearRegression().fit(X_train,y_train)

y_pred = clf.predict(X_test)

import matplotlib.pyplot as plt

plt.figure(figsize=(10,6))
plt.plot(range(y_pred.shape[0]),y_pred,c='b',lw=1.5,ls='-')
plt.plot(range(y_test.shape[0]),y_test,c='r',lw=1.5,ls='-')
plt.savefig('boston.png')
plt.show

from keras.layers import MaxPooling2D

卷积层1

model = Sequential()
model.add(Conv2D(filters=16, kernel_size=3, strides=3, activation='relu', input_shape=(84, 84, 1)))

池化层1

model.add(MaxPooling2D(pool_size=2, strides=2))

卷积层2

model.add(Conv2D(filters=32, kernel_size=3, padding='same', activation='relu'))

池化层2

model.add(MaxPooling2D(pool_size=2, strides=2))

展平上述池化层,隐藏层神经元128个,输出10分类。

from keras.layers import MaxPooling2D,Flatten
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dense(10, activation='softmax'))
model.summary()


https://alax.zone/usr/uploads/2023/04/438161756.rar

课程环境构建指南:
0、查看conda虚拟环境,如何查看conda中的虚拟环境

https://www.zhangshilong.cn/work/208169.html

1、修改Jupyter Notebook工具的默认工作目录​为 C:\AIMaterial

https://zhuanlan.zhihu.com/p/48962153/

打开conda终端,:
2、查看python版本

python -V

3、查看conda虚拟环境

conda env list

4、安装conda本课程环境 默认至 C:\Users\thinkpad.conda\envs\ailearning

conda create -n ailearning python=3.8

5、激活已创建的环境

 conda activate ailearning
 conda deactivate

6、在ailearning环境中使用jupyter notebook

conda install nb_conda

7、系统环境变量

path   增加  C:\ProgramData\Anaconda3\Scripts            Anaconda3\Scripts是重点

8、anaconda快捷方式自动产生 “Jupyter Notebook (ailearning)” 作为快捷启动
9、安装应用包

pip install tensorflow-cpu==2.6.0
pip install keras==2.6.0
pip install opencv-python
pip install numpy==1.19.2
pip install pandas==1.4.2
pip install matplotlib
pip install scikit-learn
pip3 install tensorlayer

pip install scipy=1.9.0   是否要装?

tensorflow-cpu 2.6.0 requires numpy~=1.19.2, but you have numpy 1.24.1 which is incompatible.

结束!

jupyter notebook快捷键: https://blog.51cto.com/u_14009243/5975080
1、shift+tab连续按4次,调出函数使用说明
2、切换到Markdown:ESC+M
3、编辑模式 向下插入一行 b

          向上插入一行 a
          删除当前行   双击d

drawing

sklearn在线用户手册:
https://scikit-learn.org/stable/user_guide.html

tensorflow在线用户手册:
https://tensorflow.google.cn/api_docs/python/tf

keras在线用户手册:
https://keras.io/zh/
https://keras.io/api/

动手学深度学习:
https://zh.d2l.ai/ Mxnet版
https://github.com/TrickyGo/Dive-into-DL-TensorFlow2.0
https://trickygo.github.io/Dive-into-DL-TensorFlow2.0/#/read_guide

tensorlayer在线用户手册:
https://tensorlayercn.readthedocs.io/zh/latest/user/tutorial.html#tensorlayer

强化学习视频:
https://mofanpy.com/tutorials/machine-learning/reinforcement-learning/intro-PG