tfrecord开启多线程
关于什么时候使用在tfrecord文件方面上使用多线程问题,tensorflow封装了一套对tfrecord多进程读写消费逻辑,训练进程与数据准备进程分离。最大限度的加快了训练过程。对于大量的数据来说使用tfrecord文件是再好不过了。之前初学使用过直接把所用数据都放进去训练,内存直接MEMORY ERROR。在使用tfrecord时有时候也会报错。
Process finished with exit code -1073741819 (0xC0000005)
像这样的错误原因可以在这里https://blog.csdn.net/tz_zs/article/details/77427842找到答案。
这个错在百度上找了很多也没有解决,相对于来说减少batch_size也许会解决这个问题,这只是当你的batch_size确实比较大的时候是比较有用的,那么你设置的batch_size并不太大但是仍然会这样报错,就要考虑下多线程了,对于多线程的概念自己百度。
多线程的使用主要是用来处理程序“在一部分上会阻塞”,“在另一部分上需要持续运行”的场合。一般是根据需求,可以用多线程,事件触发,callback等方法达到。但是有一些方法是只有多线程能办到的就只有用多线程或者多进程来完成。
举个简单的例子,能理解就行。假设有这样一个程序,
1会不停的处理收到的所有TCP请求。对于每个TCP请求做不同的操作。不能有遗漏
2有很多特定的请求会向一个服务器发送存储的数据,或者是等待用户输入。
来看看。第1个要求很简单。用个while循环就搞定了。但第2个特性呢。一旦在等待用户输入或者是连接服务器时,程序会“阻塞”一段时间,这一段时间内就无法处理其他的TCP请求了。
所以可以利用多线程,每个线程处理不同的TCP请求。这样程序就不会“阻塞”掉了。
我尝试开启线程后发现解决了许多天解决不了的问题。
未完待续..........