【问题标题】:tensorflow python framework.errors_impl.UnimplementedError: Graph execution error:tensorflow python framework.errors_impl.UnimplementedError:图执行错误:
【发布时间】:2022-06-13 20:37:52
【问题描述】:

在我的 python 程序中执行 model.fit() 行时遇到问题。执行时出现以下错误。 (对不起格式不好,我是新来的)。我不知道,我到底在哪里弄乱了代码

非常感谢您的建议!

*2022-05-23 22:30:40.647915:W tensorflow/core/framework/op_kernel.cc:1722] OP_REQUIRES 在 cast_op.cc:121 失败:未实现:不支持将字符串转换为浮点数 回溯(最近一次通话最后): 文件“C:/Users/user/Technical/CNNFaceDetector/main.py”,第 73 行,在 model.fit(x_train_images, y_train_labels, epochs=3, 文件“C:\Users\user\miniconda3\lib\site-packages\keras\engine\training.py”,第 1184 行,适合 tmp_logs = self.train_function(迭代器) 文件“C:\Users\user\miniconda3\lib\site-packages\tensorflow\python\util\traceback_utils.py”,第 153 行,在 error_handler 从无提高 e.with_traceback(filtered_tb) 文件“C:\Users\user\miniconda3\lib\site-packages\tensorflow\python\eager\execute.py”,第 54 行,在 quick_execute 张量 = pywrap_tfe.TFE_Py_Execute(ctx._handle, device_name, op_name, tensorflow.python.framework.errors_impl.UnimplementedError:图执行错误:

在定义的节点“sparse_categorical_crossentropy/Cast”处检测到(最近一次调用最后一次): 文件“C:/Users/user/Technical/CNNFaceDetector/main.py”,第 73 行,在 model.fit(x_train_images, y_train_labels, epochs=3, 文件“C:\Users\user\miniconda3\lib\site-packages\keras\engine\training.py”,第 1184 行,适合 tmp_logs = self.train_function(迭代器) 文件“C:\Users\user\miniconda3\lib\site-packages\keras\engine\training.py”,第 853 行,在 train_function 返回 step_function(自我,迭代器) 文件“C:\Users\user\miniconda3\lib\site-packages\keras\engine\training.py”,第 842 行,在 step_function 输出 = model.distribute_strategy.run(run_step, args=(data,)) 文件“C:\Users\user\miniconda3\lib\site-packages\keras\engine\training.py”,第 835 行,在 run_step 输出 = model.train_step(数据) 文件“C:\Users\user\miniconda3\lib\site-packages\keras\engine\training.py”,第 788 行,在 train_step 损失 = self.compiled_loss( 调用中的文件“C:\Users\user\miniconda3\lib\site-packages\keras\engine\compile_utils.py”,第 201 行 loss_value = loss_obj(y_t, y_p, sample_weight=sw) 调用中的文件“C:\Users\user\miniconda3\lib\site-packages\keras\losses.py”,第 141 行 损失 = call_fn(y_true, y_pred) 文件“C:\Users\user\miniconda3\lib\site-packages\keras\losses.py”,第 245 行,调用中 返回 ag_fn(y_true, y_pred, **self._fn_kwargs) 文件“C:\Users\user\miniconda3\lib\site-packages\keras\losses.py”,第 1737 行,在 sparse_categorical_crossentropy y_true = tf.cast(y_true, y_pred.dtype) 节点:'sparse_categorical_crossentropy/Cast' 不支持将字符串转换为浮点数 [[{{node sparse_categorical_crossentropy/Cast}}]] [Op:__inference_train_function_783]

IMAGE_SIZE = 48
labels = {'face': 0, 'non-face': 1}

faces_dir = 'Images/face'
non_faces_dir = 'Images/non-face'


def join_label(img, img_type):
    return img_type


x_train_images = []
y_train_labels = []

x_test_images = []
y_test_labels = ['face', 'non-face']


def import_and_create_training_data(img_type, DIRECTORY):
    for img in tqdm(os.listdir(DIRECTORY)):
        img_label = join_label(img, img_type)
        path = os.path.join(DIRECTORY, img)
        img = cv2.imread(path, cv2.IMREAD_COLOR)
        img = cv2.resize(img, (IMAGE_SIZE, IMAGE_SIZE))

        x_train_images.append(np.array(img))
        y_train_labels.append(str(img_label))


import_and_create_training_data(labels.get('face'), faces_dir)
import_and_create_training_data(labels.get('non-face'), non_faces_dir)

# print(len(x_train_images))
# X = np.array(x_train_images)
# X = X/255
# print(X.shape)


model = Sequential()
model.add(tf.keras.layers.Conv2D(16, (3, 3), activation='relu', input_shape=(48, 48, 3)))
model.add(tf.keras.layers.MaxPool2D(pool_size=(3, 3), strides=2, padding='same'))
model.add(Dense(16))
model.add(Dense(2, activation='softmax'))

model.summary()

test_images_dir = 'Images/Test_Images'

for img in tqdm(os.listdir(test_images_dir)):
    path = os.path.join(test_images_dir, img)
    img = cv2.imread(path, cv2.IMREAD_COLOR)
    img = cv2.resize(img, (IMAGE_SIZE, IMAGE_SIZE))

    x_test_images.append(np.array(img))

model.compile(optimizer='adam',
              loss=tf.keras.losses.SparseCategoricalCrossentropy(),
              metrics=['accuracy'])

x_train_images = np.array(x_train_images)
y_train_labels = np.array(y_train_labels)
x_test_images = np.array(x_test_images)
y_test_labels = np.array(y_train_labels)

model.fit(x_train_images, y_train_labels, epochs=3,
          validation_data=(x_test_images, y_test_labels))

【问题讨论】:

    标签: python numpy tensorflow keras training-data


    【解决方案1】:

    我能够使用Cats-vs-Dogs 数据集重现该问题。 错误是由于以下行引起的

    y_train_labels.append(str(img_label)) 
    

    用以下代码行替换上面的行将解决问题

    y_train_labels.append(np.array(img_label))
    

    完整代码请参考gist

    【讨论】:

      猜你喜欢
      • 2022-09-24
      • 2022-07-12
      • 2022-06-18
      • 1970-01-01
      • 1970-01-01
      • 2018-08-22
      • 1970-01-01
      • 2023-01-24
      • 2017-07-28
      相关资源
      最近更新 更多