操作具有与类型 int64 不匹配的 int32 类型
Operation has type int32 that does not match type int64
我正在尝试使用 tflearn
提供的 DNN 训练一些数据。我的 data
变量的形状为 (6605, 32)
,我的 labels
数据的形状为 (6605,)
,我在下面将其重塑为 (6605, 1)
...
# Target label used for training
labels = np.array(data[label], dtype=np.float32)
# Reshape target label from (6605,) to (6605, 1)
labels = tf.reshape(labels, shape=[-1, 1])
# Data for training minus the target label.
data = np.array(data.drop(label, axis=1), dtype=np.float32)
# DNN
net = tflearn.input_data(shape=[None, 32])
net = tflearn.fully_connected(net, 32)
net = tflearn.fully_connected(net, 32)
net = tflearn.fully_connected(net, 1, activation='softmax')
net = tflearn.regression(net)
# Define model.
model = tflearn.DNN(net)
model.fit(data, labels, n_epoch=10, batch_size=16, show_metric=True)
在 运行 之后我得到两个错误,第一个是...
ValueError: Tensor conversion requested dtype int64 for Tensor with dtype int32: 'Tensor("strided_slice/stack_4:0", shape=(1,), dtype=int32)'
第二个错误是...
During handling of the above exception, another exception occurred:
TypeError: Input 'strides' of 'StridedSlice' Op has type int32 that does not match type int64 of argument 'begin'.
我不知道如何解决这个问题。所以我采取的一种方法是将 labels
和 data
的 dtype
更改为 int64
...
# Target label used for training
labels = np.array(data[label], dtype=np.int64)
# Reshape target label from (6605,) to (6605, 1)
labels = tf.reshape(labels, shape=[-1, 1])
# Data for training minus the target label.
data = np.array(data.drop(label, axis=1), dtype=np.int64)
但是如果我这样做,我仍然会遇到同样的错误。我该如何解决这个问题?
这个错误似乎是由旧版本的 tensorflow 产生的。我通过使用...
更新了 tensorflow
pip3 install tensorflow --upgrade
这消除了 int64
错误。似乎在转换 long 数据类型时出现问题,例如旧版本中的 int64
。
更新后,由于张量的形状,我得到了不同的错误...
Shape must be rank 1 but is rank 2 for 'strided_slice' (op: 'StridedSlice') with input shapes: [6605,1], [1,16], [1,16], [1].
但这是另一个问题。
请注意,该错误指出有关整数、int64 和 int32 的 ValueError,因此有问题的转换应该是 int 而不是 float。
我在代码库中遇到过类似的情况,无法更新 tensorflow,
我正在生成一个导致 int 类型 ValueError 的索引。
如果无法升级 tensorflow 的版本,您可以转换为 int32,例如:
new_var = tf.cast(old_var, tf.int32)
如果您检查发生错误的确切行,您应该找到罪魁祸首,施放它,它应该可以工作。此解决方案应该适用于 int 和 float 铸造(使用 tf.float32)。
我正在尝试使用 tflearn
提供的 DNN 训练一些数据。我的 data
变量的形状为 (6605, 32)
,我的 labels
数据的形状为 (6605,)
,我在下面将其重塑为 (6605, 1)
...
# Target label used for training
labels = np.array(data[label], dtype=np.float32)
# Reshape target label from (6605,) to (6605, 1)
labels = tf.reshape(labels, shape=[-1, 1])
# Data for training minus the target label.
data = np.array(data.drop(label, axis=1), dtype=np.float32)
# DNN
net = tflearn.input_data(shape=[None, 32])
net = tflearn.fully_connected(net, 32)
net = tflearn.fully_connected(net, 32)
net = tflearn.fully_connected(net, 1, activation='softmax')
net = tflearn.regression(net)
# Define model.
model = tflearn.DNN(net)
model.fit(data, labels, n_epoch=10, batch_size=16, show_metric=True)
在 运行 之后我得到两个错误,第一个是...
ValueError: Tensor conversion requested dtype int64 for Tensor with dtype int32: 'Tensor("strided_slice/stack_4:0", shape=(1,), dtype=int32)'
第二个错误是...
During handling of the above exception, another exception occurred:
TypeError: Input 'strides' of 'StridedSlice' Op has type int32 that does not match type int64 of argument 'begin'.
我不知道如何解决这个问题。所以我采取的一种方法是将 labels
和 data
的 dtype
更改为 int64
...
# Target label used for training
labels = np.array(data[label], dtype=np.int64)
# Reshape target label from (6605,) to (6605, 1)
labels = tf.reshape(labels, shape=[-1, 1])
# Data for training minus the target label.
data = np.array(data.drop(label, axis=1), dtype=np.int64)
但是如果我这样做,我仍然会遇到同样的错误。我该如何解决这个问题?
这个错误似乎是由旧版本的 tensorflow 产生的。我通过使用...
更新了 tensorflowpip3 install tensorflow --upgrade
这消除了 int64
错误。似乎在转换 long 数据类型时出现问题,例如旧版本中的 int64
。
更新后,由于张量的形状,我得到了不同的错误...
Shape must be rank 1 but is rank 2 for 'strided_slice' (op: 'StridedSlice') with input shapes: [6605,1], [1,16], [1,16], [1].
但这是另一个问题。
请注意,该错误指出有关整数、int64 和 int32 的 ValueError,因此有问题的转换应该是 int 而不是 float。
我在代码库中遇到过类似的情况,无法更新 tensorflow, 我正在生成一个导致 int 类型 ValueError 的索引。
如果无法升级 tensorflow 的版本,您可以转换为 int32,例如:
new_var = tf.cast(old_var, tf.int32)
如果您检查发生错误的确切行,您应该找到罪魁祸首,施放它,它应该可以工作。此解决方案应该适用于 int 和 float 铸造(使用 tf.float32)。