如何使张量流打印完全回溯



我在tensorflow中遇到了一个异常,它不会停止程序,但会在te输出中弹出,异常发生后一切都被破坏了。但回溯并没有真正将问题追溯到我可以修复的有用点。只是一些模糊的索引错误。

下面是我的脚本

def make_model(layers , model_type):
tf.compat.v1.reset_default_graph()
convnet = input_data(shape=[None,STANDARDIZED_IMAGE_SIZE,STANDARDIZED_IMAGE_SIZE, 1], name='input')
convnet = conv_2d(convnet, 32, 5, activation='relu')
convnet = max_pool_2d(convnet, 5)
convnet = conv_2d(convnet, 64, 5, activation='relu')
convnet = max_pool_2d(convnet, 5)
convnet = conv_2d(convnet, 128, 5, activation='relu')
convnet = max_pool_2d(convnet, 5)
convnet = conv_2d(convnet, 64, 5, activation='relu')
convnet = max_pool_2d(convnet, 5)
convnet = conv_2d(convnet, 32, 5, activation='relu')
convnet = max_pool_2d(convnet, 5)
convnet = fully_connected(convnet, 1024, activation='relu')
convnet = dropout(convnet, 0.8)
convnet = fully_connected(convnet, 2, activation='softmax')
convnet = regression(convnet, optimizer='adam', learning_rate=LR, loss='categorical_crossentropy', name='targets')
model = tflearn.DNN(convnet, tensorboard_dir=actual_dir, tensorboard_verbose=3)
model.save(actual_dir+"/"+MODEL_NAME)
return model

def find_model_accuracy(model , test_features, test_labels):
test_results = {}
test_results['model'] = model.evaluate(test_features, test_labels)
print(f" Accuracy: {test_results}")
X = np.array([i[0] for i in train]).reshape(-1,STANDARDIZED_IMAGE_SIZE,STANDARDIZED_IMAGE_SIZE,1)
Y = [i[1] for i in train]
test_x = np.array([i[0] for i in test]).reshape(-1,STANDARDIZED_IMAGE_SIZE,STANDARDIZED_IMAGE_SIZE,1)
test_y = [i[1] for i in test]


model_1 = make_model(layers , 1)
print(" model made ")
model_1.fit({'input': X}, {'targets': Y},validation_set=({'input': test_x}, {'targets': test_y}),  n_epoch=1 , snapshot_step=500, show_metric=True, run_id=MODEL_NAME)
print(" model trained ")
acc1 = find_model_accuracy(model_1 , test_y, test_x)
print("-------------------------------------")
print(X.ndim)
print(X.shape)
print("-------------------------------------")
print(test_x.ndim)
print(test_x.shape)
print("-------------------------------------")

其产生该输出。

Training Step: 12  | total loss: 0.62046 | time: 22.450s
| Adam | epoch: 001 | loss: 0.62046 - acc: 0.6685 -- iter: 768/830
Training Step: 13  | total loss: 0.65215 | time: 25.264s
| Adam | epoch: 001 | loss: 0.65215 - acc: 0.6431 | val_loss: 0.62987 - val_acc: 0.6058 -- iter: 830/830
--
Exception in thread Thread-20:
Traceback (most recent call last):
File "C:Userstgmjackanaconda3libthreading.py", line 973, in _bootstrap_inner
self.run()
File "C:Userstgmjackanaconda3libthreading.py", line 910, in run
self._target(*self._args, **self._kwargs)
File "C:Userstgmjackanaconda3libsite-packagestflearndata_flow.py", line 187, in fill_feed_dict_queue
data = self.retrieve_data(batch_ids)
File "C:Userstgmjackanaconda3libsite-packagestflearndata_flow.py", line 222, in retrieve_data
utils.slice_array(self.feed_dict[key], batch_ids)
File "C:Userstgmjackanaconda3libsite-packagestflearnutils.py", line 197, in slice_array
return [x[start] for x in X]
File "C:Userstgmjackanaconda3libsite-packagestflearnutils.py", line 197, in <listcomp>
return [x[start] for x in X]
IndexError: index 2 is out of bounds for axis 0 with size 2
model trained 
Accuracy: {'model': [0.0]}
-------------------------------------
4
(830, 150, 150, 1)
-------------------------------------
4
(208, 150, 150, 1)
-------------------------------------

我之所以说它在异常后坏了,是因为它在拟合时达到了约0.6的精度,但在评估时达到了0。

在安装期间,我如何打印索引错误的完整回溯

ps(

我正在使用tensorflow 2.9.1,在一个jupyter笔记本上。

我的数据每次都被很好地打乱了,所以这不仅仅是一个糟糕的数据片段。

如果你想打印完整的堆栈跟踪,调用这个命令就可以了:

tf.debugging.disable_traceback_filtering()

用于重新激活过滤回:

tf.debugging.enable_traceback_filtering()

关于这个错误,您在某个地方用索引2对numpy数组进行了索引。但是第一个维度上的数组的大小为2(因此只接受索引0和1(。

在这里,您可以找到在tensorflow中调试的其他有用信息。