ValueError:''检查模型目标时发生错误:预期没有数据,但是得到了

问题描述

我正在使用voxel(32,32,32)进行3D-VAE。在我看来,这没有问题,但我一直遇到错误。我尝试了TensorFlow 2.0、2.1和2.2版本中的所有内容

这是VAE模型。

def get_model():
    enc_in = Input(shape = input_shape)

    enc_conv1 = Batchnormalization()(
        Conv3D(
            filters = 8,kernel_size = (3,3,3),strides = (1,1,1),padding = 'valid',kernel_initializer = 'glorot_normal',activation = 'elu',data_format = 'channels_first')(enc_in))
    enc_conv2 = Batchnormalization()(
        Conv3D(
            filters = 16,strides = (2,2,2),padding = 'same',data_format = 'channels_first')(enc_conv1))
    enc_conv3 = Batchnormalization()(
        Conv3D(
            filters = 32,data_format = 'channels_first')(enc_conv2))
    enc_conv4 = Batchnormalization()(
        Conv3D(
            filters = 64,data_format = 'channels_first')(enc_conv3))

    enc_fc1 = Batchnormalization()(
        Dense(
            units = 343,activation = 'elu')(Flatten()(enc_conv4)))
    mu = Batchnormalization()(
        Dense(
            units = z_dim,activation = None)(enc_fc1))
    sigma = Batchnormalization()(
        Dense(
            units = z_dim,activation = None)(enc_fc1))
    z = Lambda(
        sampling,output_shape = (z_dim,))([mu,sigma])

    encoder = Model(enc_in,[mu,sigma,z])

    dec_in = Input(shape = (z_dim,))

    dec_fc1 = Batchnormalization()(
        Dense(
            units = 343,activation = 'elu')(dec_in))
    dec_unflatten = Reshape(
        target_shape = (1,7,7))(dec_fc1)

    dec_conv1 = Batchnormalization()(
        Conv3DTranspose(
            filters = 64,data_format = 'channels_first')(dec_unflatten))
    dec_conv2 = Batchnormalization()(
        Conv3DTranspose(
            filters = 32,data_format = 'channels_first')(dec_conv1))
    dec_conv3 = Batchnormalization()(
        Conv3DTranspose(
            filters = 16,data_format = 'channels_first')(dec_conv2))
    dec_conv4 = Batchnormalization()(
        Conv3DTranspose(
            filters = 8,kernel_size = (4,4,4),data_format = 'channels_first')(dec_conv3))
    dec_conv5 = Batchnormalization(
        beta_regularizer = l2(0.001),gamma_regularizer = l2(0.001))(
        Conv3DTranspose(
            filters = 1,data_format = 'channels_first')(dec_conv4))

    decoder = Model(dec_in,dec_conv5)

    dec_conv5 = decoder(encoder(enc_in)[2])

    vae = Model(enc_in,dec_conv5)

    return {'inputs': enc_in,'outputs': dec_conv5,'mu': mu,'sigma': sigma,'z': z,'encoder': encoder,'decoder': decoder,'vae': vae}

def weighted_binary_crossentropy(target,output):
    loss = -(98.0 * target * K.log(output) + 2.0 * (1.0 - target) * K.log(1.0 - output)) / 100.0
    return loss

这就是失落与健康

voxel_loss = K.cast(K.mean(weighted_binary_crossentropy(inputs,K.clip(sigmoid(outputs),1e-7,1.0 - 1e-7))),'float32') # + kl_div
vae.add_loss(voxel_loss)

sgd = SGD(lr = learning_rate_1,momentum = momentum,nesterov = True)

vae.compile(optimizer = sgd,metrics = ['accuracy'])
# vae.compile(optimizer = sgd,loss = vae_loss(inputs,sigmoid(outputs)),metrics = ['accuracy'])


vae.fit(
        x_train,x_train,epochs = epoch_num,batch_size = batch_size,validation_data = (x_test,x_test),callbacks = [LearningRateScheduler(learning_rate_scheduler)]
    )

错误

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-9-b1e0bf03e31b> in <module>
     30         batch_size = batch_size,31         validation_data = (x_test,---> 32         callbacks = [LearningRateScheduler(learning_rate_scheduler)]
     33     )
     34 

~/anaconda3/envs/tf19/lib/python3.6/site-packages/tensorflow/python/keras/engine/training.py in fit(self,x,y,batch_size,epochs,verbose,callbacks,validation_split,validation_data,shuffle,class_weight,sample_weight,initial_epoch,steps_per_epoch,validation_steps,**kwargs)
   1261         steps_name='steps_per_epoch',1262         steps=steps_per_epoch,-> 1263         validation_split=validation_split)
   1264 
   1265     # Prepare validation data.

~/anaconda3/envs/tf19/lib/python3.6/site-packages/tensorflow/python/keras/engine/training.py in _standardize_user_data(self,check_steps,steps_name,steps,validation_split)
    905           Feed_output_shapes,906           check_batch_axis=False,# Don't enforce the batch size.
--> 907           exception_prefix='target')
    908 
    909       # Generate sample-wise weight values given the `sample_weight` and

~/anaconda3/envs/tf19/lib/python3.6/site-packages/tensorflow/python/keras/engine/training_utils.py in standardize_input_data(data,names,shapes,check_batch_axis,exception_prefix)
    114     if data is not None and hasattr(data,'__len__') and len(data):
    115       raise ValueError('Error when checking model ' + exception_prefix + ': '
--> 116                        'expected no data,but got:',data)
    117     return []
    118   if data is None:

ValueError: ('Error when checking model target: expected no data,array([[[[[-1.,-1.,...,-1.],[-1.,-1.]],

我看到目标的意思是输出。但是我的输出是重建的数据,我无法理解为什么期望没有数据。请帮忙

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)