python - 尝试 Keras SimpleRNN 时出现 NotImplementedError
问题描述
我正在尝试使用下面的代码在我的 Jupyter Labs Notebook 中使用 Keras SimpleRNN 实现一个非常基本的 RNN 模型。
为什么我收到错误消息?应该做什么?我的 Python 版本是 3.8.11,Keras 是 2.4.3。我尝试使用 Numpy 1.20.1 和 1.18.5。
我也通过 Tensorflow 尝试过 Keras。
from keras import models
from keras.layers import SimpleRNN
model = models.Sequential()
model.add(SimpleRNN(units=32, input_shape=(1,4), activation="relu"))
model.add(Dense(1))
model.summary()
错误:
NotImplementedError Traceback (most recent call last)
~\AppData\Local\Temp/ipykernel_3896/2618924464.py in <module>
3
4 model = models.Sequential()
----> 5 model.add(SimpleRNN(units=32, input_shape=(1,4)))
6 model.add(Dense(1))
7 model.summary()
C:\ProgramData\Anaconda3\lib\site-packages\tensorflow\python\training\tracking\base.py in _method_wrapper(self, *args, **kwargs)
455 self._self_setattr_tracking = False # pylint: disable=protected-access
456 try:
--> 457 result = method(self, *args, **kwargs)
458 finally:
459 self._self_setattr_tracking = previous_value # pylint: disable=protected-access
C:\ProgramData\Anaconda3\lib\site-packages\tensorflow\python\keras\engine\sequential.py in add(self, layer)
204 # and create the node connecting the current layer
205 # to the input layer we just created.
--> 206 layer(x)
207 set_inputs = True
208
C:\ProgramData\Anaconda3\lib\site-packages\tensorflow\python\keras\layers\recurrent.py in __call__(self, inputs, initial_state, constants, **kwargs)
661
662 if initial_state is None and constants is None:
--> 663 return super(RNN, self).__call__(inputs, **kwargs)
664
665 # If any of `initial_state` or `constants` are specified and are Keras
C:\ProgramData\Anaconda3\lib\site-packages\tensorflow\python\keras\engine\base_layer.py in __call__(self, *args, **kwargs)
923 # >> model = tf.keras.Model(inputs, outputs)
924 if _in_functional_construction_mode(self, inputs, args, kwargs, input_list):
--> 925 return self._functional_construction_call(inputs, args, kwargs,
926 input_list)
927
C:\ProgramData\Anaconda3\lib\site-packages\tensorflow\python\keras\engine\base_layer.py in _functional_construction_call(self, inputs, args, kwargs, input_list)
1115 try:
1116 with ops.enable_auto_cast_variables(self._compute_dtype_object):
-> 1117 outputs = call_fn(cast_inputs, *args, **kwargs)
1118
1119 except errors.OperatorNotAllowedInGraphError as e:
C:\ProgramData\Anaconda3\lib\site-packages\tensorflow\python\keras\layers\recurrent.py in call(self, inputs, mask, training, initial_state)
1570 def call(self, inputs, mask=None, training=None, initial_state=None):
1571 self._maybe_reset_cell_dropout_mask(self.cell)
-> 1572 return super(SimpleRNN, self).call(
1573 inputs, mask=mask, training=training, initial_state=initial_state)
1574
C:\ProgramData\Anaconda3\lib\site-packages\tensorflow\python\keras\layers\recurrent.py in call(self, inputs, mask, training, initial_state, constants)
732 self._validate_args_if_ragged(is_ragged_input, mask)
733
--> 734 inputs, initial_state, constants = self._process_inputs(
735 inputs, initial_state, constants)
736
C:\ProgramData\Anaconda3\lib\site-packages\tensorflow\python\keras\layers\recurrent.py in _process_inputs(self, inputs, initial_state, constants)
860 initial_state = self.states
861 elif initial_state is None:
--> 862 initial_state = self.get_initial_state(inputs)
863
864 if len(initial_state) != len(self.states):
C:\ProgramData\Anaconda3\lib\site-packages\tensorflow\python\keras\layers\recurrent.py in get_initial_state(self, inputs)
643 dtype = inputs.dtype
644 if get_initial_state_fn:
--> 645 init_state = get_initial_state_fn(
646 inputs=None, batch_size=batch_size, dtype=dtype)
647 else:
C:\ProgramData\Anaconda3\lib\site-packages\tensorflow\python\keras\layers\recurrent.py in get_initial_state(self, inputs, batch_size, dtype)
1383
1384 def get_initial_state(self, inputs=None, batch_size=None, dtype=None):
-> 1385 return _generate_zero_filled_state_for_cell(self, inputs, batch_size, dtype)
1386
1387 def get_config(self):
C:\ProgramData\Anaconda3\lib\site-packages\tensorflow\python\keras\layers\recurrent.py in _generate_zero_filled_state_for_cell(cell, inputs, batch_size, dtype)
2966 batch_size = array_ops.shape(inputs)[0]
2967 dtype = inputs.dtype
-> 2968 return _generate_zero_filled_state(batch_size, cell.state_size, dtype)
2969
2970
C:\ProgramData\Anaconda3\lib\site-packages\tensorflow\python\keras\layers\recurrent.py in _generate_zero_filled_state(batch_size_tensor, state_size, dtype)
2984 return nest.map_structure(create_zeros, state_size)
2985 else:
-> 2986 return create_zeros(state_size)
2987
2988
C:\ProgramData\Anaconda3\lib\site-packages\tensorflow\python\keras\layers\recurrent.py in create_zeros(unnested_state_size)
2979 flat_dims = tensor_shape.as_shape(unnested_state_size).as_list()
2980 init_state_size = [batch_size_tensor] + flat_dims
-> 2981 return array_ops.zeros(init_state_size, dtype=dtype)
2982
2983 if nest.is_sequence(state_size):
C:\ProgramData\Anaconda3\lib\site-packages\tensorflow\python\util\dispatch.py in wrapper(*args, **kwargs)
199 """Call target, and fall back on dispatchers if there is a TypeError."""
200 try:
--> 201 return target(*args, **kwargs)
202 except (TypeError, ValueError):
203 # Note: convert_to_eager_tensor currently raises a ValueError, not a
C:\ProgramData\Anaconda3\lib\site-packages\tensorflow\python\ops\array_ops.py in wrapped(*args, **kwargs)
2745
2746 def wrapped(*args, **kwargs):
-> 2747 tensor = fun(*args, **kwargs)
2748 tensor._is_zeros_tensor = True
2749 return tensor
C:\ProgramData\Anaconda3\lib\site-packages\tensorflow\python\ops\array_ops.py in zeros(shape, dtype, name)
2792 # Create a constant if it won't be very big. Otherwise create a fill
2793 # op to prevent serialized GraphDefs from becoming too large.
-> 2794 output = _constant_if_small(zero, shape, dtype, name)
2795 if output is not None:
2796 return output
C:\ProgramData\Anaconda3\lib\site-packages\tensorflow\python\ops\array_ops.py in _constant_if_small(value, shape, dtype, name)
2730 def _constant_if_small(value, shape, dtype, name):
2731 try:
-> 2732 if np.prod(shape) < 1000:
2733 return constant(value, shape=shape, dtype=dtype, name=name)
2734 except TypeError:
<__array_function__ internals> in prod(*args, **kwargs)
C:\ProgramData\Anaconda3\lib\site-packages\numpy\core\fromnumeric.py in prod(a, axis, dtype, out, keepdims, initial, where)
3028 10
3029 """
-> 3030 return _wrapreduction(a, np.multiply, 'prod', axis, dtype, out,
3031 keepdims=keepdims, initial=initial, where=where)
3032
C:\ProgramData\Anaconda3\lib\site-packages\numpy\core\fromnumeric.py in _wrapreduction(obj, ufunc, method, axis, dtype, out, **kwargs)
85 return reduction(axis=axis, out=out, **passkwargs)
86
---> 87 return ufunc.reduce(obj, axis, dtype, out, **passkwargs)
88
89
C:\ProgramData\Anaconda3\lib\site-packages\tensorflow\python\framework\ops.py in __array__(self)
843
844 def __array__(self):
--> 845 raise NotImplementedError(
846 "Cannot convert a symbolic Tensor ({}) to a numpy array."
847 " This error may indicate that you're trying to pass a Tensor to"
NotImplementedError: Cannot convert a symbolic Tensor (simple_rnn/strided_slice:0) to a numpy array. This error may indicate that you're trying to pass a Tensor to a NumPy call, which is not supported
解决方案
推荐阅读
- javascript - ajax调用成功后将ajax响应数据传递到另一个页面
- vue.js - 折叠所有列表并仅展开 vuetify 中的选定列表
- python - 原始图像 Python 4 尺寸
- sql - SQL 中按 WEEK 分组的 SELECT 数据
- flowable - 如何在 `flowable-design` 中更改 `admin` 帐户的密码以发布应用程序?
- c# - 从 .NET Core 调用 Rest API
- ignite - 无法在 Apache Ignite 的 Web 控制台代理中获取集群和节点详细信息
- css - :first-child 样式未在 Vue 组件中应用
- php - 用php清除一个txt文件
- asp.net-core - 为什么使用 AsNoTracking 时内存中的 SQLite 返回不同的结果?