簡體   English   中英

InvalidArgumentError:訓練 model 時圖形執行錯誤

[英]InvalidArgumentError: Graph execution error while training model

我正在做一個個人項目,我使用計算機視覺和回溯算法來解決數獨難題。 當我嘗試在新計算機上設置項目時,突然彈出此錯誤。 這是我為 CV 部分訓練 model 的文件。

from tabnanny import verbose
from turtle import pu
import numpy
import cv2
import matplotlib.pyplot as plot
from keras.models import model_from_json


json_file =open('model/model.json', 'r')
loaded_model_json = json_file.read()
json_file.close()
loadedModel = model_from_json(loaded_model_json)
loadedModel.load_weights('model/model.h5')
print("Loaded saved model from disk.")

def predictNumber(image):
    imageResize = cv2.resize(image,(28,28))
    imageResizeCopy = imageResize.reshape(1, 1, 28, 28)
    #loadedModelPred = loadedModel.predict_classes(imageResizeCopy, verbose=0)
    loadedModelPred = numpy.argmax(loadedModel.predict(imageResizeCopy), axis=1)
    return loadedModelPred[0]

def extract(puzzle):
    puzzle = cv2.resize(puzzle, (450,450))

    grid = numpy.zeros([9,9])
    for i in range(9):
        for j in range(9): 
            image = puzzle[i*50:(i+1)*50,j*50:(j+1)*50]
            if image.sum()>25000:
                grid[i][j] = predictNumber(image)
            else:
                grid[i][j] =0;
    return grid.astype(int)

上面的代碼塊是顯然會引發以下錯誤的代碼的一部分。

