Error converting shape to a TensorShape: int() argument must be a string, a bytes-like object or a number, not 'tuple'.这一错误是在使用Keras包编写DNN代码时发现的。出错的代码如下:
import keras
model = keras.models.Sequential() #实例化一个模型
init = keras.initializers.glorot_normal(seed=2) #选择Glorot 正态分布作为参数的初始化方法
model.add(keras.layers.Dense(units=50, input_dim=(32,32,3), kernel_initializer=init, activation='relu')) #输入层
并且通过Keras的官方文档可以看到对于input_dim的解释如下:
- 传递一个
input_shape
参数给第一层。它是一个表示尺寸的元组 (一个整数或None
的元组,其中None
表示可能为任何正整数)。在input_shape
中不包含数据的 batch 大小。- 某些 2D 层,例如
Dense
,支持通过参数input_dim
指定输入尺寸,某些 3D 时序层支持input_dim
和input_length
参数。- 如果你需要为你的输入指定一个固定的 batch 大小(这对 stateful RNNs 很有用),你可以传递一个
batch_size
参数给一个层。如果你同时将batch_size=32
和input_shape=(6, 8)
传递给一个层,那么每一批输入的尺寸就为(32,6,8)
。
从官方文档中可以看出,input_dim是可以为元组的数据结构的,并且代码的另一种写法也不会报错:
model = Sequential([
Dense(32, input_shape=(32,32,3)),
Activation('relu'),
Dense(10),
Activation('softmax'),
])