新建一个输入层为28*28,有2个隐藏层,隐藏层神经元个数为300, 将其应用在MNIST数据集上,进行手写数字分类,其中使用Adam优化器、交叉熵损失函数,学习率设置为0.001,设置训练轮次为50次,每隔10个轮次,打印其损失函数
时间: 2025-01-01 14:40:16 浏览: 14
在Python中,你可以使用深度学习库如TensorFlow或PyTorch来实现这个模型。这里我会提供一个基于Keras的简单示例:
```python
import tensorflow as tf
from tensorflow.keras import layers
# 定义模型结构
model = tf.keras.Sequential([
layers.Flatten(input_shape=(28, 28)), # 输入层,将28x28图片展平成一维向量
layers.Dense(300, activation='relu'), # 隐藏层1,300个ReLU激活单元
layers.Dense(300, activation='relu'), # 隐藏层2,同样300个ReLU激活单元
layers.Dense(10, activation='softmax') # 输出层,10个节点表示0-9的手写数字类别,softmax用于多分类
])
# 设置优化器、损失函数和学习率
optimizer = tf.keras.optimizers.Adam(learning_rate=0.001)
loss_fn = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True)
# 编译模型
model.compile(optimizer=optimizer, loss=loss_fn, metrics=['accuracy'])
# 加载MNIST数据集
(x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0 # 归一化像素值到[0, 1]
# 训练过程
history = model.fit(x_train, y_train, epochs=50, validation_split=0.2,
callbacks=[tf.keras.callbacks.EveryNTimesteps(10, print_stats)], # 每10步打印一次损失
batch_size=32)
# 函数print_stats用于打印损失
def print_stats(epoch, logs=None):
loss_value = logs.get('loss')
if epoch % 10 == 0:
print(f"Epoch {epoch}: Loss: {loss_value}")
```
在这个例子中,`EveryNTimesteps`回调会在每个10个训练步骤后(即每轮10次迭代)打印训练损失。
阅读全文