问题描述:
在使用yolov5训练自己模型,或者复现原文的数据时,一不小心程序断了,或者是使用服务器的时候断开连接了。这该怎么办?我也遇到了这,最开始是直接把【train.py】里面的这个参数
【--resume】的default设置成【True】,但是出现了下面的问题。这可把我愁坏了,还卡我好几天~~~
; 问题解决
经过一番请教大佬,得到了这个解决办法。给点赞!!!也是浅浅记录下。
首先,先找到你的训练模型文件,一般为【 runs/train/exp/weights】目录下,该目录下会有这两个文件。
然后,按照下面的两个操作之一进行操作,就可以解决了!!!
①将【 train.py】里面的这个参数【 --resume】的default设置成【 runs/train/exp/weights/last.pt】
②在yolov5的根目录下,也就是【 train.py】文件目录下,使用终端命令输入如下内容
python train.py --resume runs/train/exp/weights/last.pt
这样,问题就解决了,运行起来的效果如下。会接着你断开的程序继续运行~~~
到这,就已经解决了问题。欢迎关注蓝胖胖,咱们一起解决BUG~~~
Original: https://blog.csdn.net/Thebest_jack/article/details/125750008
Author: 蓝胖胖▸
Title: 一步真实解决:AssertionError:‘ERROR :--resume checkpoint does not exist‘
相关阅读1
Title: 如何迭代pandas dataframe的行
How to iterate over rows in a DataFrame in Pandas-DataFrame按行迭代
在对DataFrame进行操作时,我们不可避免的需要逐行查看或操作数据,那么有什么高效、快捷的方法呢?
<span class="hljs-keyword">import pandas <span class="hljs-keyword">as pd
inp = [{<span class="hljs-string">'c1':<span class="hljs-number">10, <span class="hljs-string">'c2':<span class="hljs-number">100}, {<span class="hljs-string">'c1':<span class="hljs-number">11,<span class="hljs-string">'c2':<span class="hljs-number">110}, {<span class="hljs-string">'c1':<span class="hljs-number">12,<span class="hljs-string">'c2':<span class="hljs-number">120}]
df = pd.DataFrame(inp)
<span class="hljs-keyword">for x <span class="hljs-keyword">in xrange(len(df.index)):
<span class="hljs-keyword">print df[<span class="hljs-string">'c1'].iloc[x]</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>
这似乎是最常规的办法,而且可以在迭代的过程中对DataFrame进行操作。
<span class="hljs-keyword">for i, row in enumerate(df.<span class="hljs-keyword">values):
<span class="hljs-keyword">index= df.<span class="hljs-keyword">index[i]
<span class="hljs-keyword">print row</span></span></span></span></span>
df.values 是 numpy.ndarray 类型
这里 i 是index的序号, row是numpy.ndarray类型。
import pandas as pd
inp = [{'c1':10, 'c2':100}, {'c1':11,'c2':110}, {'c1':12,'c2':120}]
df = pd.DataFrame(inp)
for index, row in df.iterrows():
print row['c1'], row['c2']
df.iterrows() 的每次迭代都是一个 tuple
类型,包含了index和每行的数据。
<span class="hljs-keyword">import pandas <span class="hljs-keyword">as pd
inp = [{<span class="hljs-string">'c1':<span class="hljs-number">10, <span class="hljs-string">'c2':<span class="hljs-number">100}, {<span class="hljs-string">'c1':<span class="hljs-number">11,<span class="hljs-string">'c2':<span class="hljs-number">110}, {<span class="hljs-string">'c1':<span class="hljs-number">12,<span class="hljs-string">'c2':<span class="hljs-number">120}]
df = pd.DataFrame(inp)
<span class="hljs-keyword">for row <span class="hljs-keyword">in df.itertuples():
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>
itertuples 返回的是一个 pandas.core.frame.Pandas 类型。
普遍认为itertuples 比 iterrows的速度要快。
zip 和 itertools.izip的用法是相似的, 但是zip返回一个list,而izip返回一个迭代器。 如果数据量很大,zip的性能不及izip
<span class="hljs-keyword">from itertools <span class="hljs-keyword">import izip
<span class="hljs-keyword">import pandas <span class="hljs-keyword">as pd
inp = [{<span class="hljs-string">'c1':<span class="hljs-number">10, <span class="hljs-string">'c2':<span class="hljs-number">100}, {<span class="hljs-string">'c1':<span class="hljs-number">11,<span class="hljs-string">'c2':<span class="hljs-number">110}, {<span class="hljs-string">'c1':<span class="hljs-number">12,<span class="hljs-string">'c2':<span class="hljs-number">120}]
df = pd.DataFrame(inp)
<span class="hljs-keyword">for row <span class="hljs-keyword">in izip(df.index, df[<span class="hljs-string">'c1'], df[<span class="hljs-string">'c2']):
<span class="hljs-keyword">print row</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>
import <span class="hljs-built_in">time
<span class="hljs-built_in">from numpy.<span class="hljs-built_in">random import randn
df = pd.DataFrame({<span class="hljs-string">'a': randn(<span class="hljs-number">100000), <span class="hljs-string">'b': randn(<span class="hljs-number">100000)})
time_stat = []
</span></span></span></span></span></span></span>
可以发现在时间花销上, izip > zip > itertuples > enumerate > iterrows > range(index)
Original: https://www.cnblogs.com/bonelee/p/9732761.html
Author: bonelee
Title: 如何迭代pandas dataframe的行
相关阅读2
Title: tensorflow 1.X迁移至tensorflow2 代码写法
把tensorflow 1.X中的代码,迁移到tensorflow2中。一些常见的改写经验。包括sess,tf.placeholder, tf.InteractiveSession(),tf.Session()
tensorflow2相比于tensorflow 1.x版本有较大的变化,且网上现在好多文章的代码都是基于tf1.x版本的,学会简单的转换,帮助我们看代码。
整体来说,tensorflow2更加简洁了。
本文将持续更新中。
当然用tf.compat.v1也能解决部分问题。但是不推荐,毕竟tf2才是未来。
- 1、tf1基于图模式,tf2基于eager模式,tf2对程序员更友好,更像是函数,更方便调试。
- 2、tf2更向keras靠拢,对分布式训练的支持更好。
tf.placeholder
tensorflow 1.x版本中的placeholder,在tf2中已经被取消,在tf2中,可以用tf.keras.Inputs代替。
示例:
tf1中
input_ids = tf.placeholder(dtype=tf.int32, shape=[None])
tf2中,改写为:
input_ids = tf.keras.Input(dtype=tf.int32, shape=[None])
tf.Sess,sess.run
- tensorflow 1.x由于是基于静态图机制(Graph Execution),需要先构造图,然后才真正运行,因此需要用显示调用Session后,才会真正触发计算。对调试代码非常不利。
- tensorflow 2.x默认是基于动态图机制(Eager Execution),就像常规函数一样,调用时就触发计算。对调试代码非常方便。
所以,tf1中session部分代码,可以全部去掉。
示例:
tf1中
sess = tf.InteractiveSession()
sess.run(tf.global_variables_initializer())
tf2中,改写为:
直接不要
具体例子1:
import tensorflow as tf
import numpy as np
input_ids = tf.placeholder(dtype=tf.int32, shape=[None])
embedding = a = np.asarray([[0.1, 0.2, 0.3], [1.1, 1.2, 1.3], [2.1, 2.2, 2.3], [3.1, 3.2, 3.3], [4.1, 4.2, 4.3]])
input_embedding = tf.nn.embedding_lookup(embedding, input_ids)
sess = tf.InteractiveSession()
sess.run(tf.global_variables_initializer())
print(sess.run(input_embedding, feed_dict={input_ids: [1, 2, 3, 0, 3, 2, 1]}))
改写tf2代码:
import tensorflow as tf
import numpy as np
input_ids = tf.keras.Input(dtype=tf.int32, shape=[None])
embedding = a = np.asarray([[0.1, 0.2, 0.3], [1.1, 1.2, 1.3], [2.1, 2.2, 2.3], [3.1, 3.2, 3.3], [4.1, 4.2, 4.3]])
input_ids = np.array([1, 2, 3, 0, 3, 2, 1])
input_embedding = tf.nn.embedding_lookup(embedding, input_ids)
print(input_embedding)
可见,tf2代码简洁明了不少,多动手试试,就能体会。
深刻体会tf2带来的变革。
1、体会静态图和动态图的差别
2、体会对分布式训练的优化(未来写)
3、体会模型训练的便利性(直接用compile等,keras的便利性。)
Original: https://blog.csdn.net/weixin_43290383/article/details/121896799
Author: 浪漫的数据分析
Title: tensorflow 1.X迁移至tensorflow2 代码写法
相关阅读3
Title: virtualenv创建虚拟环境
1.1 virtualenv定义
建立一个隔离的python环境,激活它,就使用这个环境里的包、python等。
1.2 virtualenv安装
pip install virtualenv -i https://pypi.tuna.tsinghua.edu.cn/simple
安装过程中出现例如dislib等包导致的失败,可运行如下命令安装:
pip install virtualenv -i https://pypi.tuna.tsinghua.edu.cn/simple --ignore-installed distlib
2.1 清清爽爽新环境
virtualenv 路径
以这种方式创建环境将不包含系统的python包,新的环境里面只有pip、setuptools和wheel这些包,则许多包要用pip重新安装。
2.2 ubuntu中指定python版本
例如,若需指定使用系统中python3.6版本,首先找到python3.6安装在哪里(默认安装在 /usr/bin/python3.6
,也可使用命令 whereis python3.6
查看pyton3.6 安装路径 )
virtualenv -p /usr/bin/python3.6 myenv
2.3 windows中指定python版本
中间的python3.6需要自己先安装
virtualenv -p D:\\software1\\python36\\python.exe myenv
source myenv/bin/activate
cd myenv/Scripts
activate
deactivate
整深度学习,通常情况下,需要的基础包如下(借鉴yolov3):
matplotlib>=3.2.2
numpy>=1.18.5
opencv-python>=4.1.2
Pillow>=7.1.2
PyYAML>=5.3.1
requests>=2.23.0
scipy>=1.4.1
torch>=1.7.0
torchvision>=0.8.1
tqdm>=4.41.0
tensorboard>=2.4.1
wandb
pandas>=1.1.4
seaborn>=0.11.0
thop
可在本地新建一个 requirements.txt
,复制粘贴上面内容并保存,在激活上述虚拟环境的情况下,使用命令 pip install -r requirements.txt
安装即可,建议使用pip镜像源。
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
Original: https://blog.csdn.net/weixin_45377629/article/details/123979396
Author: 寻找永不遗憾
Title: virtualenv创建虚拟环境

tensorflow2.0-keras-LaneNet车道线检测模型复现细节总结

这可能是神经网络 LeNet-5 最详细的解释了!

【基音频率】基音matlab基音频率计算【含Matlab源码 1384期】

Tensorflow – 训练中出现 Nan 值

【人工智能数学基础(三)】数学优化

Spark DataFrame简介(一)

全球及中国摩托车减震器市场产量规模与竞争策略研究报告2021-2027年版

友链推荐

AttributeError: module ‘tensorflow.keras.utils‘ has no attribute image_dataset_from_directory——解决方法

PCL点云库学习笔记 点云的欧式聚类

【笔记】辐射场

PnP算法详解(超详细公式推导)

基于bert的命名实体识别任务(一)

配置TensorFlow的cuda环境教程
