操作的类型为int32,与int64类型不匹配

时间:2017-11-10 04:34:59

标签: python-3.x machine-learning tensorflow neural-network tflearn

我正在尝试使用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:张量转换请求dtype int64 for Tensor with dtype int32:'Tensor(“strided_slice / stack_4:0”,shape =(1,),dtype = int32)'

第二个错误是......

  

在处理上述异常期间,发生了另一个异常:

     

TypeError:输入'strides'的'StridedSlice'Op的类型为int32,与参数'begin'的int64类型不匹配。

我无法弄清楚如何解决这个问题。因此,我采取的一种方法是将dtypelabels的{​​{1}}更改为data ...

int64

但如果我这样做,我仍会得到同样的错误。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

请注意,该错误指出了有关整数int64和int32的ValueError,因此所讨论的转换应该是int而不是float。

我在代码库中遇到过类似的情况,即无法更新张量流, 我正在生成导致int类型ValueError的索引。

如果无法升级tensorflow的版本,则可以强制转换为int32,例如:

new_var = tf.cast(old_var,tf.int32)

如果检查准确的行,就会发生错误,您应该找到罪魁祸首,将其抛弃,它应该可以工作。此解决方案应适用于int和float转换(使用tf.float32)。

答案 1 :(得分:0)

此错误似乎是由较早的tensorflow构建产生的。我使用...

更新了tensorflow
pip3 install tensorflow --upgrade

这删除了int64错误。似乎在旧版本中投射 long 数据类型(例如int64)存在问题。

更新后,由于张量的形状,我得到了不同的错误......

  

形状必须是等级1,但是对于strided_slice'是等级2。 (op:' StridedSlice')输入形状:[6605,1],[1,16],[1,16],[1]。

但这是另一个问题。