赞
踩
学习记录
multilayer perceptron(多层感知机器)。常用于处理简单逻辑数学问题。
Convolutional neural network(卷积神经网络)。适用于视频和图片的处理工作
recurrent neural network(递归神经网络)。常用于预测数据。
在RNN中,还有SimpleRNN,RNN等的神经元模型结构。如下图所示
以手写数据集图片为例子,分别展示三种类型的网络结构
对于MNIST的一张输入为例子,三种模型对应的输入格式如下
具体模型架构
RNN与前两个输入大不同,实际的input_shape = (timesteps,input_dim)或者是时间步长的输入多维向量序列。
import numpy as np from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense,Activation,Dropout from tensorflow.keras.utils import to_categorical,plot_model from tensorflow.keras.datasets import mnist # 加载数据集 (x_train,y_train),(x_test,y_test)=mnist.load_data() # 计算类别数量 num_labels = len(np.unique(y_train)) # 转换为独热编码 y_train = to_categorical(y_train) y_test = to_categorical(y_test) # 图片维度 image_size = x_train.shape[1] input_size = image_size * image_size # 转换大小和归一化 x_train = np.reshape(x_train,[-1,input_size]) x_train = x_train.astype("float32")/255 x_test = np.reshape(x_test,[-1,input_size]) x_test = x_test.astype("float32")/255 # 模型参数 batch_size = 128 hidden_units = 256 dropout = 0.45 # 模型时三层感知机,每层是relu激活函数和dropout model = Sequential() '''输入层''' model.add(Dense(256,input_dim = input_size)) model.add(Activation('relu')) model.add(Dropout(dropout)) '''隐藏层''' model.add(Dense(hidden_units)) model.add(Activation('relu')) model.add(Dropout(dropout)) '''输出层''' model.add(Dense(num_labels)) # for 独热编码的输出 model.add(Activation("softmax")) model.summary() plot_model(model,show_shapes=True) # 编译模型 model.compile(loss='categorical_crossentropy',optimizer='adam',metrics=['accuracy']) # 训练模型 model.fit(x_train,y_train,epochs=20,batch_size=batch_size) # 验证模型 _,acc = model.evaluate(x_test,y_test,batch_size=batch_size,verbose=0) print("\nTest accuracy: %.1f%%" % (100.0 * acc))
import numpy as np from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Activation,Dense,Dropout from tensorflow.keras.layers import Conv2D,MaxPooling2D,Flatten from tensorflow.keras.utils import to_categorical,plot_model from tensorflow.keras.datasets import mnist # 加载数据集 (x_train,y_train),(x_test,y_test)=mnist.load_data() # 计算类别 num_labels = len(np.unique(y_train)) # 转换为独热编码 y_train = to_categorical(y_train) y_test = to_categorical(y_test) # 输入图片维度 image_size = x_train.shape[1] # 更改图片尺寸和归一化 x_train = np.reshape(x_train,[-1,image_size,image_size,1]) x_test = np.reshape(x_test,[-1, image_size, image_size, 1]) x_train = x_train.astype('float32') / 255 x_test = x_test.astype('float32') / 255 # 网络参数 input_shape = (image_size,image_size,1) batch_size = 128 kernel_size= 3 pool_size = 2 filters = 64 dropout = 0.2 # 构建模型 model = Sequential() model.add(Conv2D( filters=filters, kernel_size=kernel_size, activation='relu', input_shape=input_shape)) model.add(MaxPooling2D(pool_size)) model.add(Conv2D( filters=filters, kernel_size=kernel_size, activation='relu')) model.add(MaxPooling2D(pool_size)) model.add(Conv2D( filters=filters, kernel_size=kernel_size, activation='relu')) model.add(Flatten()) model.add(Dropout(dropout)) model.add(Dense(num_labels)) model.add(Activation('softmax')) model.summary() plot_model(model, to_file='cnn-mnist.png', show_shapes=True) model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) model.fit(x_train,y_train,epochs=10,batch_size=batch_size) _,acc = model.evaluate(x_test,y_test,batch_size=batch_size,verbose=0) print("\nTest accuracy: %.1f%%" % (100.0 * acc))
import numpy as np from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Activation,Dense,Dropout,SimpleRNN from tensorflow.keras.layers import Conv2D,MaxPooling2D,Flatten from tensorflow.keras.utils import to_categorical,plot_model from tensorflow.keras.datasets import mnist # 加载数据集 (x_train,y_train),(x_test,y_test)=mnist.load_data() # 计算类别 num_labels = len(np.unique(y_train)) # 转换为独热编码 y_train = to_categorical(y_train) y_test = to_categorical(y_test) # 输入图片维度 image_size = x_train.shape[1] # 更改图片尺寸和归一化 x_train = np.reshape(x_train,[-1,image_size,image_size,1]) x_test = np.reshape(x_test,[-1, image_size, image_size, 1]) x_train = x_train.astype('float32') / 255 x_test = x_test.astype('float32') / 255 # 网络参数 input_shape = (image_size, image_size) batch_size = 128 units = 256 dropout = 0.2 # 构建模型 model = Sequential() model.add(SimpleRNN(units=units,dropout=dropout,input_shape=input_shape)) model.add(Dense(num_labels)) model.add(Activation("softmax")) model.summary() plot_model(model, to_file='rnn-mnist.png', show_shapes=True) model.compile(loss='categorical_crossentropy',optimizer='adam',metrics=['accuracy']) model.fit(x_train,y_train,epochs=20,batch_size=batch_size) _,acc = model.evaluate(x_test,y_test,batch_size=batch_size,verbose=0) print("\nTest accuracy: %.1f%%" % (100.0 * acc))
《Advanced Deep Learning with TensorFlow 2 and Keras》
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。