繁体   English   中英

Tensorflow 训练在音频分类器的第一个时期的最后一步崩溃

[英]Tensorflow Training Crashes in last step of first epoch for audio classifier

我试图将最初用 Pytorch 编写的自定义 DNN 网络转换为 Tensorflow 2 ,其输入形状要求为(batchsize,39,101,1)。 在使用特征提取器并获得具有兼容维度的训练和验证数据集的维度(总样本,39,101,1)之后,我尝试使用 model.fit 训练 model。 在第一个 epoch 的最后一步,我遇到了如下所示的错误,这表明我的张量形状正在以某种方式发生变化。 我不知道为什么这只发生在最后一步。 我的回调非常简单,与 model 检查点和提前停止相关,如下所示。我的数据库来自 Google Speech 数据集 v0.01。 我相信这是在验证步骤开始之前发生的。 如果有人可以提供任何建议来解决它,那就太好了。

这是我的训练和验证数据集维度:

print(x_tr.shape) -> (17049, 39, 101, 1)
print(y_tr.shape) -> (17049, 10)
print(x_val.shape) -> (4263, 39, 101, 1)
print(y_val.shape) -> (4263, 10)
modelname, input_shape, numclass = 'CRNN', (39,101,1), 10

model = modelcreator.getmodel(modelname, input_shape, numclass)
es = EarlyStopping(monitor='val_loss', mode='min', verbose=1, patience=10, min_delta=0.0001) 
mc = ModelCheckpoint('best_model.hdf5', monitor='val_acc', verbose=1, save_best_only=True, mode='max')
history=model.fit(x_tr, y_tr ,epochs=100, callbacks=[es,mc], batch_size=64, validation_data=(x_val,y_val))

纪元 1/100 266/267 [=============================>.] - ETA:0s - 损失:0.9436 - 准确度: 0.6963

-------------------------------------------------- ------------------------- InvalidArgumentError Traceback (最近一次调用最后一次) in ----> 1 history=model.fit(x_tr, y_tr, epochs=100,回调=[es,mc],batch_size=64,validation_data=(x_val,y_val))

~/Desktop/Spoken_Keyword_Spotting/newenv/lib/python3.6/site-packages/tensorflow/python/keras/engine/training.py in _method_wrapper(self, *args, **kwargs) 106 def _method_wrapper(self, *args, **kwargs): 107 if not self._in_multi_worker_mode(): # pylint: disable=protected-access --> 108 return method(self, *args, **kwargs) 109 110 # 已经在run_distribute_coordinator内部运行。

~/Desktop/Spoken_Keyword_Spotting/newenv/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,validation_batch_size,validation_freq,max_queue_size,workers,use_multiprocessing)1096 batch_size=batch_size):
1097 callbacks.on_train_batch_begin(step) -> 1098 tmp_logs = train_function(iterator) 1099 if data_handler.should_sync: 1100
context.async_wait()

~/Desktop/Spoken_Keyword_Spotting/newenv/lib/python3.6/site-packages/tensorflow/python/eager/def_function.py in call (self, *args, **kwds) 778 else: 779 compiler = "nonXla" -- > 780 结果 = self._call(*args, **kwds) 781 782 new_tracing_count = self._get_tracing_count()

~/Desktop/Spoken_Keyword_Spotting/newenv/lib/python3.6/site-packages/tensorflow/python/eager/def_function.py in _call(self, *args, **kwds) 805 # 在这种情况下,我们已经在第一次调用,所以我们运行 806 # defunned 版本,它保证永远不会创建变量。 --> 807 return self._stateless_fn(*args, **kwds) # pylint: disable=not-callable 808 elif self._stateful_fn is not None: 809 # 提前释放锁,让多个线程可以执行调用

~/Desktop/Spoken_Keyword_Spotting/newenv/lib/python3.6/site-packages/tensorflow/python/eager/function.py in call (self, *args, **kwargs) 2827 with self._lock:
2828 graph_function, args, kwargs = self._maybe_define_function(args, kwargs) -> 2829 return graph_function._filtered_call(args, kwargs) #pylint: disable=protected-access 2830 2831 @property

~/Desktop/Spoken_Keyword_Spotting/newenv/lib/python3.6/site-packages/tensorflow/python/eager/function.py in _filtered_call(self,args,kwargs,cancellation_manager)1846
resource_variable_ops.BaseResourceVariable))],1847
capture_inputs=self.captured_inputs,-> 1848 cancel_manager=cancellation_manager)1849 1850 def _call_flat(self,args,captured_inputs,cancellation_manager=None):

~/Desktop/Spoken_Keyword_Spotting/newenv/lib/python3.6/site-packages/tensorflow/python/eager/function.py in _call_flat(self,args,capped_inputs,cancellation_manager)
1922 # 没有磁带在看; 跳至运行 function。
1923年返回self._build_call_outputs(self._inference_function.call(-> 1924 ctx,args,cancellation_manager=cancellation_manager))1925
forward_backward = self._select_forward_and_backward_functions(
1926 参数,

~/Desktop/Spoken_Keyword_Spotting/newenv/lib/python3.6/site-packages/tensorflow/python/eager/function.py 在调用中(self,ctx,args,cancellation_manager) 548 个输入=args,549 个 attrs=attrs,- > 550 ctx=ctx) 551 else: 552 输出 = execute.execute_with_cancellation(

~/Desktop/Spoken_Keyword_Spotting/newenv/lib/python3.6/site-packages/tensorflow/python/eager/execute.py in quick_execute(op_name, num_outputs, inputs, attrs, ctx, name) 58 ctx.ensure_initialized() 59 张量= pywrap_tfe.TFE_Py_Execute(ctx._handle, device_name, op_name, ---> 60 个输入, attrs, num_outputs) 61 除了 core._NotOkStatusException 作为 e: 62 如果名称不是 None:

InvalidArgumentError:从形状为 [25,512] [[{{node TensorArrayUnstack/TensorListFromTensor}}]] 的张量中指定形状为 [64,512] 的列表
[[functional_3/lstm_1/PartitionedCall]] [Op:__inference_train_function_13255]

Function 调用堆栈:train_function -> train_function -> train_function

我是从下面的链接中想到的。 基于此处的答案: InvalidArgumentError: Specified a list with shape [60,9] from a tensor with shape [56,9]

我的 model 最后由一个 LSTM 层组成,返回序列 = True。 因此,在最后一个时期,接收到的批次的样本少于批次大小。 遇到了这个问题

暂无
暂无

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM