【tensorflow2.0】实例3

import tensorflow as tf

class myCallback(tf.keras.callbacks.Callback):
  def on_epoch_end(self, epoch, logs={}):
    if(logs.get('loss')<0.4):
      print("\nLoss is low so cancelling training!")
      self.model.stop_training = True

这是让python回调的代码。它被实现为一个单独的类,但可以和其他代码串联起来,它不需要在一个单独的文件中。
在这里,定义on_epoch_end()函数,在迭代结束后,调用回调。它也发送一个包含很多关于训练当前状态的信息—日志对象,也就是
if(logs.get(‘loss’)<0.4):
self.model.stop_training = True
当前损失率loss在日志中可用,所以我们可以查询一定数量。在这里,loss低于0.4就取消训练。

现在有了回调函数,

callbacks = myCallback()#实例化刚刚创建的类,回调类本身
mnist = tf.keras.datasets.fashion_mnist
(training_images, training_labels),(test_images, test_labels) = mnist.load_data()
training_images = training_images / 255.0
test_images = test_images / 255.0
model = tf.keras.models.Sequential([
  tf.keras.layers.Flatten(),
  tf.keras.layers.Dense(512, activation=tf.nn.relu),
  tf.keras.layers.Dense(10, activation=tf.nn.softmax)
])
model.compile(optimizer='adam',loss='sparse_categorical_crossentropy')
model.fit(training_images, training_labels, epochs=5, callbacks = [callbacks])#最后一个参数是使用回调参数作为训练循环的一部分,并传递它的类实例

nodel.fit()函数是让其训练的。
运行之后,发现:我们设置了5个周期并且在两个训练周期后就结束了训练,因为损失已经低于0.4了。

以下是一个简单的 TensorFlow 2.0 代码示例,用于训练一个简单的神经网络来分类 MNIST 数据集中的手写数字: ```python import tensorflow as tf from tensorflow import keras # 加载 MNIST 数据集 mnist = keras.datasets.mnist (train_images, train_labels), (test_images, test_labels) = mnist.load_data() # 将像素值缩放到 0-1 之间 train_images = train_images / 255.0 test_images = test_images / 255.0 # 定义神经网络模型 model = keras.Sequential([ keras.layers.Flatten(input_shape=(28, 28)), keras.layers.Dense(128, activation=&#39;relu&#39;), keras.layers.Dense(10) ]) # 编译模型,指定损失函数、优化器和评估指标 model.compile(optimizer=&#39;adam&#39;, loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True), metrics=[&#39;accuracy&#39;]) # 训练模型 model.fit(train_images, train_labels, epochs=10) # 评估模型 test_loss, test_acc = model.evaluate(test_images, test_labels, verbose=2) print(&#39;\nTest accuracy:&#39;, test_acc) ``` 这个模型包含一个输入层、一个隐藏层和一个输出层。输入层是一个 28x28 的图像,通过 `Flatten` 层展开成一个 784 维的向量。隐藏层包含 128 个神经元,使用 ReLU 激活函数。输出层有 10 个神经元,对应于 0-9 的十个数字。模型使用 Adam 优化器和交叉熵损失函数进行训练。在训练过程中,模型将数据集中的每个样本看作一个独立的训练样本,将数据集迭代多次,每次更新模型的参数。最后,我们评估模型的准确性,使用测试集中的图像和标签来评估模型的性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值