浅谈keras中loss与val_loss的关系


Posted in Python onJune 22, 2020

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向量,直接使用整形标签即可

以上这篇浅谈keras中loss与val_loss的关系就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现删除文件与目录的方法
Nov 10 Python
python清除字符串里非数字字符的方法
Jul 02 Python
在Django的通用视图中处理Context的方法
Jul 21 Python
python常用函数详解
Sep 13 Python
Python+Wordpress制作小说站
Apr 14 Python
python 函数传参之传值还是传引用的分析
Sep 07 Python
python将文本分每两行一组并保存到文件
Mar 19 Python
Python实现的端口扫描功能示例
Apr 08 Python
python numpy和list查询其中某个数的个数及定位方法
Jun 27 Python
Python 类方法和实例方法(@classmethod),静态方法(@staticmethod)原理与用法分析
Sep 20 Python
通俗易懂了解Python装饰器原理
Sep 17 Python
利用Python实现翻译HTML中的文本字符串
Jun 21 Python
python实现简易版学生成绩管理系统
Jun 22 #Python
python能否java成为主流语言吗
Jun 22 #Python
python让函数不返回结果的方法
Jun 22 #Python
python实现学生成绩测评系统
Jun 22 #Python
python算的上脚本语言吗
Jun 22 #Python
Python读取二进制文件代码方法解析
Jun 22 #Python
怎么快速自学python
Jun 22 #Python
You might like
PHP实现异步调用方法研究与分享
2011/10/27 PHP
浅谈php(codeigniter)安全性注意事项
2017/04/06 PHP
ecshop添加菜单及权限分配问题
2017/11/21 PHP
php-fpm超时时间设置request_terminate_timeout资源问题分析
2019/09/27 PHP
jquery学习笔记二 实现可编辑的表格
2010/04/09 Javascript
基于jquery的finkyUI插件与Ajax实现页面数据加载功能
2010/12/03 Javascript
JS的replace方法介绍
2012/10/20 Javascript
javascript模拟地球旋转效果代码实例
2013/12/02 Javascript
JavaScript新窗口与子窗口传值详解
2014/02/11 Javascript
JavaScript基本的输出和嵌入式写法教程
2015/10/20 Javascript
mvc中form表单提交的三种方式(推荐)
2016/08/10 Javascript
基于js实现二级下拉联动
2016/12/17 Javascript
vue2实现移动端上传、预览、压缩图片解决拍照旋转问题
2017/04/13 Javascript
VUE element-ui 写个复用Table组件的示例代码
2017/11/18 Javascript
vue购物车插件编写代码
2017/11/27 Javascript
python支持断点续传的多线程下载示例
2014/01/16 Python
python使用socket进行简单网络连接的方法
2015/04/29 Python
python下调用pytesseract识别某网站验证码的实现方法
2016/06/06 Python
python实现内存监控系统
2021/03/07 Python
python自动发微信监控报警
2019/09/06 Python
Python中的 ansible 动态Inventory 脚本
2020/01/19 Python
如何在VSCode下使用Jupyter的教程详解
2020/07/13 Python
python实现银行账户系统
2021/02/22 Python
python 指定源路径来解决import问题的操作
2021/03/04 Python
巴西家用小家电购物网站:Polishop
2016/08/07 全球购物
英国高级百货公司:Harvey Nichols
2017/01/29 全球购物
香港唯港荟酒店预订:Hotel ICON
2018/03/27 全球购物
荷兰的时尚市场:To Be Dressed
2019/05/06 全球购物
区域销售经理职责
2013/12/22 职场文书
出生医学证明样本
2014/01/17 职场文书
火锅店创业计划书范文
2014/02/02 职场文书
优秀教师单行材料
2014/12/16 职场文书
初婚初育证明范本
2015/06/18 职场文书
初中物理教学反思
2016/02/19 职场文书
在校大学生才艺比赛策划书怎么写?
2019/08/26 职场文书
PHP基本语法
2021/03/31 PHP