Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.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 3.x 类型错误:';非类型';对象不可调用Tensorflow_Python 3.x_Tensorflow_Lstm - Fatal编程技术网

Python 3.x 类型错误:';非类型';对象不可调用Tensorflow

Python 3.x 类型错误:';非类型';对象不可调用Tensorflow,python-3.x,tensorflow,lstm,Python 3.x,Tensorflow,Lstm,当前正在使用tf2.0处理回归问题。为了准备数据集,我使用了以下代码: train = tf.data.Dataset.from_tensor_slices(([train_X], [train_y])).batch(BATCH_SIZE).repeat() val = tf.data.Dataset.from_tensor_slices(([val_X], [val_y])).batch(BATCH_SIZE).repeat() 现在,如果我们看看它们的形状: <RepeatData

当前正在使用
tf2.0
处理回归问题。为了准备数据集,我使用了以下代码:

train = tf.data.Dataset.from_tensor_slices(([train_X], [train_y])).batch(BATCH_SIZE).repeat()
val = tf.data.Dataset.from_tensor_slices(([val_X], [val_y])).batch(BATCH_SIZE).repeat() 
现在,如果我们看看它们的形状:

<RepeatDataset shapes: ((None, 42315, 20), (None, 42315)), types: (tf.float64, tf.float64)>
<RepeatDataset shapes: ((None, 2228, 20), (None, 2228)), types: (tf.float64, tf.float64)>
然而,当我把我的模型稍微复杂一点并试图编译它时,它给了我一个错误,这就是这个问题的标题。有关错误的详细信息位于问题的最底部。复杂的模型如下所示:

comp_lstm = tf.keras.models.Sequential([
    tf.keras.layers.LSTM(64),
    tf.keras.layers.LSTM(64),
    tf.keras.layers.LSTM(64),
    tf.keras.layers.Dense(1)
])

comp_lstm.compile(optimizer='adam', loss='mae')

history = comp_lstm.fit(train, 
                      epochs=EPOCHS,
                      steps_per_epoch=EVALUATION_INTERVAL,
                      validation_data=val, validation_steps=50)
一、 事实上,我想尝试双向LSTM,但似乎LSTM的多个堆栈本身给了我如下所述的问题


错误
TypeError回溯(最近一次调用)
在里面
2个时代=20
3.
---->4历史=组件装配(列车,
5个时代=时代,
每个历元6步=评估间隔,
~/python\u envs/p2/lib/python3.8/site-packages/tensorflow/python/keras/engine/training.py in\u method\u包装(self,*args,**kwargs)
64定义方法包装(self,*args,**kwargs):
65如果不是自己,则为多工作模式():#pylint:disable=受保护访问
--->66返回方法(self、*args、**kwargs)
67
68#已经在"运行分配协调器"内部运行。
~/python_envs/p2/lib/python3.8/site-packages/tensorflow/python/keras/engine/training.py in-fit(self、x、y、批大小、历元、冗余、回调、验证拆分、验证数据、洗牌、类权重、样本权重、初始历元、每个历元的步骤、验证步骤、验证批次大小、验证频率、最大队列大小、工人、使用多处理)
846批次大小=批次大小):
847回拨。列车上批次开始(步骤)
-->848 tmp_日志=训练函数(迭代器)
849#捕获未知大小数据集的范围错误。
850#这会一直阻塞,直到批处理完成执行。
~/python_envs/p2/lib/python3.8/site-packages/tensorflow/python/eager/def_function.py在调用中(self,*args,**kwds)
578 xla_context.Exit()
579其他:
-->580结果=自调用(*args,**kwds)
581
582如果跟踪计数==self.\u获取跟踪计数():
~/python_envs/p2/lib/python3.8/site-packages/tensorflow/python/eager/def_function.py in_调用(self,*args,**kwds)
609#在本例中,我们在第一次调用时创建了变量,因此我们运行
610#取消运行版本,保证永远不会创建变量。
-->611返回self._无状态_fn(*args,**kwds)35; pylint:disable=不可调用
612 elif self.\u stateful\u fn不是无:
613#尽早释放锁,以便多个线程可以执行调用
TypeError:“非类型”对象不可调用

问题是,当您堆叠多个LSTM时,我们应该在LSTM层中使用参数,
return\u sequences=True

这是因为如果
return\u sequences=False
(默认行为),LSTM将返回最后一个时间步的
输出。但是当我们堆叠LSTM时,我们将需要
完整序列的
输出,而不仅仅是最后一个
时间步的

将您的模型更改为

comp_lstm = tf.keras.models.Sequential([
    tf.keras.layers.LSTM(64, return_sequences = True),
    tf.keras.layers.LSTM(64, return_sequences = True),
    tf.keras.layers.LSTM(64),
    tf.keras.layers.Dense(1)
])
应该解决错误

这样,您也可以使用双向LSTM

如果您遇到任何其他错误,请告诉我,我将很乐意帮助您


希望这有帮助。快乐学习!

这是最肯定的答案。为什么需要
return\u sequences=True
?修改答案,解释为什么需要它谢谢。是的,这是有道理的。这导致了另一个问题,我在这里详细介绍了我几乎可以肯定它与此问题无关,但这是一种可能性
TypeError                                 Traceback (most recent call last)
<ipython-input-21-8a86aab8a730> in <module>
      2 EPOCHS = 20
      3 
----> 4 history = comp_lstm.fit(train, 
      5                       epochs=EPOCHS,
      6                       steps_per_epoch=EVALUATION_INTERVAL,

~/python_envs/p2/lib/python3.8/site-packages/tensorflow/python/keras/engine/training.py in _method_wrapper(self, *args, **kwargs)
     64   def _method_wrapper(self, *args, **kwargs):
     65     if not self._in_multi_worker_mode():  # pylint: disable=protected-access
---> 66       return method(self, *args, **kwargs)
     67 
     68     # Running inside `run_distribute_coordinator` already.

~/python_envs/p2/lib/python3.8/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)
    846                 batch_size=batch_size):
    847               callbacks.on_train_batch_begin(step)
--> 848               tmp_logs = train_function(iterator)
    849               # Catch OutOfRangeError for Datasets of unknown size.
    850               # This blocks until the batch has finished executing.

~/python_envs/p2/lib/python3.8/site-packages/tensorflow/python/eager/def_function.py in __call__(self, *args, **kwds)
    578         xla_context.Exit()
    579     else:
--> 580       result = self._call(*args, **kwds)
    581 
    582     if tracing_count == self._get_tracing_count():

~/python_envs/p2/lib/python3.8/site-packages/tensorflow/python/eager/def_function.py in _call(self, *args, **kwds)
    609       # In this case we have created variables on the first call, so we run the
    610       # defunned version which is guaranteed to never create variables.
--> 611       return self._stateless_fn(*args, **kwds)  # pylint: disable=not-callable
    612     elif self._stateful_fn is not None:
    613       # Release the lock early so that multiple threads can perform the call

TypeError: 'NoneType' object is not callable
comp_lstm = tf.keras.models.Sequential([
    tf.keras.layers.LSTM(64, return_sequences = True),
    tf.keras.layers.LSTM(64, return_sequences = True),
    tf.keras.layers.LSTM(64),
    tf.keras.layers.Dense(1)
])