Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 操作数无法与形状一起广播:具有特定的批大小_Python_Tensorflow_Keras - Fatal编程技术网

Python 操作数无法与形状一起广播:具有特定的批大小

Python 操作数无法与形状一起广播:具有特定的批大小,python,tensorflow,keras,Python,Tensorflow,Keras,我想做一个自动编码器。 在我更新到tensorflow2.0之前,我的代码正常工作,但在更新了tensorflow的版本后,它不工作 # Define batch_size / epochs epochs = 200 batch_size = 128 encoder = encoder_model(inputs) decoder = decoder_model() # instantiate VAE model outputs = decoder(encoder(inputs)) ae =

我想做一个自动编码器。 在我更新到
tensorflow2.0
之前,我的代码正常工作,但在更新了
tensorflow
的版本后,它不工作

# Define batch_size / epochs 
epochs = 200
batch_size = 128

encoder = encoder_model(inputs)
decoder = decoder_model()
# instantiate VAE model
outputs = decoder(encoder(inputs))
ae = Model(inputs, outputs, name='ae_mlp')

reconstruction_loss = mse(inputs, outputs)
ae.add_loss(reconstruction_loss)
opt = tf.keras.optimizers.Adam(lr=0.001)
ae.compile(optimizer=opt, loss='mse')
history = ae.fit(x_trn, x_trn, epochs=epochs, batch_size=batch_size, validation_data=(x_val, x_val))
大多数批量大小都会不断出现错误

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-12-38e600fb7073> in <module>
    135     opt = tf.keras.optimizers.Adam(lr=0.001)
    136     ae.compile(optimizer=opt, loss='mse')
--> 137     history = ae.fit(x_trn, x_trn, epochs=epochs, batch_size=batch_size, validation_data=(x_val, x_val))
    138 
    139     """ save model"""

~\Anaconda3\envs\tensorflow\lib\site-packages\tensorflow_core\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, validation_freq, max_queue_size, workers, use_multiprocessing, **kwargs)
    726         max_queue_size=max_queue_size,
    727         workers=workers,
--> 728         use_multiprocessing=use_multiprocessing)
    729 
    730   def evaluate(self,

~\Anaconda3\envs\tensorflow\lib\site-packages\tensorflow_core\python\keras\engine\training_v2.py in fit(self, model, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, validation_freq, **kwargs)
    322                 mode=ModeKeys.TRAIN,
    323                 training_context=training_context,
--> 324                 total_epochs=epochs)
    325             cbks.make_logs(model, epoch_logs, training_result, ModeKeys.TRAIN)
    326 

~\Anaconda3\envs\tensorflow\lib\site-packages\tensorflow_core\python\keras\engine\training_v2.py in run_one_epoch(model, iterator, execution_function, dataset_size, batch_size, strategy, steps_per_epoch, num_samples, mode, training_context, total_epochs)
    170             batch_outs,
    171             batch_start=step * batch_size,
--> 172             batch_end=step * batch_size + current_batch_size)
    173       cbks.make_logs(model, batch_logs, batch_outs, mode)
    174       step += 1

~\Anaconda3\envs\tensorflow\lib\site-packages\tensorflow_core\python\keras\engine\training_utils.py in aggregate(self, batch_outs, batch_start, batch_end)
    132       self.results[0] += batch_outs[0]
    133     else:
--> 134       self.results[0] += batch_outs[0] * (batch_end - batch_start)
    135     # Metrics (always stateful, just grab current values.)
    136     self.results[1:] = batch_outs[1:]

ValueError: operands could not be broadcast together with shapes (128,) (116,) (128,) 

---------------------------------------------------------------------------
ValueError回溯(最近一次调用上次)
在里面
135 opt=tf.keras.optimizers.Adam(lr=0.001)
136 ae.编译(优化器=opt,loss='mse')
-->137历史=ae.拟合(x_-trn,x_-trn,epochs=epochs,batch_-size=batch_-size,validation_-data=(x_-val,x_-val))
138
139“保存模型”
~\Anaconda3\envs\tensorflow\lib\site packages\tensorflow\u core\python\keras\engine\training.py适合(self、x、y、批大小、历元、冗余、回调、验证拆分、验证数据、随机排列、类权重、样本权重、初始历元、每个历元的步数、验证步骤、验证频率、最大队列大小、工作者、使用多处理、**kwargs)
726最大队列大小=最大队列大小,
727名工人=工人,
-->728使用多处理=使用多处理)
729
730 def评估(自我,
~\Anaconda3\envs\tensorflow\lib\site packages\tensorflow\u core\python\keras\engine\training\u v2.py适合(self、model、x、y、批大小、epoch、verbose、回调、验证拆分、验证数据、洗牌、类权重、样本权重、初始历元、每个历元的步骤、验证步骤、验证频率、**kwargs)
322模式=ModeKeys.TRAIN,
323培训上下文=培训上下文,
-->324个总记录(每个记录=个记录)
325 cbks.生成日志(模型、历元日志、训练结果、模式键.训练)
326
~\Anaconda3\envs\tensorflow\lib\site packages\tensorflow\u core\python\keras\engine\training\u v2.py in run\u one\u epoch(模型、迭代器、执行函数、数据集大小、批处理大小、策略、每个epoch的步骤、样本数、模式、训练上下文、总历元)
170批,
171批次开始=步骤*批次大小,
-->172批次结束=步骤*批次大小+当前批次大小)
173 cbks.制作日志(模型、批量日志、批量输出、模式)
174阶跃+=1
~\Anaconda3\envs\tensorflow\lib\site packages\tensorflow\u core\python\keras\engine\training\u utils.py聚合(self、batch\u out、batch\u start、batch\u end)
132自我结果[0]+=批处理结果[0]
133其他:
-->134自我结果[0]+=批次输出[0]*(批次结束-批次开始)
135#度量(总是有状态的,只需获取当前值。)
136.自我结果[1:]=批次输出[1:]
ValueError:操作数无法与形状(128,)(116,)(128,)一起广播
我尝试了
batch\u size=1
,和
batch\u size=2
,它没有给我任何错误,但需要更多的时间

当我试着用更大的批量做这件事时,它总是给我错误。
如何解决此问题?

此问题是由于Keras版本(在Tensorflow中)造成的。在我安装Keras(Tensorflow除外)并更新版本后,问题解决了

请显示您的模型定义。您确定没有强制它将批处理大小设置为128吗?除非有充分的理由,否则不应在模型中强制使用批大小,在这种情况下,必须使数据与特定的批大小兼容。@DanielMöller我使用了输入_形状=(74,),编码器和解码器的隐藏层是(256,),(128,),(64,)和潜在形状=(4,)。我有输入数据shape=(11466,74)。如何正确决定批量大小?我总是随机选择批量大小=64、128或256。。这不是一个好的做法吗?请显示您的模型定义。你有没有注意到你在输入和输出上使用了两个损耗,并且都是
mse
。谢谢,你说的模型定义是什么意思?你需要完整的代码吗?@DanielMöller这个问题是因为Keras的版本(在Tensorflow中)。在我安装Keras(分别来自Tensorflow)并更新版本后,问题解决了!