郑州网站建设代理,做建筑效果图最好的网站,网站加在线qq,电子商务网站建设与电子支付要学习深度强化学习#xff0c;就要学会使用神经网络#xff0c;建立神经网络可以使用TensorFlow和pytorch#xff0c;今天先学习以TensorFlow建立网络。 直接上代码
import tensorflow as tf# 定义神经网络模型
model tf.keras.models.Sequential([tf.keras.layers.Dense…要学习深度强化学习就要学会使用神经网络建立神经网络可以使用TensorFlow和pytorch今天先学习以TensorFlow建立网络。 直接上代码
import tensorflow as tf# 定义神经网络模型
model tf.keras.models.Sequential([tf.keras.layers.Dense(128, activationrelu, input_shape(784,)),tf.keras.layers.Dropout(0.2),tf.keras.layers.Dense(10)
])# 编译模型
model.compile(optimizeradam,losstf.keras.losses.SparseCategoricalCrossentropy(from_logitsTrue),metrics[accuracy])# 加载数据集
(x_train, y_train), (x_test, y_test) tf.keras.datasets.mnist.load_data()
x_train x_train.reshape(60000, 784).astype(float32) / 255
x_test x_test.reshape(10000, 784).astype(float32) / 255# 训练模型
model.fit(x_train, y_train, epochs5)# 评估模型
model.evaluate(x_test, y_test)
然后解释一下代码里的具体步骤
定义神经网络模型 当使用 tf.keras.models.Sequential 创建神经网络时可以按顺序添加多个层每个层都会顺序连接在一起构成整个神经网络模型。在这个例子中我们添加了两个全连接层(Dense层)和一个Dropout层。这个模型的结构如下所示
输入层由 tf.keras.layers.Dense(128, activation‘relu’, input_shape(784,)) 创建包含128个神经元。输入数据的形状是 (None, 784)其中 None 表示任意的批次大小。激活函数为 ReLU。 Dropout层由 tf.keras.layers.Dropout(0.2) 创建其作用是随机断开一定比例的输入神经元以防止过拟合。 输出层由 tf.keras.layers.Dense(10) 创建包含10个神经元对应于10个分类。激活函数为空因为我们将使用 logits 值来进行计算而不是经过 softmax 转换后的概率。 因为我们没有指定激活函数的名称所以默认情况下 Dense 层使用线性激活函数。由于我们需要 logits 值来计算交叉熵损失函数因此输出层没有指定激活函数。
总的来说这个模型是一个具有 1 个输入层1 个输出层和 1 个 Dropout 层的简单全连接神经网络。
编译模型
在 TensorFlow 中使用 compile() 方法来配置模型的训练过程其中包括选择优化器、损失函数和评估指标等。
optimizer‘adam’指定使用 Adam 优化器进行模型训练。Adam 是一种常用的自适应学习率优化算法可以更快地收敛和更好地处理不同的学习率。 losstf.keras.losses.SparseCategoricalCrossentropy(from_logitsTrue)指定使用交叉熵损失函数来计算模型在训练期间的误差。在这里我们使用的是 SparseCategoricalCrossentropy它适用于多分类问题且标签为整数编码的情况。由于输出层没有使用 softmax 激活函数所以设置参数 from_logitsTrue表示我们将使用 logits 值来计算交叉熵损失函数。 metrics[‘accuracy’]指定使用准确率作为模型的评估指标以在训练期间监视模型的性能。我们可以指定多个评估指标例如 metrics[‘accuracy’, ‘mse’]以同时监视模型的准确率和均方误差。 这些配置将应用于后续的模型训练中。
然后直接从Keras这个高级API加载数据集这里讲一下x_train和x_test
x_train x_train.reshape(60000, 784).astype(float32) / 255
x_test x_test.reshape(10000, 784).astype(float32) / 255这两行代码是将输入的训练数据 x_train 和测试数据 x_test 进行预处理使它们具有相同的数据形状和数据类型并进行了归一化处理。
x_train.reshape(60000, 784)将训练数据的形状从原来的 (60000, 28, 28) 重塑为 (60000, 784)其中 784 表示每个图像的像素数量也就是将每个图像转换为一个长度为 784 的一维数组。 .astype(‘float32’)将数据类型转换为浮点型因为在后续的归一化处理中需要进行除法操作。 / 255将像素值的范围从原来的 0 到 255 之间的整数转换为 0 到 1 之间的浮点数。这是一种常见的归一化方法它可以使得输入数据的数值范围更加稳定更容易被神经网络学习。 这样处理后训练数据 x_train 和测试数据 x_test 都变成了形状为 (60000, 784) 和 (10000, 784) 的浮点数数组。这样的数据可以作为神经网络的输入并可以更好地被模型学习。60000和10000分别表示训练和测试的数据量。
最后训练模型
model.fit(x_train, y_train, epochs5) 是用来训练模型的代码。它将训练数据集 x_train 和训练标签 y_train 作为输入并对模型进行多轮5 轮的训练。
具体来说fit() 方法将对模型进行以下操作
按照指定的轮数即 epochs5对整个数据集进行多次迭代训练。 在每一轮训练中将数据集划分为多个小批量数据每个小批量包含一定数量的样本默认情况下是 32 个样本。 使用优化器在 model.compile() 中指定对模型进行优化即更新模型的权重和偏置以最小化损失函数。 计算在每个小批量数据上的损失值和评估指标值并在屏幕上输出模型的训练进度信息。 在每一轮训练结束后使用测试数据集进行模型评估在 model.evaluate() 中指定。 通过反复迭代训练模型的权重和偏置将不断被更新以使得模型能够更好地适应数据集并获得更好的性能。
评估模型model.evaluate(x_test, y_test)