自编码器损失:nan val_loss:nan

时间:2021-03-04 14:51:32

标签: 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”的结果

0 个答案:

没有答案