浅谈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实现模拟按键,自动翻页看u17漫画
Mar 17 Python
Python md5与sha1加密算法用法分析
Jul 14 Python
Python3使用PyQt5制作简单的画板/手写板实例
Oct 19 Python
Python tkinter事件高级用法实例
Jan 31 Python
python 实现在txt指定行追加文本的方法
Apr 29 Python
Python版名片管理系统
Nov 30 Python
python程序快速缩进多行代码方法总结
Jun 23 Python
python用WxPython库实现无边框窗体和透明窗体实现方法详解
Feb 21 Python
python 线性回归分析模型检验标准--拟合优度详解
Feb 24 Python
基于python实现破解滑动验证码过程解析
May 28 Python
python 统计代码耗时的几种方法分享
Apr 02 Python
pytorch实现ResNet结构的实例代码
May 17 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
德生S2000电路分析
2021/03/02 无线电
JavaScript 事件属性绑定带参数的函数
2009/03/13 Javascript
jQuery学习笔记之jQuery的事件
2010/12/22 Javascript
JavaScript1.6数组新特性介绍以及JQuery的几个工具方法
2013/12/06 Javascript
jquery获取html元素的绝对位置和相对位置的方法
2014/06/20 Javascript
JQuery控制radio选中和不选中方法总结
2015/04/15 Javascript
浅析JS动态创建元素【两种方法】
2016/04/20 Javascript
Bootstrap基本组件学习笔记之下拉菜单(7)
2016/12/07 Javascript
angularJS深拷贝详解
2017/03/23 Javascript
JavaScript字符串_动力节点Java学院整理
2017/06/27 Javascript
浅谈vue的iview列表table render函数设置DOM属性值的方法
2017/09/30 Javascript
vue中eslintrc.js配置最详细介绍
2018/12/21 Javascript
关于vue路由缓存清除在main.js中的设置
2019/11/06 Javascript
JS+html5实现异步上传图片显示上传文件进度条功能示例
2019/11/09 Javascript
[02:37]TI8勇士令状不朽珍藏II视频展示
2018/06/23 DOTA
python中sleep函数用法实例分析
2015/04/29 Python
python字典多键值及重复键值的使用方法(详解)
2016/10/31 Python
让Python更加充分的使用Sqlite3
2017/12/11 Python
Python使用Dijkstra算法实现求解图中最短路径距离问题详解
2018/05/16 Python
python变量赋值方法(可变与不可变)
2019/01/12 Python
用Python配平化学方程式的方法
2019/07/20 Python
python selenium操作cookie的实现
2020/03/18 Python
Python实现捕获异常发生的文件和具体行数
2020/04/25 Python
Python在后台自动解压各种压缩文件的实现方法
2020/11/10 Python
python 实现客户端与服务端的通信
2020/12/23 Python
详解css3使用transform出现字体模糊的解决办法
2020/10/16 HTML / CSS
英国儿童家具专卖店:GLTC
2016/09/24 全球购物
什么是"引用"?申明和使用"引用"要注意哪些问题?
2016/03/03 面试题
焊接专业毕业生求职信
2013/10/01 职场文书
大专学生推荐信范文
2013/11/19 职场文书
心理学专业毕业生推荐信范文
2013/11/21 职场文书
电子商务专业应届生求职信
2014/05/28 职场文书
工伤死亡理赔协议书
2014/10/20 职场文书
承诺保证书格式
2015/02/28 职场文书
小学六一主持词开场白
2015/05/28 职场文书
numpy array找出符合条件的数并赋值的示例代码
2022/06/01 Python