tf2自定义损失函数测试

main.py

import tensorflow as tf
from custom_loss import focal_loss


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


model = tf.keras.models.Sequential([
  tf.keras.layers.Flatten(input_shape=(28, 28)),
  tf.keras.layers.Dense(128, activation='relu'),
  tf.keras.layers.Dropout(0.2),
  tf.keras.layers.Dense(10, activation='softmax')
])

model.compile(optimizer='adam',
              loss=focal_loss(), # 自定义损失函数
              metrics=['accuracy'])

model.fit(x_train, y_train, epochs=5)
print()
model.evaluate(x_test,  y_test, verbose=2)

custom_loss

from tensorflow.keras.losses import Loss
from tensorflow.keras.losses import binary_crossentropy
import tensorflow as tf


class focal_loss(Loss):
    def __init__(self, alpha=0.25, gamma=2,**kwargs):
        super(focal_loss,self).__init__(**kwargs)
        self.gamma = gamma
        self.alpha = alpha
    
    def call(self,y_true,y_pred):
        # y_true转成和y_pred一样的shape
        y_true = tf.squeeze(tf.one_hot(y_true,depth=10))
        BCE = binary_crossentropy(y_true,y_pred)
        pt = tf.math.exp(-BCE)

        F_loss = self.alpha * (1-pt)**self.gamma * BCE
        loss = tf.reduce_mean(F_loss)
        return loss


class MeanSquaredError(tf.keras.losses.Loss):
    def call(self, y_true, y_pred):
        return tf.reduce_mean(tf.square(y_pred - y_true))


Epoch 1/5
1875/1875 [==============================] - 4s 2ms/step - loss: 0.0011 - accuracy: 0.8727
Epoch 2/5
1875/1875 [==============================] - 3s 2ms/step - loss: 3.9561e-04 - accuracy: 0.9392  
Epoch 3/5
1875/1875 [==============================] - 3s 2ms/step - loss: 2.8197e-04 - accuracy: 0.9538  
Epoch 4/5
1875/1875 [==============================] - 3s 2ms/step - loss: 2.2211e-04 - accuracy: 0.9626  
Epoch 5/5
1875/1875 [==============================] - 3s 2ms/step - loss: 1.8357e-04 - accuracy: 0.9680  

313/313 - 0s - loss: 1.8853e-04 - accuracy: 0.9706 - 414ms/epoch - 1ms/step

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用 TensorFlow 2.x 训练自定义的卷积神经网络 (CNN),可以按照以下步骤进行操作: 1.准备数据:准备训练所需的图像数据集,并将其分为训练集和测试集。需要将图像数据转换为 TensorFlow 可以处理的张量。 2.定义模型:使用 Keras 的 Sequential API 或 Functional API 定义 CNN 模型。可以添加卷积层、池化层、批量归一化层、激活函数、全连接层等层。 3.编译模型:使用 model.compile() 方法来编译模型,并指定损失函数、优化器和评估指标。 4.训练模型:使用 model.fit() 方法来训练模型。可以指定训练集、测试集、批量大小、训练轮数等参数。 5.评估模型:使用 model.evaluate() 方法来评估模型在测试集上的性能。 6.使用模型进行预测:使用 model.predict() 方法来使用训练好的模型进行预测。 以下是一个简单的 CNN 模型的代码示例: ``` import tensorflow as tf from tensorflow.keras import layers # 定义模型 model = tf.keras.Sequential([ layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)), layers.MaxPooling2D((2, 2)), layers.Conv2D(64, (3, 3), activation='relu'), layers.MaxPooling2D((2, 2)), layers.Conv2D(64, (3, 3), activation='relu'), layers.Flatten(), layers.Dense(64, activation='relu'), layers.Dense(10) ]) # 编译模型 model.compile(optimizer='adam', loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True), metrics=['accuracy']) # 训练模型 history = model.fit(train_images, train_labels, epochs=10, validation_data=(test_images, test_labels)) # 评估模型 test_loss, test_acc = model.evaluate(test_images, test_labels, verbose=2) # 使用模型进行预测 predictions = model.predict(test_images) ``` 在这个简单的 CNN 模型中,使用了三个卷积层、三个最大池化层、一个全连接层和一个输出层。在编译模型时,使用了 Adam 优化器、交叉熵损失函数和准确率评估指标。在训练模型时,使用了训练集和测试集,并指定了训练轮数。最后,使用模型进行预测,得到了测试集上的预测结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值