1.简述人工智能、机器学习和深度学习三者的联系与区别。
2. 全连接神经网络与卷积神经网络的联系与区别。
3.理解卷积计算。
以digit0为例,进行手工演算。
from sklearn.datasets import load_digits #小数据集8*8
digits = load_digits()
0 | 0 | 5 | 13 | 9 | 1 | 0 | 0 |
0 | 0 | 13 | 15 | 10 | 15 | 5 | 0 |
0 | 3 | 15 | 2 | 0 | 11 | 8 | 0 |
0 | 4 | 12 | 0 | 0 | 8 | 8 | 0 |
0 | 5 | 8 | 0 | 0 | 9 | 8 | 0 |
0 | 4 | 11 | 0 | 1 | 12 | 7 | 0 |
0 | 2 | 14 | 5 | 10 | 12 | 0 | 0 |
0 | 0 | 6 | 13 | 10 | 0 | 0 | 0 |
4.理解卷积如何提取图像特征。
读取一个图像;
以下矩阵为卷积核进行卷积操作;
显示卷积之后的图像,观察提取到什么特征。
1 | 0 | -1 |
1 | 0 | -1 |
1 | 0 | -1 |
1 | 1 | 1 |
0 | 0 | 0 |
-1 | -1 | -1 |
-1 | -1 | -1 |
-1 | 8 | -1 |
-1 | -1 | -1 |
卷积API
scipy.signal.convolve2d
tf.keras.layers.Conv2D
#图片卷积运算 from PIL import Image from scipy.signal import convolve2d import matplotlib.pyplot as plt import numpy as np I = Image.open(r"D:workpy3 Project机器学习dataxhx-153.jpg") # 读取图片 L = I.convert('L') # 将彩色的图片转化为灰度图片 p = np.array(I) # 原图转化为数组 pg = np.array(L) # 灰度图转化为数组 # 输入卷积核 ker1 = np.array([[1,0,-1],[1,0,-1],[1,0,-1]]) # 垂直边缘检测 ker2 = np.array([[-1,-1,-1],[0,0,0],[1,1,1]]) # 水平边缘检测 ker3 = np.array([[-1,-1,-1],[-1,8,-1],[-1,-1,-1]]) # 进行卷积计算(目标,卷积核,填充方式,卷积类型) p1 = convolve2d(pg,ker1,boundary='symm',mode='same') p2 = convolve2d(pg,ker2,boundary='symm',mode='same') p2 = convolve2d(pg,ker3,boundary='symm',mode='same')
5. 安装Tensorflow,keras
* 虽然在pycharm中可以显示包,但似乎缺少了某些配置并不能调用,正在尝试修复。
6. 设计手写数字识别模型结构,注意数据维度的变化。
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Flatten, Conv2D, MaxPool2D
model = tf.keras.Sequential()
model.add(Conv2D(…))
model.add(MaxPool2D(…))
...
#可以上传手动演算的每层数据结构的变化过程。model.summary()
# 导入相关包 from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense,Dropout,Flatten,Conv2D,MaxPool2D ks=(4,4) #使用4x4的卷积核 # 建立模型 model=Sequential() # 卷积层1 model.add(Conv2D(filters=16,kernel_size=ks,padding="same",input_shape=(8,8,1),activation='relu')) #第一层输如数据的shape要指定外,其他层的数据shape框架会自动推导 # 池化层1 model.add(MaxPool2D(pool_size=(2,2))) # Drop层 防止过拟合 model.add(Dropout(0.25)) # 卷积层2 model.add(Conv2D(filters=32,kernel_size=ks,padding='same',activation='relu')) # 池化层2 model.add(MaxPool2D(pool_size=(2,2))) # Drop层 防止过拟合 model.add(Dropout(0.25)) # 卷积层3 model.add(Conv2D(filters=64,kernel_size=ks,padding='same',activation='relu')) # 卷积层4 model.add(Conv2D(filters=128,kernel_size=ks,padding='same',activation='relu')) # 池化层3 model.add(MaxPool2D(pool_size=(2,2))) # Drop层 防止过拟合 model.add(Dropout(0.25)) # 平坦层 model.add(Flatten()) # 全连接层 model.add(Dense(128,activation='relu')) # Drop层 防止过拟合 model.add(Dropout(0.25)) # 激活函数 model.add(Dense(10,activation='softmax')) # 查看构造模型结果 model.summary()
参考:
https://www.jianshu.com/p/afe485aa08ce
https://blog.csdn.net/junjun150013652/article/details/82217571