浅谈keras中loss与val_loss的关系

作者:lgy_keira 时间:2021-12-12 08:41:22 

loss函数如何接受输入值

keras封装的比较厉害,官网给的例子写的云里雾里,

在stackoverflow找到了答案

You can wrap the loss function as a inner function and pass your input tensor to it (as commonly done when passing additional arguments to the loss function).


def custom_loss_wrapper(input_tensor):
def custom_loss(y_true, y_pred):
 return K.binary_crossentropy(y_true, y_pred) + K.mean(input_tensor)
return custom_loss

input_tensor = Input(shape=(10,))
hidden = Dense(100, activation='relu')(input_tensor)
out = Dense(1, activation='sigmoid')(hidden)
model = Model(input_tensor, out)
model.compile(loss=custom_loss_wrapper(input_tensor), optimizer='adam')

You can verify that input_tensor and the loss value will change as different X is passed to the model.


X = np.random.rand(1000, 10)
y = np.random.randint(2, size=1000)
model.test_on_batch(X, y) # => 1.1974642

X *= 1000
model.test_on_batch(X, y) # => 511.15466

fit_generator

fit_generator ultimately calls train_on_batch which allows for x to be a dictionary.

Also, it could be a list, in which casex is expected to map 1:1 to the inputs defined in Model(input=[in1, …], …)


### generator
yield [inputX_1,inputX_2],y
### model
model = Model(inputs=[inputX_1,inputX_2],outputs=...)

补充知识:学习keras时对loss函数不同的选择,则model.fit里的outputs可以是one_hot向量,也可以是整形标签

我就废话不多说了,大家还是直接看代码吧~


from __future__ import absolute_import, division, print_function, unicode_literals
import tensorflow as tf
from tensorflow import keras
import numpy as np
import matplotlib.pyplot as plt

print(tf.__version__)
fashion_mnist = keras.datasets.fashion_mnist

(train_images, train_labels), (test_images, test_labels) = fashion_mnist.load_data()
class_names = ['T-shirt/top', 'Trouser', 'Pullover', 'Dress', 'Coat',
   'Sandal', 'Shirt', 'Sneaker', 'Bag', 'Ankle boot']
# plt.figure()
# plt.imshow(train_images[0])
# plt.colorbar()
# plt.grid(False)
# plt.show()

train_images = train_images / 255.0
test_images = test_images / 255.0

# plt.figure(figsize=(10,10))
# for i in range(25):
#  plt.subplot(5,5,i+1)
#  plt.xticks([])
#  plt.yticks([])
#  plt.grid(False)
#  plt.imshow(train_images[i], cmap=plt.cm.binary)
#  plt.xlabel(class_names[train_labels[i]])
# plt.show()

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

model.compile(optimizer='adam',
   loss='categorical_crossentropy',
   #loss = 'sparse_categorical_crossentropy' 则之后的label不需要变成one_hot向量,直接使用整形标签即可
   metrics=['accuracy'])
one_hot_train_labels = keras.utils.to_categorical(train_labels, num_classes=10)

model.fit(train_images, one_hot_train_labels, epochs=10)

one_hot_test_labels = keras.utils.to_categorical(test_labels, num_classes=10)
test_loss, test_acc = model.evaluate(test_images, one_hot_test_labels)

print('\nTest accuracy:', test_acc)

# predictions = model.predict(test_images)
# predictions[0]
# np.argmax(predictions[0])
# test_labels[0]

loss若为loss=‘categorical_crossentropy', 则fit中的第二个输出必须是一个one_hot类型,

而若loss为loss = ‘sparse_categorical_crossentropy' 则之后的label不需要变成one_hot向量,直接使用整形标签即可

来源:https://blog.csdn.net/u013608336/article/details/82559469

标签:keras,loss,val,loss
0
投稿

猜你喜欢

  • python中关于时间和日期函数的常用计算总结(time和datatime)

    2022-01-02 05:50:08
  • keras模型保存为tensorflow的二进制模型方式

    2022-12-21 07:20:08
  • php调用快递鸟接口实例代码

    2023-11-17 13:48:49
  • asp如何获知并显示文件的大小?

    2009-11-23 20:59:00
  • python numpy实现多次循环读取文件 等间隔过滤数据示例

    2022-10-30 09:44:13
  • UCDChina.com 关于用户期望的讨论

    2008-07-10 11:55:00
  • SQLserver 2000中出现“指定的服务并未以已安装的服务存在 解决方案

    2011-04-27 14:33:00
  • python获取多线程及子线程的返回值

    2022-01-17 20:44:07
  • python数据类型_元组、字典常用操作方法(介绍)

    2021-06-22 14:06:05
  • Array.prototype.slice

    2010-05-07 12:43:00
  • Python OpenCV超详细讲解透视变换的实现

    2021-08-02 21:19:48
  • 自定义数据库自动编号初始值和步进值

    2009-05-19 10:00:00
  • OpenAI的Whisper模型进行语音识别使用详解

    2022-02-24 23:50:51
  • php 文件缓存函数

    2023-11-06 15:28:47
  • Django之创建引擎索引报错及解决详解

    2023-06-11 10:55:15
  • 电子商务搜索LIST页面用户体验设计

    2010-08-03 12:57:00
  • FrontPage2002简明教程四:网页超级链接

    2008-09-17 11:23:00
  • SaaS中的用户体验设计

    2009-05-20 12:28:00
  • Python关于__name__属性的含义和作用详解

    2021-10-28 09:29:51
  • Python简单获取自身外网IP的方法

    2023-12-26 03:44:31
  • asp之家 网络编程 m.aspxhome.com