繁体   English   中英

了解 Keras 错误:TypeError:传递给参数“shape”的值的 DataType float32 不在允许值列表中:int32、int64

[英]Understanding a Keras Error: TypeError: Value passed to parameter 'shape' has DataType float32 not in list of allowed values: int32, int64

所以我有这行代码:

history = model.fit(X_train, y_train, batch_size=batch_size, epochs=epochs, verbose=1, validation_data=(X_val, y_val))

这引发了这个错误:

File "CNN.py", line 125, in model
    history = model.fit(X_train, y_train, batch_size=batch_size, epochs=epochs, verbose=1, validation_data=(X_val, y_val))
  File "C:\Users\Boche\AppData\Local\conda\conda\envs\ExerFloorTracking\lib\site-packages\keras\engine\training.py", line 952, in fit
    batch_size=batch_size)
  File "C:\Users\Boche\AppData\Local\conda\conda\envs\ExerFloorTracking\lib\site-packages\keras\engine\training.py", line 677, in _standardize_user_data
    self._set_inputs(x)
  File "C:\Users\Boche\AppData\Local\conda\conda\envs\ExerFloorTracking\lib\site-packages\keras\engine\training.py", line 589, in _set_inputs
    self.build(input_shape=(None,) + inputs.shape[1:])
  File "C:\Users\Boche\AppData\Local\conda\conda\envs\ExerFloorTracking\lib\site-packages\keras\engine\sequential.py", line 221, in build
    x = layer(x)
  File "C:\Users\Boche\AppData\Local\conda\conda\envs\ExerFloorTracking\lib\site-packages\keras\engine\base_layer.py", line 431, in __call__
    self.build(unpack_singleton(input_shapes))
  File "C:\Users\Boche\AppData\Local\conda\conda\envs\ExerFloorTracking\lib\site-packages\keras\layers\core.py", line 866, in build
    constraint=self.kernel_constraint)
  File "C:\Users\Boche\AppData\Local\conda\conda\envs\ExerFloorTracking\lib\site-packages\keras\legacy\interfaces.py", line 91, in wrapper
    return func(*args, **kwargs)
  File "C:\Users\Boche\AppData\Local\conda\conda\envs\ExerFloorTracking\lib\site-packages\keras\engine\base_layer.py", line 249, in add_weight
    weight = K.variable(initializer(shape),
  File "C:\Users\Boche\AppData\Local\conda\conda\envs\ExerFloorTracking\lib\site-packages\keras\initializers.py", line 218, in __call__
    dtype=dtype, seed=self.seed)
  File "C:\Users\Boche\AppData\Local\conda\conda\envs\ExerFloorTracking\lib\site-packages\keras\backend\tensorflow_backend.py", line 4139, in random_uniform
    dtype=dtype, seed=seed)
  File "C:\Users\Boche\AppData\Local\conda\conda\envs\ExerFloorTracking\lib\site-packages\tensorflow_core\python\ops\random_ops.py", line 245, in random_uniform
    rnd = gen_random_ops.random_uniform(shape, dtype, seed=seed1, seed2=seed2)
  File "C:\Users\Boche\AppData\Local\conda\conda\envs\ExerFloorTracking\lib\site-packages\tensorflow_core\python\ops\gen_random_ops.py", line 822, in random_uniform
    name=name)
  File "C:\Users\Boche\AppData\Local\conda\conda\envs\ExerFloorTracking\lib\site-packages\tensorflow_core\python\framework\op_def_library.py", line 632, in _apply_op_helper
    param_name=input_name)
  File "C:\Users\Boche\AppData\Local\conda\conda\envs\ExerFloorTracking\lib\site-packages\tensorflow_core\python\framework\op_def_library.py", line 61, in _SatisfiesTypeConstraint
    ", ".join(dtypes.as_dtype(x).name for x in allowed_list)))
TypeError: Value passed to parameter 'shape' has DataType float32 not in list of allowed values: int32, int64

训练和验证数据的形状和类型:

X training:
(28581, 46, 62, 1)
int32
y training:
(28581, 8)
int32
X validation:
(13720, 46, 62, 1)
int32
y validation:
(13720, 8) 

批量大小设置为 100,epochs 设置为 20。我不明白为什么会出现错误。 所有需要为整数的值都是整数。 我也不明白这里的参数“形状”是什么意思。 如果您没有看到代码中有什么问题,如果您能向我解释这个错误以及触发它的原因,我将不胜感激。

编辑:我忘了添加我正在谈论的代码行。 我现在将它添加到帖子中。 这是您在帖子中看到的第一行代码。

所以我解决了这个问题。 它来自另一行代码。 这些是我的代码中在拟合之前的几行:

model.add(Dense(num_neurons, activation= cnn_params["activation_output"]))
model.add(Dense(cnn_params["final_dense"]["number_neurons"], activation= cnn_params["activation_output"]))

#COMPILING MODEL
model.compile(loss=keras.losses.categorical_crossentropy, optimizer=keras.optimizers.SGD(lr=learning_rate), metrics=['accuracy', 'categorical_accuracy'])

在第一行中,您可以看到参数num_neurons 我使用函数计算了这个参数。 该函数的输出是一个浮点数。 将其转换为这样的整数:

model.add(Dense(int(num_neurons), activation= cnn_params["activation_output"]))

解决了这个问题。

暂无
暂无

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

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