您好,登錄后才能下訂單哦!
不懂keras中loss與val_loss的關系是什么??其實想解決這個問題也不難,下面讓小編帶著大家一起學習怎么去解決,希望大家閱讀完這篇文章后大所收獲。
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的關系是什么?內容對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,遇到問題就找億速云,詳細的解決方法等著你來學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。