我正在尝试使用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类型不匹配。
我无法弄清楚如何解决这个问题。因此,我采取的一种方法是将dtype
和labels
的{{1}}更改为data
...
int64
但如果我这样做,我仍会得到同样的错误。我该如何解决这个问题?
答案 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构建产生的。我使用...
更新了tensorflowpip3 install tensorflow --upgrade
这删除了int64
错误。似乎在旧版本中投射 long 数据类型(例如int64
)存在问题。
更新后,由于张量的形状,我得到了不同的错误......
形状必须是等级1,但是对于strided_slice'是等级2。 (op:' StridedSlice')输入形状:[6605,1],[1,16],[1,16],[1]。
但这是另一个问题。