基于深度学习的中文点选验证码识别

https://blog.csdn.net/aaronjny/article/details/109732693 参考这篇博文进行基于深度学习的中文点选验证码的识别,组织数据的时候,也就是利用create_dataset()函数生成data.json文件时,我的正负样本数据的长度是不一样的,然后修改配置文件换成我的data.json文件,没法开始训练,训练了一个epoch就不动了。

我的json文件:正样本的个数是1,负样本的个数是2

[
  1,
  "D:\\python\\pythonProject_DP\\correct_words\\不_270_1.jpg",
  "D:\\python\\pythonProject_DP\\gen_words\\不_270_1.jpg"
],
[
  0,
  "D:\\python\\pythonProject_DP\\correct_words\\不_270_1.jpg",
  "D:\\python\\pythonProject_DP\\gen_words\\甩_270_2.jpg"
],
[
  0,
  "D:\\python\\pythonProject_DP\\correct_words\\不_270_1.jpg",
  "D:\\python\\pythonProject_DP\\gen_words\\糖_270_0.jpg"
]


训练的样子

img

@笔墨留年

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
首先,根据您提供的json文件格式,每个样本应该是一个数组或字典,而不是一段字符串。所以你需要将json文件改写成如下格式:

[
  {"label": 1,
   "correct_img_path": "D:\\python\\pythonProject_DP\\correct_words\\不_270_1.jpg",
   "generated_img_path": "D:\\python\\pythonProject_DP\\gen_words\\不_270_1.jpg"已黑化的小白   },
  {"label": 0,
   "correct_img_path": "D:\\python\\pythonProject_DP\\correct_words\\不_270_1.jpg",
   "generated_img_path": "D:\\python\\pythonProject_DP\\gen_words\\甩_270_2.jpg"已黑化的小白   },
  {"label": 0,
   "correct_img_path": "D:\\python\\pythonProject_DP\\correct_words\\不_270_1.jpg",
   "generated_img_path": "D:\\python\\pythonProject_DP\\gen_words\\糖_270_0.jpg"已黑化的小白   }
]

其次,在config.py文件中,您需要修改以下几个选项来适应新的数据集:

class Config:
    # ...
    json_path = 'data.json' # 修改为您的json文件路径
    train_n = 100  # 修改为您的训练集长度
    val_n = 20  # 修改为您的验证集长度
    batch_size = 10  # 修改为您的batch_size大小
    # ...

然后,对于长度不同的正负样本数据,您可以使用numpy的repeat函数将正样本数据复制到与负样本数量相同的长度,例如:

import numpy as np

correct_data = np.array([...])  # 正样本数据
negative_data = np.array([...])  # 负样本数据

if len(correct_data) < len(negative_data):
    repeated_correct_data = np.repeat(correct_data, len(negative_data) // len(correct_data), axis=0)
    remaining_correct_data = correct_data[:len(negative_data) % len(correct_data)]
    final_correct_data = np.concatenate((repeated_correct_data, remaining_correct_data), axis=0)
    final_data = np.concatenate((positive_data, negative_data), axis=0)
else:
    final_data = np.concatenate((positive_data[:len(negative_data)], negative_data), axis=0)

最后,如果问题仍未解决,请检查您的数据格式、路径和代码实现等。如果需要,您可以在这里提供更多的细节或代码片段,以便我可以更好地帮助您解决问题。
如果我的回答解决了您的问题,请采纳!

引用chatGPT作答,根据您提供的信息,您的数据集中正负样本的数量是不同的。这可能会导致模型在训练时出现问题。建议您通过增加负样本的数量来平衡数据集。您可以通过使用数据增强技术来生成更多的负样本,例如旋转、缩放、裁剪等。此外,您还可以尝试使用更多的正样本来增加数据集的规模。

此外,在您提供的JSON文件中,每个样本似乎没有使用字典进行组织。您可以尝试使用以下代码来组织数据集:

{
    "data": [
        {"label": 1, "image1_path": "D:\\python\\pythonProject_DP\\correct_words\\不_270_1.jpg", "image2_path": "D:\\python\\pythonProject_DP\\gen_words\\不_270_1.jpg"},
        {"label": 0, "image1_path": "D:\\python\\pythonProject_DP\\correct_words\\不_270_1.jpg", "image2_path": "D:\\python\\pythonProject_DP\\gen_words\\甩_270_2.jpg"},
        {"label": 0, "image1_path": "D:\\python\\pythonProject_DP\\correct_words\\不_270_1.jpg", "image2_path": "D:\\python\\pythonProject_DP\\gen_words\\糖_270_0.jpg"}
    ]
}

请确保在生成数据集时,您使用的数据集格式与您在配置文件中指定的格式相同。如果数据集格式不正确,模型将无法正确加载数据集并训练。如果问题仍然存在,请尝试检查您的代码,以查看是否存在其他错误。