TensorFlow的神经网络代码练过了,tensorboard的使用方法也学习了,那么接下来继续练习一些复杂点的神经网络代码示例吧。
1,依然全连接神经网络,minist手写数字识别
metrics=[‘accuracy’,‘mse’]中的指标可以自行添加
import datetime
import tensorflow as tf
from tensorflow.keras.layers import Dense, Flatten
from tensorflow.keras import Model
# 加载 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
# 构建模型
class MyModel(Model):
def __init__(self):
super(MyModel, self).__init__()
self.flatten = Flatten(input_shape=(28, 28))
self.dense1 = Dense(128, activation='relu')
self.dense2 = Dense(10)
def call(self, x):
x = self.flatten(x)
x = self.dense1(x)
return self.dense2(x)
model = MyModel()
# 设置损失函数、优化器和评估指标
model.compile(optimizer='adam',
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
metrics=['accuracy','mse'])
#定义回调函数
log_dir="logs/fit2/"+datetime.datetime.now().strftime("%Y%m%d-%H%M%S")
tensorboard_callback=tf.keras.callbacks.TensorBoard(log_dir=log_dir,histogram_freq=1)
# 训练模型
model.fit(x_train, y_train, epochs=5,validation_data=(x_test, y_test), callbacks=[tensorboard_callback])
# 评估模型
#model.evaluate(x_test, y_test)
2,使用卷积神经网络(Convolutional Neural Network, CNN)进行图像分类
import datetime
import tensorflow as tf
from tensorflow.keras.layers import Dense, Flatten
from tensorflow.keras import Model
# 加载 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
# 构建模型
class MyModel(Model):
def __init__(self):
super(MyModel, self).__init__()
self.flatten = Flatten(input_shape=(28, 28))
self.dense1 = Dense(128, activation='relu')
self.dense2 = Dense(10)
def call(self, x):
x = self.flatten(x)
x = self.dense1(x)
return self.dense2(x)
model = MyModel()
# 设置损失函数、优化器和评估指标
model.compile(optimizer='adam',
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
metrics=['accuracy','mse'])
#定义回调函数
log_dir="logs/fit2/"+datetime.datetime.now().strftime("%Y%m%d-%H%M%S")
tensorboard_callback=tf.keras.callbacks.TensorBoard(log_dir=log_dir,histogram_freq=1)
# 训练模型
model.fit(x_train, y_train, epochs=5,validation_data=(x_test, y_test), callbacks=[tensorboard_callback])
# 评估模型
#model.evaluate(x_test, y_test)
这是一个使用了卷积神经网络(Convolutional Neural Network)的模型,可以用于对图像进行分类。下面是每一层的解释:
tf.keras.layers.Conv2D(32, (3, 3), activation=‘relu’, input_shape=(32, 32, 3)):第一层卷积层,使用了 32 个 3x3 的卷积核,激活函数为 ReLU,输入形状为 32x32x3 的图像;
tf.keras.layers.MaxPooling2D((2, 2)):最大池化层,使用了 2x2 的窗口进行最大池化操作;
tf.keras.layers.Conv2D(64, (3, 3), activation=‘relu’):第二层卷积层,使用了 64 个 3x3 的卷积核,激活函数为 ReLU;
tf.keras.layers.MaxPooling2D((2, 2)):最大池化层,使用了 2x2 的窗口进行最大池化操作;
tf.keras.layers.Conv2D(64, (3, 3), activation=‘relu’):第三层卷积层,使用了 64 个 3x3 的卷积核,激活函数为 ReLU;
tf.keras.layers.Flatten():展平层,将前面的卷积层输出的多维张量展平为一维向量;
tf.keras.layers.Dense(64, activation=‘relu’):全连接层,使用 64 个神经元,激活函数为 ReLU;
tf.keras.layers.Dense(10):输出层,使用了 10 个神经元,没有激活函数,输出的结果是该图像被分为 10 个类别的概率分布。
3,使用神经网络对 IMDB 影评进行情感分析
import datetime
import tensorflow as tf
#加载imdb的数据
imdb=tf.keras.datasets.imdb
(x_train,y_train),(x_test,y_test)=imdb.load_data(num_words=10000)
#数据预处理
x_train=tf.keras.preprocessing.sequence.pad_sequences(x_train,value=0,padding='post',maxlen=256)
x_test=tf.keras.preprocessing.sequence.pad_sequences(x_test,value=0,padding='post',maxlen=256)
#构建神经网络模型
model=tf.keras.Sequential([tf.keras.layers.Embedding(10000,16),tf.keras.layers.GlobalMaxPooling1D(),tf.keras.layers.Dense(16,activation='relu'),tf.keras.layers.Dense(1,activation='sigmoid')])
#编译模型
model.compile(optimizer='adam',loss='binary_crossentropy',metrics=['accuracy','mse'])
#同样要用tensorboard的话,就要建回调函数
log_dir="logs/fit4/"+datetime.datetime.now().strftime("%Y%m%d-%H%M%S")
tensorboard_callback=tf.keras.callbacks.TensorBoard(log_dir=log_dir,histogram_freq=1)
#训练并验证模型
model.fit(x_train,y_train,epochs=8,validation_data=(x_test,y_test),callbacks=[tensorboard_callback])
这个模型是一个用于文本分类的神经网络,它包含四个层:
Embedding 层:将输入的整数序列编码为一个稠密向量表示,使得具有相似意义的词具有相似的向量表示。这个 Embedding 层有 10,000 个词的词汇表,每个词用 16 维的向量表示。
GlobalAveragePooling1D 层:将 Embedding 层的输出进行平均池化,将整个序列的特征提取为一个固定长度的向量,使得模型能够处理任意长度的输入。
Dense 层:这是一个全连接层,包含 16 个神经元,使用 ReLU 激活函数。
Dense 层:这是最后一层,只包含一个神经元,使用 sigmoid 激活函数,用于输出二分类概率值,表示输入的文本属于正面类别的概率。
总体来说,这个模型的输入是一个整数序列,输出是一个二分类概率值,通过嵌入层将输入转化为稠密向量表示,并使用池化层和全连接层进行特征提取和分类,具有良好的分类性能。
总之,需要多练习,才能真正的理解并记忆