俄罗斯网站推广,省级建设网站,电子商务网站建设与管理课件,网站优点文章目录 卷积、下采样、经典卷积网络1. 对图像进行卷积处理2. 池化3. VGGNET4. 采用预训练的Resnet实现猫狗识别 TensorFlow2.2基本应用5. 使用深度学习进行手写数字识别 卷积、下采样、经典卷积网络
1. 对图像进行卷积处理
import cv2
path data\instance\p67.jpg
input_… 文章目录 卷积、下采样、经典卷积网络1. 对图像进行卷积处理2. 池化3. VGGNET4. 采用预训练的Resnet实现猫狗识别 TensorFlow2.2基本应用5. 使用深度学习进行手写数字识别 卷积、下采样、经典卷积网络
1. 对图像进行卷积处理
import cv2
path data\instance\p67.jpg
input_img cv2.imread(path)import cv2
import numpy as np
#分别将三个通道进行卷积然后合并通道def conv(image, kernel): conv_b convolve(image[:, :, 0], kernel) conv_g convolve(image[:, :, 1], kernel) conv_r convolve(image[:, :, 2], kernel) output np.dstack([conv_b, conv_g, conv_r]) return output#卷积处理
def convolve(image, kernel): h_kernel, w_kernel kernel.shape h_image, w_image image.shapeh_output h_image - h_kernel 1 w_output w_image - w_kernel 1 output np.zeros((h_output, w_output), np.uint8) for i in range(h_output): for j in range(w_output): output[i, j] np.multiply(image[i:i h_kernel, j:j w_kernel], kernel).sum() return outputif __name__ __main__: path data\instance\p67.jpg input_img cv2.imread(path) # 1.锐化卷积核 #kernel np.array([[-1,-1,-1],[-1,9,-1],[-1,-1,-1]]) # 2.模糊卷积核kernel np.array([[0.1,0.1,0.1],[0.1,0.2,0.1],[0.1,0.1,0.1]]) output_img conv(input_img, kernel)cv2.imwrite(path.replace(.jpg, -processed.jpg), output_img) cv2.imshow(Output Image, output_img) cv2.waitKey(0)2. 池化
img cv2.imread(data\instance\dog.jpg)
img.shape(4064, 3216, 3)import numpy as np
from PIL import Image
import cv2
import matplotlib.pyplot as plt#均值池化
def AVGpooling(imgData, strdW, strdH):W,H imgData.shapenewImg []for i in range(0,W,strdW):line []for j in range(0,H,strdH):x imgData[i:istrdW,j:jstrdH] #获取当前待池化区域avgValuenp.sum(x)/(strdW*strdH) #求该区域的均值line.append(avgValue) newImg.append(line)return np.array(newImg)#最大池化
def MAXpooling(imgData, strdW, strdH):W,H imgData.shapenewImg []for i in range(0,W,strdW):line []for j in range(0,H,strdH):x imgData[i:istrdW,j:jstrdH] #获取当前待池化区域maxValuenp.max(x) #求该区域的最大值line.append(maxValue) newImg.append(line)return np.array(newImg)img cv2.imread(data\instance\dog.jpg)
imgData img[:,:,1] #绿色通道#显示原图
plt.subplot(221)
plt.imshow(img)
plt.axis(off)#显示原始绿通道图
plt.subplot(222)
plt.imshow(imgData)
plt.axis(off)#显示平均池化结果图
AVGimg AVGpooling(imgData, 2, 2)
plt.subplot(223)
plt.imshow(AVGimg)
plt.axis(off)#显示最大池化结果图
MAXimg MAXpooling(imgData, 2, 2)
plt.subplot(224)
plt.imshow(MAXimg)
plt.axis(off)
plt.show()3. VGGNET
import numpy as np
from tensorflow.keras import backend as K
import matplotlib.pyplot as plt
from tensorflow.keras.applications import vgg16 # Keras内置 VGG-16模块直接可调用。
from tensorflow.keras.preprocessing import image
from tensorflow.keras.applications.vgg16 import preprocess_input
import math
input_size 224 # 网络输入图像的大小长宽相等
kernel_size 64 # 可视化卷积核的大小长宽相等
layer_vis True # 特征图是否可视化
kernel_vis True # 卷积核是否可视化
each_layer False # 卷积核可视化是否每层都做
which_layer 1 # 如果不是每层都做那么第几个卷积层
path data\instance\p67.jpg img image.load_img(path, target_size(input_size, input_size))
img image.img_to_array(img)
img np.expand_dims(img, axis0)
img preprocess_input(img) #标准化预处理
model vgg16.VGG16(include_topTrue, weightsimagenet)def network_configuration(): all_channels [64, 64, 64, 128, 128, 128, 256, 256, 256, 256, 512, 512, 512, 512, 512, 512, 512, 512] down_sampling [1, 1, 1 / 2, 1 / 2, 1 / 2, 1 / 4, 1 / 4, 1 / 4, 1 / 4, 1 / 8, 1 / 8, 1 / 8, 1 / 8, 1 / 16, 1 / 16, 1 / 16, 1 / 16, 1 / 32] conv_layers [1, 2, 4, 5, 7, 8, 9, 11, 12, 13, 15, 16, 17] conv_channels [64, 64, 128, 128, 256, 256, 256, 512, 512, 512, 512, 512, 512] return all_channels, down_sampling, conv_layers, conv_channelsdef layer_visualization(model, img, layer_num, channel, ds): # 设置可视化的层 layer K.function([model.layers[0].input], [model.layers[layer_num].output]) f layer([img])[0] feature_aspect math.ceil(math.sqrt(channel)) single_size int(input_size * ds)plt.figure(figsize(8, 8.5)) plt.suptitle(Layer- str(layer_num), fontsize22)plt.subplots_adjust(left0.02, bottom0.02, right0.98, top0.94, wspace0.05, hspace0.05) for i_channel in range(channel): print(Channel-{} in Layer-{} is running..format(i_channel 1, layer_num)) show_img f[:, :, :, i_channel] show_img np.reshape(show_img, (single_size, single_size)) plt.subplot(feature_aspect, feature_aspect, i_channel 1) plt.imshow(show_img) plt.axis(off) fig plt.gcf() fig.savefig(data/instance/feature_kernel_images/layer_ str(layer_num).zfill(2) .png, formatpng, dpi300)plt.show()all_channels, down_sampling, conv_layers, conv_channels network_configuration()
if layer_vis: for i in range(len(all_channels)): layer_visualization(model, img, i 1, all_channels[i], down_sampling[i])
4. 采用预训练的Resnet实现猫狗识别
from tensorflow.keras.applications.resnet50 import ResNet50
from tensorflow.keras.preprocessing import image
from tensorflow.keras.applications.resnet50 import preprocess_input, decode_predictions
import numpy as np
from PIL import ImageFont, ImageDraw, Image
import cv2img_path data\instance\dog.jpg #进行狗的判断
#img_path cat.jpg #进行猫的判断
#img_path deer.jpg #进行鹿的判断weights_path resnet50_weights.h5img image.load_img(img_path, target_size(224, 224))
x image.img_to_array(img)
x np.expand_dims(x, axis0)
x preprocess_input(x)def get_model(): model ResNet50(weightsweights_path) # 导入模型以及预训练权重print(model.summary()) # 打印模型概况 return model
model get_model()
Model: resnet50
__________________________________________________________________________________________________Layer (type) Output Shape Param # Connected to
input_4 (InputLayer) [(None, 224, 224, 3 0 [] )] conv1_pad (ZeroPadding2D) (None, 230, 230, 3) 0 [input_4[0][0]] conv1_conv (Conv2D) (None, 112, 112, 64 9472 [conv1_pad[0][0]] ) conv1_bn (BatchNormalization) (None, 112, 112, 64 256 [conv1_conv[0][0]] ) conv1_relu (Activation) (None, 112, 112, 64 0 [conv1_bn[0][0]] ) pool1_pad (ZeroPadding2D) (None, 114, 114, 64 0 [conv1_relu[0][0]] ) pool1_pool (MaxPooling2D) (None, 56, 56, 64) 0 [pool1_pad[0][0]] conv2_block1_1_conv (Conv2D) (None, 56, 56, 64) 4160 [pool1_pool[0][0]] conv2_block1_1_bn (BatchNormal (None, 56, 56, 64) 256 [conv2_block1_1_conv[0][0]] ization) conv2_block1_1_relu (Activatio (None, 56, 56, 64) 0 [conv2_block1_1_bn[0][0]] n) conv2_block1_2_conv (Conv2D) (None, 56, 56, 64) 36928 [conv2_block1_1_relu[0][0]] conv2_block1_2_bn (BatchNormal (None, 56, 56, 64) 256 [conv2_block1_2_conv[0][0]] ization) conv2_block1_2_relu (Activatio (None, 56, 56, 64) 0 [conv2_block1_2_bn[0][0]] n) conv2_block1_0_conv (Conv2D) (None, 56, 56, 256) 16640 [pool1_pool[0][0]] conv2_block1_3_conv (Conv2D) (None, 56, 56, 256) 16640 [conv2_block1_2_relu[0][0]] conv2_block1_0_bn (BatchNormal (None, 56, 56, 256) 1024 [conv2_block1_0_conv[0][0]] ization) conv2_block1_3_bn (BatchNormal (None, 56, 56, 256) 1024 [conv2_block1_3_conv[0][0]] ization) conv2_block1_add (Add) (None, 56, 56, 256) 0 [conv2_block1_0_bn[0][0], conv2_block1_3_bn[0][0]] conv2_block1_out (Activation) (None, 56, 56, 256) 0 [conv2_block1_add[0][0]] conv2_block2_1_conv (Conv2D) (None, 56, 56, 64) 16448 [conv2_block1_out[0][0]] conv2_block2_1_bn (BatchNormal (None, 56, 56, 64) 256 [conv2_block2_1_conv[0][0]] ization) conv2_block2_1_relu (Activatio (None, 56, 56, 64) 0 [conv2_block2_1_bn[0][0]] n) conv2_block2_2_conv (Conv2D) (None, 56, 56, 64) 36928 [conv2_block2_1_relu[0][0]] conv2_block2_2_bn (BatchNormal (None, 56, 56, 64) 256 [conv2_block2_2_conv[0][0]] ization) conv2_block2_2_relu (Activatio (None, 56, 56, 64) 0 [conv2_block2_2_bn[0][0]] n) conv2_block2_3_conv (Conv2D) (None, 56, 56, 256) 16640 [conv2_block2_2_relu[0][0]] conv2_block2_3_bn (BatchNormal (None, 56, 56, 256) 1024 [conv2_block2_3_conv[0][0]] ization) conv2_block2_add (Add) (None, 56, 56, 256) 0 [conv2_block1_out[0][0], conv2_block2_3_bn[0][0]] conv2_block2_out (Activation) (None, 56, 56, 256) 0 [conv2_block2_add[0][0]] conv2_block3_1_conv (Conv2D) (None, 56, 56, 64) 16448 [conv2_block2_out[0][0]] conv2_block3_1_bn (BatchNormal (None, 56, 56, 64) 256 [conv2_block3_1_conv[0][0]] ization) conv2_block3_1_relu (Activatio (None, 56, 56, 64) 0 [conv2_block3_1_bn[0][0]] n) conv2_block3_2_conv (Conv2D) (None, 56, 56, 64) 36928 [conv2_block3_1_relu[0][0]] conv2_block3_2_bn (BatchNormal (None, 56, 56, 64) 256 [conv2_block3_2_conv[0][0]] ization) conv2_block3_2_relu (Activatio (None, 56, 56, 64) 0 [conv2_block3_2_bn[0][0]] n) conv2_block3_3_conv (Conv2D) (None, 56, 56, 256) 16640 [conv2_block3_2_relu[0][0]] conv2_block3_3_bn (BatchNormal (None, 56, 56, 256) 1024 [conv2_block3_3_conv[0][0]] ization) conv2_block3_add (Add) (None, 56, 56, 256) 0 [conv2_block2_out[0][0], conv2_block3_3_bn[0][0]] conv2_block3_out (Activation) (None, 56, 56, 256) 0 [conv2_block3_add[0][0]] conv3_block1_1_conv (Conv2D) (None, 28, 28, 128) 32896 [conv2_block3_out[0][0]] conv3_block1_1_bn (BatchNormal (None, 28, 28, 128) 512 [conv3_block1_1_conv[0][0]] ization) conv3_block1_1_relu (Activatio (None, 28, 28, 128) 0 [conv3_block1_1_bn[0][0]] n) conv3_block1_2_conv (Conv2D) (None, 28, 28, 128) 147584 [conv3_block1_1_relu[0][0]] conv3_block1_2_bn (BatchNormal (None, 28, 28, 128) 512 [conv3_block1_2_conv[0][0]] ization) conv3_block1_2_relu (Activatio (None, 28, 28, 128) 0 [conv3_block1_2_bn[0][0]] n) conv3_block1_0_conv (Conv2D) (None, 28, 28, 512) 131584 [conv2_block3_out[0][0]] conv3_block1_3_conv (Conv2D) (None, 28, 28, 512) 66048 [conv3_block1_2_relu[0][0]] conv3_block1_0_bn (BatchNormal (None, 28, 28, 512) 2048 [conv3_block1_0_conv[0][0]] ization) conv3_block1_3_bn (BatchNormal (None, 28, 28, 512) 2048 [conv3_block1_3_conv[0][0]] ization) conv3_block1_add (Add) (None, 28, 28, 512) 0 [conv3_block1_0_bn[0][0], conv3_block1_3_bn[0][0]] conv3_block1_out (Activation) (None, 28, 28, 512) 0 [conv3_block1_add[0][0]] conv3_block2_1_conv (Conv2D) (None, 28, 28, 128) 65664 [conv3_block1_out[0][0]] conv3_block2_1_bn (BatchNormal (None, 28, 28, 128) 512 [conv3_block2_1_conv[0][0]] ization) conv3_block2_1_relu (Activatio (None, 28, 28, 128) 0 [conv3_block2_1_bn[0][0]] n) conv3_block2_2_conv (Conv2D) (None, 28, 28, 128) 147584 [conv3_block2_1_relu[0][0]] conv3_block2_2_bn (BatchNormal (None, 28, 28, 128) 512 [conv3_block2_2_conv[0][0]] ization) conv3_block2_2_relu (Activatio (None, 28, 28, 128) 0 [conv3_block2_2_bn[0][0]] n) conv3_block2_3_conv (Conv2D) (None, 28, 28, 512) 66048 [conv3_block2_2_relu[0][0]] conv3_block2_3_bn (BatchNormal (None, 28, 28, 512) 2048 [conv3_block2_3_conv[0][0]] ization) conv3_block2_add (Add) (None, 28, 28, 512) 0 [conv3_block1_out[0][0], conv3_block2_3_bn[0][0]] conv3_block2_out (Activation) (None, 28, 28, 512) 0 [conv3_block2_add[0][0]] conv3_block3_1_conv (Conv2D) (None, 28, 28, 128) 65664 [conv3_block2_out[0][0]] conv3_block3_1_bn (BatchNormal (None, 28, 28, 128) 512 [conv3_block3_1_conv[0][0]] ization) conv3_block3_1_relu (Activatio (None, 28, 28, 128) 0 [conv3_block3_1_bn[0][0]] n) conv3_block3_2_conv (Conv2D) (None, 28, 28, 128) 147584 [conv3_block3_1_relu[0][0]] conv3_block3_2_bn (BatchNormal (None, 28, 28, 128) 512 [conv3_block3_2_conv[0][0]] ization) conv3_block3_2_relu (Activatio (None, 28, 28, 128) 0 [conv3_block3_2_bn[0][0]] n) conv3_block3_3_conv (Conv2D) (None, 28, 28, 512) 66048 [conv3_block3_2_relu[0][0]] conv3_block3_3_bn (BatchNormal (None, 28, 28, 512) 2048 [conv3_block3_3_conv[0][0]] ization) conv3_block3_add (Add) (None, 28, 28, 512) 0 [conv3_block2_out[0][0], conv3_block3_3_bn[0][0]] conv3_block3_out (Activation) (None, 28, 28, 512) 0 [conv3_block3_add[0][0]] conv3_block4_1_conv (Conv2D) (None, 28, 28, 128) 65664 [conv3_block3_out[0][0]] conv3_block4_1_bn (BatchNormal (None, 28, 28, 128) 512 [conv3_block4_1_conv[0][0]] ization) conv3_block4_1_relu (Activatio (None, 28, 28, 128) 0 [conv3_block4_1_bn[0][0]] n) conv3_block4_2_conv (Conv2D) (None, 28, 28, 128) 147584 [conv3_block4_1_relu[0][0]] conv3_block4_2_bn (BatchNormal (None, 28, 28, 128) 512 [conv3_block4_2_conv[0][0]] ization) conv3_block4_2_relu (Activatio (None, 28, 28, 128) 0 [conv3_block4_2_bn[0][0]] n) conv3_block4_3_conv (Conv2D) (None, 28, 28, 512) 66048 [conv3_block4_2_relu[0][0]] conv3_block4_3_bn (BatchNormal (None, 28, 28, 512) 2048 [conv3_block4_3_conv[0][0]] ization) conv3_block4_add (Add) (None, 28, 28, 512) 0 [conv3_block3_out[0][0], conv3_block4_3_bn[0][0]] conv3_block4_out (Activation) (None, 28, 28, 512) 0 [conv3_block4_add[0][0]] conv4_block1_1_conv (Conv2D) (None, 14, 14, 256) 131328 [conv3_block4_out[0][0]] conv4_block1_1_bn (BatchNormal (None, 14, 14, 256) 1024 [conv4_block1_1_conv[0][0]] ization) conv4_block1_1_relu (Activatio (None, 14, 14, 256) 0 [conv4_block1_1_bn[0][0]] n) conv4_block1_2_conv (Conv2D) (None, 14, 14, 256) 590080 [conv4_block1_1_relu[0][0]] conv4_block1_2_bn (BatchNormal (None, 14, 14, 256) 1024 [conv4_block1_2_conv[0][0]] ization) conv4_block1_2_relu (Activatio (None, 14, 14, 256) 0 [conv4_block1_2_bn[0][0]] n) conv4_block1_0_conv (Conv2D) (None, 14, 14, 1024 525312 [conv3_block4_out[0][0]] ) conv4_block1_3_conv (Conv2D) (None, 14, 14, 1024 263168 [conv4_block1_2_relu[0][0]] ) conv4_block1_0_bn (BatchNormal (None, 14, 14, 1024 4096 [conv4_block1_0_conv[0][0]] ization) ) conv4_block1_3_bn (BatchNormal (None, 14, 14, 1024 4096 [conv4_block1_3_conv[0][0]] ization) ) conv4_block1_add (Add) (None, 14, 14, 1024 0 [conv4_block1_0_bn[0][0], ) conv4_block1_3_bn[0][0]] conv4_block1_out (Activation) (None, 14, 14, 1024 0 [conv4_block1_add[0][0]] ) conv4_block2_1_conv (Conv2D) (None, 14, 14, 256) 262400 [conv4_block1_out[0][0]] conv4_block2_1_bn (BatchNormal (None, 14, 14, 256) 1024 [conv4_block2_1_conv[0][0]] ization) conv4_block2_1_relu (Activatio (None, 14, 14, 256) 0 [conv4_block2_1_bn[0][0]] n) conv4_block2_2_conv (Conv2D) (None, 14, 14, 256) 590080 [conv4_block2_1_relu[0][0]] conv4_block2_2_bn (BatchNormal (None, 14, 14, 256) 1024 [conv4_block2_2_conv[0][0]] ization) conv4_block2_2_relu (Activatio (None, 14, 14, 256) 0 [conv4_block2_2_bn[0][0]] n) conv4_block2_3_conv (Conv2D) (None, 14, 14, 1024 263168 [conv4_block2_2_relu[0][0]] ) conv4_block2_3_bn (BatchNormal (None, 14, 14, 1024 4096 [conv4_block2_3_conv[0][0]] ization) ) conv4_block2_add (Add) (None, 14, 14, 1024 0 [conv4_block1_out[0][0], ) conv4_block2_3_bn[0][0]] conv4_block2_out (Activation) (None, 14, 14, 1024 0 [conv4_block2_add[0][0]] ) conv4_block3_1_conv (Conv2D) (None, 14, 14, 256) 262400 [conv4_block2_out[0][0]] conv4_block3_1_bn (BatchNormal (None, 14, 14, 256) 1024 [conv4_block3_1_conv[0][0]] ization) conv4_block3_1_relu (Activatio (None, 14, 14, 256) 0 [conv4_block3_1_bn[0][0]] n) conv4_block3_2_conv (Conv2D) (None, 14, 14, 256) 590080 [conv4_block3_1_relu[0][0]] conv4_block3_2_bn (BatchNormal (None, 14, 14, 256) 1024 [conv4_block3_2_conv[0][0]] ization) conv4_block3_2_relu (Activatio (None, 14, 14, 256) 0 [conv4_block3_2_bn[0][0]] n) conv4_block3_3_conv (Conv2D) (None, 14, 14, 1024 263168 [conv4_block3_2_relu[0][0]] ) conv4_block3_3_bn (BatchNormal (None, 14, 14, 1024 4096 [conv4_block3_3_conv[0][0]] ization) ) conv4_block3_add (Add) (None, 14, 14, 1024 0 [conv4_block2_out[0][0], ) conv4_block3_3_bn[0][0]] conv4_block3_out (Activation) (None, 14, 14, 1024 0 [conv4_block3_add[0][0]] ) conv4_block4_1_conv (Conv2D) (None, 14, 14, 256) 262400 [conv4_block3_out[0][0]] conv4_block4_1_bn (BatchNormal (None, 14, 14, 256) 1024 [conv4_block4_1_conv[0][0]] ization) conv4_block4_1_relu (Activatio (None, 14, 14, 256) 0 [conv4_block4_1_bn[0][0]] n) conv4_block4_2_conv (Conv2D) (None, 14, 14, 256) 590080 [conv4_block4_1_relu[0][0]] conv4_block4_2_bn (BatchNormal (None, 14, 14, 256) 1024 [conv4_block4_2_conv[0][0]] ization) conv4_block4_2_relu (Activatio (None, 14, 14, 256) 0 [conv4_block4_2_bn[0][0]] n) conv4_block4_3_conv (Conv2D) (None, 14, 14, 1024 263168 [conv4_block4_2_relu[0][0]] ) conv4_block4_3_bn (BatchNormal (None, 14, 14, 1024 4096 [conv4_block4_3_conv[0][0]] ization) ) conv4_block4_add (Add) (None, 14, 14, 1024 0 [conv4_block3_out[0][0], ) conv4_block4_3_bn[0][0]] conv4_block4_out (Activation) (None, 14, 14, 1024 0 [conv4_block4_add[0][0]] ) conv4_block5_1_conv (Conv2D) (None, 14, 14, 256) 262400 [conv4_block4_out[0][0]] conv4_block5_1_bn (BatchNormal (None, 14, 14, 256) 1024 [conv4_block5_1_conv[0][0]] ization) conv4_block5_1_relu (Activatio (None, 14, 14, 256) 0 [conv4_block5_1_bn[0][0]] n) conv4_block5_2_conv (Conv2D) (None, 14, 14, 256) 590080 [conv4_block5_1_relu[0][0]] conv4_block5_2_bn (BatchNormal (None, 14, 14, 256) 1024 [conv4_block5_2_conv[0][0]] ization) conv4_block5_2_relu (Activatio (None, 14, 14, 256) 0 [conv4_block5_2_bn[0][0]] n) conv4_block5_3_conv (Conv2D) (None, 14, 14, 1024 263168 [conv4_block5_2_relu[0][0]] ) conv4_block5_3_bn (BatchNormal (None, 14, 14, 1024 4096 [conv4_block5_3_conv[0][0]] ization) ) conv4_block5_add (Add) (None, 14, 14, 1024 0 [conv4_block4_out[0][0], ) conv4_block5_3_bn[0][0]] conv4_block5_out (Activation) (None, 14, 14, 1024 0 [conv4_block5_add[0][0]] ) conv4_block6_1_conv (Conv2D) (None, 14, 14, 256) 262400 [conv4_block5_out[0][0]] conv4_block6_1_bn (BatchNormal (None, 14, 14, 256) 1024 [conv4_block6_1_conv[0][0]] ization) conv4_block6_1_relu (Activatio (None, 14, 14, 256) 0 [conv4_block6_1_bn[0][0]] n) conv4_block6_2_conv (Conv2D) (None, 14, 14, 256) 590080 [conv4_block6_1_relu[0][0]] conv4_block6_2_bn (BatchNormal (None, 14, 14, 256) 1024 [conv4_block6_2_conv[0][0]] ization) conv4_block6_2_relu (Activatio (None, 14, 14, 256) 0 [conv4_block6_2_bn[0][0]] n) conv4_block6_3_conv (Conv2D) (None, 14, 14, 1024 263168 [conv4_block6_2_relu[0][0]] ) conv4_block6_3_bn (BatchNormal (None, 14, 14, 1024 4096 [conv4_block6_3_conv[0][0]] ization) ) conv4_block6_add (Add) (None, 14, 14, 1024 0 [conv4_block5_out[0][0], ) conv4_block6_3_bn[0][0]] conv4_block6_out (Activation) (None, 14, 14, 1024 0 [conv4_block6_add[0][0]] ) conv5_block1_1_conv (Conv2D) (None, 7, 7, 512) 524800 [conv4_block6_out[0][0]] conv5_block1_1_bn (BatchNormal (None, 7, 7, 512) 2048 [conv5_block1_1_conv[0][0]] ization) conv5_block1_1_relu (Activatio (None, 7, 7, 512) 0 [conv5_block1_1_bn[0][0]] n) conv5_block1_2_conv (Conv2D) (None, 7, 7, 512) 2359808 [conv5_block1_1_relu[0][0]] conv5_block1_2_bn (BatchNormal (None, 7, 7, 512) 2048 [conv5_block1_2_conv[0][0]] ization) conv5_block1_2_relu (Activatio (None, 7, 7, 512) 0 [conv5_block1_2_bn[0][0]] n) conv5_block1_0_conv (Conv2D) (None, 7, 7, 2048) 2099200 [conv4_block6_out[0][0]] conv5_block1_3_conv (Conv2D) (None, 7, 7, 2048) 1050624 [conv5_block1_2_relu[0][0]] conv5_block1_0_bn (BatchNormal (None, 7, 7, 2048) 8192 [conv5_block1_0_conv[0][0]] ization) conv5_block1_3_bn (BatchNormal (None, 7, 7, 2048) 8192 [conv5_block1_3_conv[0][0]] ization) conv5_block1_add (Add) (None, 7, 7, 2048) 0 [conv5_block1_0_bn[0][0], conv5_block1_3_bn[0][0]] conv5_block1_out (Activation) (None, 7, 7, 2048) 0 [conv5_block1_add[0][0]] conv5_block2_1_conv (Conv2D) (None, 7, 7, 512) 1049088 [conv5_block1_out[0][0]] conv5_block2_1_bn (BatchNormal (None, 7, 7, 512) 2048 [conv5_block2_1_conv[0][0]] ization) conv5_block2_1_relu (Activatio (None, 7, 7, 512) 0 [conv5_block2_1_bn[0][0]] n) conv5_block2_2_conv (Conv2D) (None, 7, 7, 512) 2359808 [conv5_block2_1_relu[0][0]] conv5_block2_2_bn (BatchNormal (None, 7, 7, 512) 2048 [conv5_block2_2_conv[0][0]] ization) conv5_block2_2_relu (Activatio (None, 7, 7, 512) 0 [conv5_block2_2_bn[0][0]] n) conv5_block2_3_conv (Conv2D) (None, 7, 7, 2048) 1050624 [conv5_block2_2_relu[0][0]] conv5_block2_3_bn (BatchNormal (None, 7, 7, 2048) 8192 [conv5_block2_3_conv[0][0]] ization) conv5_block2_add (Add) (None, 7, 7, 2048) 0 [conv5_block1_out[0][0], conv5_block2_3_bn[0][0]] conv5_block2_out (Activation) (None, 7, 7, 2048) 0 [conv5_block2_add[0][0]] conv5_block3_1_conv (Conv2D) (None, 7, 7, 512) 1049088 [conv5_block2_out[0][0]] conv5_block3_1_bn (BatchNormal (None, 7, 7, 512) 2048 [conv5_block3_1_conv[0][0]] ization) conv5_block3_1_relu (Activatio (None, 7, 7, 512) 0 [conv5_block3_1_bn[0][0]] n) conv5_block3_2_conv (Conv2D) (None, 7, 7, 512) 2359808 [conv5_block3_1_relu[0][0]] conv5_block3_2_bn (BatchNormal (None, 7, 7, 512) 2048 [conv5_block3_2_conv[0][0]] ization) conv5_block3_2_relu (Activatio (None, 7, 7, 512) 0 [conv5_block3_2_bn[0][0]] n) conv5_block3_3_conv (Conv2D) (None, 7, 7, 2048) 1050624 [conv5_block3_2_relu[0][0]] conv5_block3_3_bn (BatchNormal (None, 7, 7, 2048) 8192 [conv5_block3_3_conv[0][0]] ization) conv5_block3_add (Add) (None, 7, 7, 2048) 0 [conv5_block2_out[0][0], conv5_block3_3_bn[0][0]] conv5_block3_out (Activation) (None, 7, 7, 2048) 0 [conv5_block3_add[0][0]] avg_pool (GlobalAveragePooling (None, 2048) 0 [conv5_block3_out[0][0]] 2D) predictions (Dense) (None, 1000) 2049000 [avg_pool[0][0]]
Total params: 25,636,712
Trainable params: 25,583,592
Non-trainable params: 53,120
__________________________________________________________________________________________________
Nonepreds model.predict(x)1/1 [] - 1s 854ms/stepprint(Predicted:, decode_predictions(preds, top5)[0])Predicted: [(n02108422, bull_mastiff, 0.3921146), (n02110958, pug, 0.2944119), (n02093754, Border_terrier, 0.14356579), (n02108915, French_bulldog, 0.057976846), (n02099712, Labrador_retriever, 0.052499186)]TensorFlow2.2基本应用
import tensorflow as tf
xtf.random.normal([2,16])
w1tf.Variable(tf.random.truncated_normal([16,8],stddev0.1))
b1tf.Variable(tf.zeros([8]))
o1tf.matmul(x,w1)b1
o1tf.nn.relu(o1)
o1tf.Tensor: id8263, shape(2, 8), dtypefloat32, numpy array([[0.16938789, 0. , 0.08883161, 0.14095941, 0.34751543, 0.353898 , 0. , 0.13356908], [0. , 0. , 0.48546872, 0.37623546, 0.5447475 , 0.21755993, 0.40121362, 0. ]], dtypefloat32)
from tensorflow.keras import layers
xtf.random.normal([4,16*16])
fclayers.Dense(5,activationtf.nn.relu)
h1fc(x)
h1tf.Tensor: id8296, shape(4, 5), dtypefloat32, numpy array([[0. , 0. , 0. , 0.14286758, 0. ], [0. , 2.2727172 , 0. , 0. , 0.34961763], [0.1311972 , 0. , 1.4005635 , 0. , 0. ], [0. , 1.7266206 , 0.64711714, 1.3494569 , 0. ]], dtypefloat32)
#获取权值矩阵w
fc.kerneltf.Variable ‘dense/kernel:0’ shape(256, 5) dtypefloat32, numpy array([[-0.0339304 , 0.02273461, -0.12746884, 0.14963049, 0.00773269], [-0.05978647, 0.07886668, -0.09110804, 0.14902723, 0.13007113], [ 0.10187459, 0.13089484, 0.14367685, 0.12212327, -0.06235344], …, [ 0.10417426, 0.05112691, 0.12206474, 0.01141772, -0.05271714], [ 0.03493455, -0.13473712, -0.01317982, -0.09485313, 0.04731715], [ 0.12421742, 0.00030141, -0.00211757, -0.04196439, -0.03638943]], dtypefloat32)
fc.biastf.Variable ‘dense/bias:0’ shape(5,) dtypefloat32, numpyarray([0., 0., 0., 0., 0.], dtypefloat32)
fc.trainable_variables[tf.Variable ‘dense/kernel:0’ shape(256, 5) dtypefloat32, numpy array([[-0.0339304 , 0.02273461, -0.12746884, 0.14963049, 0.00773269], [-0.05978647, 0.07886668, -0.09110804, 0.14902723, 0.13007113], [ 0.10187459, 0.13089484, 0.14367685, 0.12212327, -0.06235344], …, [ 0.10417426, 0.05112691, 0.12206474, 0.01141772, -0.05271714], [ 0.03493455, -0.13473712, -0.01317982, -0.09485313, 0.04731715], [ 0.12421742, 0.00030141, -0.00211757, -0.04196439, -0.03638943]], dtypefloat32), tf.Variable ‘dense/bias:0’ shape(5,) dtypefloat32, numpyarray([0., 0., 0., 0., 0.], dtypefloat32)]
fc.variables[tf.Variable ‘dense/kernel:0’ shape(256, 5) dtypefloat32, numpy array([[-0.0339304 , 0.02273461, -0.12746884, 0.14963049, 0.00773269], [-0.05978647, 0.07886668, -0.09110804, 0.14902723, 0.13007113], [ 0.10187459, 0.13089484, 0.14367685, 0.12212327, -0.06235344], …, [ 0.10417426, 0.05112691, 0.12206474, 0.01141772, -0.05271714], [ 0.03493455, -0.13473712, -0.01317982, -0.09485313, 0.04731715], [ 0.12421742, 0.00030141, -0.00211757, -0.04196439, -0.03638943]], dtypefloat32), tf.Variable ‘dense/bias:0’ shape(5,) dtypefloat32, numpyarray([0., 0., 0., 0., 0.], dtypefloat32)]
5. 使用深度学习进行手写数字识别
import tensorflow as tf#载入MNIST 数据集。
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#使用tf.keras.Sequential将模型的各层堆叠并设置参数
model tf.keras.models.Sequential([tf.keras.layers.Flatten(input_shape(28, 28)),tf.keras.layers.Dense(128, activationrelu),tf.keras.layers.Dropout(0.2),tf.keras.layers.Dense(10, activationsoftmax)
])
#设置模型的优化器和损失函数
model.compile(optimizeradam,losssparse_categorical_crossentropy,metrics[accuracy])
#训练并验证模型
model.fit(x_train, y_train, epochs5)
model.evaluate(x_test, y_test, verbose2)Train on 60000 samples
Epoch 1/5
60000/60000 [] - 6s 95us/sample - loss: 0.2931 - accuracy: 0.9146
Epoch 2/5
60000/60000 [] - 5s 77us/sample - loss: 0.1419 - accuracy: 0.9592
Epoch 3/5
60000/60000 [] - 5s 78us/sample - loss: 0.1065 - accuracy: 0.9683
Epoch 4/5
60000/60000 [] - 5s 78us/sample - loss: 0.0852 - accuracy: 0.9738
Epoch 5/5
60000/60000 [] - 6s 100us/sample - loss: 0.0735 - accuracy: 0.9769
10000/1 - 0s - loss: 0.0338 - accuracy: 0.9795
[0.0666636555833742, 0.9795]