简体   繁体   English

在 Keras 中训练变分自动编码器引发“InvalidArgumentError:不兼容的形状”错误

[英]Training Variational Auto Encoder in Keras raises “InvalidArgumentError: Incompatible shapes” error

I have been attempting to get this VAE working all evening, but keep running into the same issue over and over.我一直试图让这个 VAE 整晚都在工作,但是一遍又一遍地遇到同样的问题。 I am not sure what the problem is.我不确定问题是什么。 I have tried removing callbacks, validation, changing the loss function, changing the sampling method.我试过删除回调、验证、更改损失 function、更改采样方法。 The error (while showing below to be early stopping) has consistently been the last argument added to the fit function.该错误(虽然在下面显示为提前停止)一直是添加到拟合 function 的最后一个参数。 I am out of ideas as to how to get this to work.我不知道如何让它发挥作用。

Below is the reproducible code and then followed is the error I keep having.下面是可重现的代码,然后是我一直遇到的错误。 Note that changing the batch size does change the error, but the mismatched number will also reduce along with the batch size.请注意,更改批量大小确实会改变错误,但不匹配的数量也会随着批量大小而减少。

import pandas as pd
from sklearn.datasets import make_blobs 
from sklearn.preprocessing import MinMaxScaler

import keras.backend as K
import tensorflow as tf

from keras.layers import Input, Dense, Lambda, Layer, Add, Multiply
from keras.models import Model, Sequential
from keras.callbacks import EarlyStopping, LearningRateScheduler
from keras.objectives import binary_crossentropy


x, labels = make_blobs(n_samples=150000, n_features=110,  centers=16, cluster_std=4.0)
scaler = MinMaxScaler()
x = scaler.fit_transform(x)
x = pd.DataFrame(x)

train = x.sample(n = 100000)
train_indexs = train.index.values
test = x[~x.index.isin(train_indexs)]
print(train.shape, test.shape)

min_dim = 2
batch_size = 1024

def sampling(args):
    mu, log_sigma = args
    eps = K.random_normal(shape=(batch_size, min_dim), mean = 0.0, stddev = 1.0)
    return mu + K.exp(0.5 * log_sigma) * eps

#Encoder
inputs = Input(shape=(x.shape[1],))
down1 = Dense(64, activation='relu')(inputs)
mu = Dense(min_dim, activation='linear')(down1)
log_sigma = Dense(min_dim, activation='linear')(down1)

#Sampling
sample_set = Lambda(sampling, output_shape=(min_dim,))([mu, log_sigma])

#decoder
up1 = Dense(64, activation='relu')(sample_set)
output = Dense(x.shape[1], activation='sigmoid')(up1)

vae = Model(inputs, output)
encoder = Model(inputs, mu)

def vae_loss(y_true, y_pred):
    recon  = binary_crossentropy(y_true, y_pred)
    kl = - 0.5 * K.mean(1 + log_sigma - K.square(mu) - K.exp(log_sigma), axis=-1)
    return recon + kl

vae.compile(optimizer='adam', loss=vae_loss)
vae.fit(train, train, shuffle = True, epochs = 1000, 
        batch_size = batch_size, validation_data = (test, test), 
        callbacks = [EarlyStopping(patience=50)])

Error:错误:


  File "<ipython-input-2-7aa4be21434d>", line 62, in <module>
    callbacks = [EarlyStopping(patience=50)])

  File "C:\Users\se01040434\Anaconda3\lib\site-packages\keras\engine\training.py", line 1239, in fit
    validation_freq=validation_freq)

  File "C:\Users\se01040434\Anaconda3\lib\site-packages\keras\engine\training_arrays.py", line 196, in fit_loop
    outs = fit_function(ins_batch)

  File "C:\Users\se01040434\Anaconda3\lib\site-packages\tensorflow\python\keras\backend.py", line 3792, in __call__
    outputs = self._graph_fn(*converted_inputs)

  File "C:\Users\se01040434\Anaconda3\lib\site-packages\tensorflow\python\eager\function.py", line 1605, in __call__
    return self._call_impl(args, kwargs)

  File "C:\Users\se01040434\Anaconda3\lib\site-packages\tensorflow\python\eager\function.py", line 1645, in _call_impl
    return self._call_flat(args, self.captured_inputs, cancellation_manager)

  File "C:\Users\se01040434\Anaconda3\lib\site-packages\tensorflow\python\eager\function.py", line 1746, in _call_flat
    ctx, args, cancellation_manager=cancellation_manager))

  File "C:\Users\se01040434\Anaconda3\lib\site-packages\tensorflow\python\eager\function.py", line 598, in call
    ctx=ctx)

  File "C:\Users\se01040434\Anaconda3\lib\site-packages\tensorflow\python\eager\execute.py", line 60, in quick_execute
    inputs, attrs, num_outputs)

InvalidArgumentError:  Incompatible shapes: [672] vs. [1024]
     [[node gradients/loss/dense_5_loss/vae_loss/weighted_loss/mul_grad/Mul_1 (defined at C:\Users\se01040434\Anaconda3\lib\site-packages\keras\backend\tensorflow_backend.py:3009) ]] [Op:__inference_keras_scratch_graph_1515]

Function call stack:
keras_scratch_graph

You are creating a random tensor having batch_size samples, where batch_size is a fixed preset value in your code.您正在创建一个具有batch_size样本的随机张量,其中batch_size是代码中的固定预设值。 However, note that the model may not necessarily take as much as batch_size input samples (eg the last batch of training/test data might have smaller number of samples).但是,请注意,model 可能不一定需要与batch_size输入样本一样多(例如,最后一批训练/测试数据的样本数量可能较少)。 Instead, in these situations where your model implementation depends on the dynamic value of batch size, you should fetch it dynamically using keras.backend.shape function:相反,在您的 model 实现取决于批量大小的动态值的这些情况下,您应该使用keras.backend.shape function 动态获取它:

def sampling(args):
    # ...
    eps = K.random_normal(shape=(K.shape(mu)[0], min_dim)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 训练可变自动编码器时出现不兼容的形状错误 - Incompatible shapes error while training variational autoencoder 变分自动编码器丢失功能(keras) - Variational Auto-Encoder Loss function (keras) Tensorflow + Keras训练:InvalidArgumentError:不兼容的形状:[7,128,2,2] vs [7,128,3,3] - Tensorflow + Keras training: InvalidArgumentError: Incompatible shapes: [7,128,2,2] vs [7,128,3,3] InvalidArgumentError:与Keras LSTM Net不兼容的形状 - InvalidArgumentError: Incompatible shapes with Keras LSTM Net 使用Keras + Tensorflow训练ConvNet时出现不兼容的形状错误 - Incompatible shapes error while training ConvNet using Keras+Tensorflow InvalidArgumentError:不兼容的形状:[32] 与 [8] - Keras 迁移学习 - InvalidArgumentError: Incompatible shapes: [32] vs. [8] - Keras Transfer Learning 在 Keras 中训练变分自动编码器引发“SymbolicException:急切执行 function 的输入不能是 Keras 符号张量” - Training Variational Autoencoder in Keras raises “SymbolicException: Inputs to eager execution function cannot be Keras symbolic tensors” InvalidArgumentError:不兼容的形状:[3] 与 [4] - InvalidArgumentError: Incompatible shapes: [3] vs. [4] 训练时 Tensorflow 不兼容的形状错误 - Tensorflow Incompatible shapes error while training TensorFlow Model 训练:InvalidArgumentError:不兼容的形状:[8,10] vs. [32,1] - TensorFlow Model Training: InvalidArgumentError: Incompatible shapes: [8,10] vs. [32,1]
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM