#python #python-3.x #loss-function #autoencoder
Вопрос:
Я хочу использовать свою собственную функцию потерь для обучения кодировщика, и я получаю это. :
Epoch 1/10
38/38 [==============================] - 1s 17ms/step - loss: nan - val_loss: nan
Epoch 2/10
38/38 [==============================] - 1s 14ms/step - loss: nan - val_loss: nan
Epoch 3/10
38/38 [==============================] - 1s 14ms/step - loss: nan - val_loss: nan
Epoch 4/10
38/38 [==============================] - 1s 14ms/step - loss: nan - val_loss: nan
Epoch 5/10
38/38 [==============================] - 1s 14ms/step - loss: nan - val_loss: nan
Epoch 6/10
38/38 [==============================] - 1s 14ms/step - loss: nan - val_loss: nan
Epoch 7/10
38/38 [==============================] - 1s 13ms/step - loss: nan - val_loss: nan
Epoch 8/10
38/38 [==============================] - 1s 14ms/step - loss: nan - val_loss: nan
Epoch 9/10
38/38 [==============================] - 1s 14ms/step - loss: nan - val_loss: nan
Epoch 10/10
38/38 [==============================] - 1s 15ms/step - loss: nan - val_loss: nan
Я пытаюсь создать новую функцию потерь и использовать ее. сначала нам нужно рассчитать SC, а затем SP, и после этого наша функция потерь будет SC/SP.
import h5py
import numpy as np
from keras.layers import Input, Dense
from keras.models import Model
import pickle
from scipy.spatial import distance
import tensorflow as tf
from tensorflow.keras import backend as K
with open('/content/drive/MyDrive/H5555/Visual_Feature_for_Select_Objects.pkl', 'rb') as f:
pklfile = pickle.load(f)
Data = np.asarray(pklfile['Select_Objects_feature'],dtype=float)
Label = np.asarray(pklfile['Corresponding_Select_Objects_class'],dtype=float)
Data = Data /Data.max()
train_dataset = tf.data.Dataset.from_tensor_slices((Data, Label))
BATCH_SIZE = 64
SHUFFLE_BUFFER_SIZE = 100
train_dataset = train_dataset.shuffle(SHUFFLE_BUFFER_SIZE).batch(BATCH_SIZE)
countOfLabel = np.zeros(10,dtype=int) #count of each lable
NumberOfClass = Label.max() - Label.min() 1; #number or class
NumberOfClass=NumberOfClass.astype(np.int64) #convert numpyfloat.64 to int64
sizeData = np.shape(Data)#(2378, 2048)
average = np.zeros((10,2048),dtype=float)
countOfLabel = np.zeros(10,dtype=int) #count of each lable
NumberOfClass = Label.max() - Label.min() 1; #number or class
NumberOfClass=NumberOfClass.astype(np.int64) #convert numpyfloat.64 to int64
sizeData = np.shape(Data)#(2378, 2048)
average = np.zeros((10,2048),dtype=float)
c = cOfl(Label, Data)
a = avg(Label, Data, countOfLabel)
scc = sc(Label,Data)
spp = sp(Label, Data)
def lossFun(scc,spp):
loss = scc / spp
return loss
import matplotlib.pyplot as plt
INPUT_SIZE = 2048
ENCODING_SIZE = 50
input_img = Input(shape=(INPUT_SIZE,))
encoded = Dense(ENCODING_SIZE, activation='relu')(input_img)
decoded = Dense(INPUT_SIZE, activation='relu')(encoded)
autoencoder = Model(input_img, decoded)
autoencoder.compile(optimizer='adam', loss=lossFun)
autoencoder.fit(train_dataset, epochs=10, validation_data=train_dataset)
decoded_imgs = autoencoder.predict(Data)
Tnx за вашу помощь.
после этого я хочу создать новую функцию потерь, которая является результатом добавления моей собственной функции потерь в функцию потерь перед сборкой «mean_squared_error».