2022-09-17 21:29:46.532 Uncaught app exception
Traceback (most recent call last):
  File "C:\Users\kvnka\AppData\Roaming\Python\Python310\site-packages\streamlit\runtime\scriptrunner\script_runner.py", line 556, in _run_script
    exec(code, module.__dict__)
  File "C:\Users\kvnka\OneDrive - Trinity College Dublin\GitHub\sudoku-solver\app.py", line 27, in <module>
    grid = numberExtract.extract(image)
  File "C:\Users\kvnka\OneDrive - Trinity College Dublin\GitHub\sudoku-solver\cv\numberExtract.py", line 31, in extract
    grid[i][j] = predictNumber(image)
  File "C:\Users\kvnka\OneDrive - Trinity College Dublin\GitHub\sudoku-solver\cv\numberExtract.py", line 20, in predictNumber
    loadedModelPred = numpy.argmax(loadedModel.predict(imageResizeCopy), axis=1)
  File "C:\Users\kvnka\AppData\Roaming\Python\Python310\site-packages\keras\utils\traceback_utils.py", line 70, in error_handler
    raise e.with_traceback(filtered_tb) from None
  File "C:\Users\kvnka\AppData\Roaming\Python\Python310\site-packages\tensorflow\python\eager\execute.py", line 54, in quick_execute
    tensors = pywrap_tfe.TFE_Py_Execute(ctx._handle, device_name, op_name,
tensorflow.python.framework.errors_impl.InvalidArgumentError: Graph execution error:

Detected at node 'sequential_1/max_pooling2d_1/MaxPool' defined at (most recent call last):
    File "C:\Program Files\Python310\lib\threading.py", line 973, in _bootstrap
      self._bootstrap_inner()
    File "C:\Program Files\Python310\lib\threading.py", line 1016, in _bootstrap_inner
      self.run()
    File "C:\Program Files\Python310\lib\threading.py", line 953, in run
      self._target(*self._args, **self._kwargs)
    File "C:\Users\kvnka\AppData\Roaming\Python\Python310\site-packages\streamlit\runtime\scriptrunner\script_runner.py", line 295, in _run_script_thread
      self._run_script(request.rerun_data)
    File "C:\Users\kvnka\AppData\Roaming\Python\Python310\site-packages\streamlit\runtime\scriptrunner\script_runner.py", line 556, in _run_script
      exec(code, module.__dict__)
    File "C:\Users\kvnka\OneDrive - Trinity College Dublin\GitHub\sudoku-solver\app.py", line 27, in <module>
      grid = numberExtract.extract(image)
    File "C:\Users\kvnka\OneDrive - Trinity College Dublin\GitHub\sudoku-solver\cv\numberExtract.py", line 31, in extract
      grid[i][j] = predictNumber(image)
    File "C:\Users\kvnka\OneDrive - Trinity College Dublin\GitHub\sudoku-solver\cv\numberExtract.py", line 20, in predictNumber
      loadedModelPred = numpy.argmax(loadedModel.predict(imageResizeCopy), axis=1)
    File "C:\Users\kvnka\AppData\Roaming\Python\Python310\site-packages\keras\utils\traceback_utils.py", line 65, in error_handler
      return fn(*args, **kwargs)
    File "C:\Users\kvnka\AppData\Roaming\Python\Python310\site-packages\keras\engine\training.py", line 2344, in predict
      tmp_batch_outputs = self.predict_function(iterator)
    File "C:\Users\kvnka\AppData\Roaming\Python\Python310\site-packages\keras\engine\training.py", line 2131, in predict_function
      return step_function(self, iterator)
    File "C:\Users\kvnka\AppData\Roaming\Python\Python310\site-packages\keras\engine\training.py", line 2117, in step_function
      outputs = model.distribute_strategy.run(run_step, args=(data,))
    File "C:\Users\kvnka\AppData\Roaming\Python\Python310\site-packages\keras\engine\training.py", line 2105, in run_step
ras\engine\sequential.py", line 412, in call
      return super().call(inputs, training=training, mask=mask)
    File "C:\Users\kvnka\AppData\Roaming\Python\Python310\site-packages\keras\engine\functional.py", line 510, in call
      return self._run_internal_graph(inputs, training=training, mask=mask)
    File "C:\Users\kvnka\AppData\Roaming\Python\Python310\site-packages\keras\engine\functional.py", line 667, in _run_interras\engine\sequential.py", line 412, in call
      return super().call(inputs, training=training, mask=mask)
    File "C:\Users\kvnka\AppData\Roaming\Python\Python310\site-packages\keras\engine\functional.py", line 510, in call            return self._run_internal_graph(inputs, training=training, mask=mask)
    File "C:\Users\kvnka\AppData\Roaming\Python\Python310\site-packages\keras\engine\functional.py", line 667, in _run_internal_graph
      outputs = node.layer(*args, **kwargs)
    File "C:\Users\kvnka\AppData\Roaming\Python\Python310\site-packages\keras\utils\traceback_utils.py", line 65, in error_handler
      return fn(*args, **kwargs)
    File "C:\Users\kvnka\AppData\Roaming\Python\Python310\site-packages\keras\engine\base_layer.py", line 1107, in __call__       outputs = call_fn(inputs, *args, **kwargs)
    File "C:\Users\kvnka\AppData\Roaming\Python\Python310\site-packages\keras\utils\traceback_utils.py", line 96, in error_handler
      return fn(*args, **kwargs)    File "C:\Users\kvnka\AppData\Roaming\Python\Python310\site-packages\keras\layers\pooling\base_pooling2d.py", line 84, in call
      outputs = self.pool_function(
Node: 'sequential_1/max_pooling2d_1/MaxPool'
Default MaxPoolingOp only supports NHWC on device type CPU
         [[{{node sequential_1/max_pooling2d_1/MaxPool}}]] [Op:__inference_predict_function_290]

我對導致此錯誤的原因有點無能為力。

問題在於:

imageResizeCopy = imageResize.reshape(1, 1, 28, 28)

NHWC代表(n_samples, height, width, channels)但您正在以通道優先格式(n_samples, channels, height, width)重塑圖像。

順便說一句,PyTorch 通常使用 Channel first,而 TensorFlow 的默認格式是 channel last。 你只需要相應地重塑你的形象。

您想要獲得這樣的形狀: (1, 28, 28, 1)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM