预先下载的keras库中神经网络模型指定存放路径及如何上传的问题
在使用keras库中内置的神经网络模型(以下简称网络模型)进行训练的时候,可能需要在每次运行训练文件时候都要重新从keras库中下载网络模型,尤其是在服务器终端运行的时候,每次下载的速度都极其慢,而且还可能会多次报ConnectionResetError等错误,从而在训练模型时候造成一系列不必要的麻烦,为此我们可以预先将要用到的网络模型离线下载,然后将该模型放置到指定的路径下,这样以后执行training训练文件的时候就不会每次都先下载网络模型了,而是直接可以使用我们预先放置好的网络模型来进行训练,本文分为两个大部分,前半部分主要讲如何找到指定的网络模型存放路径,余下部分介绍如何将下载好的网络模型上传到服务器终端的指定位置。
Index目录索引
- 如何找到指定的网络模型存放路径(一般方法)
- 如何找到指定的网络模型存放路径(快速方法)
- 如何将下载好的网络模型上传到服务器终端的指定位置
- Reference参考
如何找到指定的网络模型存放路径(一般方法)
本部分将介绍如何找到指定的网络模型存放路径的一般通用方法,所谓授人以鱼不如授人以渔也,如果想快速找到指定网络模型的存放路径,可以直接跳转到本文的第二部分——“如何找到指定的网络模型存放路径(快速方法)”进行查看。下面进入本部分的正题:
每次执行训练文件之初在下载网络模型的时候,可能会出现的报错信息如下(这里以DenseNet为例):
Downloading data from https://github.com/keras-team/keras-applications/releases/download/densenet/densenet201_weights_tf_dim_ordering_tf_kernels_notop.h56422528/74836368 [=>............................] - ETA: 2:04:18Traceback (most recent call last):File "DenseNet_Training_my.py", line 92, in <module>model = DenseNet201(include_top=False)File "/usr/local/python3/lib/python3.6/site-packages/keras/applications/__init__.py", line 20, in wrapperreturn base_fun(*args, **kwargs)File "/usr/local/python3/lib/python3.6/site-packages/keras/applications/densenet.py", line 21, in DenseNet201return densenet.DenseNet201(*args, **kwargs)File "/usr/local/python3/lib/python3.6/site-packages/keras_applications/densenet.py", line 339, in DenseNet201**kwargs)File "/usr/local/python3/lib/python3.6/site-packages/keras_applications/densenet.py", line 292, in DenseNetfile_hash='c13680b51ded0fb44dff2d8f86ac8bb1')File "/usr/local/python3/lib/python3.6/site-packages/keras/utils/data_utils.py", line 225, in get_fileurlretrieve(origin, fpath, dl_progress)File "/usr/local/python3/lib/python3.6/urllib/request.py", line 277, in urlretrieveblock = fp.read(bs)File "/usr/local/python3/lib/python3.6/http/client.py", line 449, in readn = self.readinto(b)File "/usr/local/python3/lib/python3.6/http/client.py", line 493, in readinton = self.fp.readinto(b)File "/usr/local/python3/lib/python3.6/socket.py", line 586, in readintoreturn self._sock.recv_into(b)File "/usr/local/python3/lib/python3.6/ssl.py", line 1012, in recv_intoreturn self.read(nbytes, buffer)File "/usr/local/python3/lib/python3.6/ssl.py", line 874, in readreturn self._sslobj.read(len, buffer)File "/usr/local/python3/lib/python3.6/ssl.py", line 631, in readv = self._sslobj.read(len, buffer)
ConnectionResetError: [Errno 104] Connection reset by peer
为了防止此类现象的发生,我们可以将这个要下载的网络模型文件预先下载好,然后上传到指定的文件夹路径下,本文主要是讲解如何查到该指定文件夹。
报错信息是个好东西,你要学会如何从报错信息中发掘出有用的东西来。
首先,根据报错信息中的这些部分:
Downloading data from https://github.com/keras-team/keras-applications/releases/download/densenet/densenet201_weights_tf_dim_ordering_tf_kernels_notop.h5
根据这些信息可以知道需要从哪个地方下载将要使用到的网络模型,我们先把这个网络模型提前下载好,接下来要考虑的就是需要把这个网络模型文件放置到哪个路径下的问题了。
接下来,根据报错信息中的这些内容:
File "/usr/local/python3/lib/python3.6/site-packages/keras/applications/densenet.py", line 21, in DenseNet201return densenet.DenseNet201(*args, **kwargs)
可以通过官方给出的网络模型文件的源代码查看相关信息;
或者你也可以根据training文件即训练网络的文件中最前面调用网络模型这块的相关信息进入查看,比如使用PyCharm这个软件的话就可以直接进入相关封装好的代码中进行查看源代码,以下是training文件中调用网络模型的相关代码:
from keras.applications.densenet import DenseNet201, preprocess_input
我们在PyCharm里点击DenseNet201进入到相应的源代码文件中,可以找到如下的代码块:
@keras_modules_injection
def DenseNet201(*args, **kwargs):return densenet.DenseNet201(*args, **kwargs)
然后再点击densenet进入到官方封装好的网络模型源代码文件中,可以找到如下代码块:
elif blocks == [6, 12, 48, 32]:weights_path = keras_utils.get_file('densenet201_weights_tf_dim_ordering_tf_kernels.h5',DENSENET201_WEIGHT_PATH,cache_subdir='models',file_hash='1ceb130c1ea1b78c3bf6114dbdfd8807')
这部分是用来获取网络模型权重文件的代码,这里调用了get_file() 函数来获取权重文件,我们通过下面的代码可以找到这个函数所在的地方:
from keras.utils.data_utils import get_file
接下来我们就要找到这个函数所在的地方,我们既可以在文件夹中找,也可以在github找,我们可以从官方的Github中找到keras工程,然后顺着keras.utils.data_utils找到代码,我们可以发现地址在这里
(https://github.com/keras-team/keras/blob/master/keras/utils/data_utils.py)
我们找到这个地方,然后找到相应的get_file() 函数所在的代码块:
def get_file(fname,origin,untar=False,md5_hash=None,file_hash=None,cache_subdir='datasets',hash_algorithm='auto',extract=False,archive_format='auto',cache_dir=None):"""Downloads a file from a URL if it not already in the cache.By default the file at the url `origin` is downloaded to thecache_dir `~/.keras`, placed in the cache_subdir `datasets`,and given the filename `fname`. The final location of a file`example.txt` would therefore be `~/.keras/datasets/example.txt`.Files in tar, tar.gz, tar.bz, and zip formats can also be extracted.Passing a hash will verify the file after download. The command lineprograms `shasum` and `sha256sum` can compute the hash.
我们重点注意一下这块代码中的注释部分,该部分提到,这个get_file() 函数会先检查cache缓存中是否有文件,如果没有检测到的话就会从该URL中下载。我们通过注释部分可以看到这个cache的路径在~/.keras
。然后我们通过下面也就是刚才的densenet源代码中的这个代码块:
if blocks == [6, 12, 24, 16]:weights_path = keras_utils.get_file('densenet121_weights_tf_dim_ordering_tf_kernels.h5',DENSENET121_WEIGHT_PATH,cache_subdir='models',file_hash='9d60b8095a5708f2dcce2bca79d332c7')
根据其中的cache_subdir='models'
,我们可以知道这个网络模型的下载路径是在~/.keras/models
,然后我们在终端进入到这个目录:
[**@** ~]$ cd ~/.keras/
[**@** .keras]$ ls
keras.json models
可以看到~/.keras/
这个目录中是有models文件夹的,这个文件夹就是我们刚才离线下载的网络模型文件将要放置的位置,如何上传到服务器终端我们将会在下文中说明。放置进入之后,我们以后执行training训练文件的时候可以看到程序就不会每次都先下载一遍网络模型了。
如何找到指定的网络模型存放路径(快速方法)
分为两种情况,分别适用于Windows和Linux这两种不同操作系统的用户。
情况1:Linux用户
可以参考Keras Documentation (https://keras.io/applications/)
进入该网址之后可以看到如下内容:
Applications
Keras Applications are deep learning models that are made available alongside pre-trained weights.
These models can be used for prediction, feature extraction, and fine-tuning.Weights are downloaded automatically when instantiating a model.
They are stored at ~/.keras/models/.
根据其中的最后一句可以找到网络模型的存放位置,即~/.keras/models/
情况2:Windows用户
直接在本地磁盘找到目录C:\Users\user_name\.keras\models
【注】:其中的user_name是指自己Windows用户的名字。
如何将下载好的网络模型上传到服务器终端的指定位置
首先,在Linux终端服务器中安装上传工具包rz,安装命令如下:
yum install -y lrzsz
需要在root模式下输入此命令进行安装,安装的过程如下:
[**@** ~]$ yum -y install lrzsz
Loaded plugins: fastestmirror, ovl
ovl: Error while doing RPMdb copy-up:
[Errno 13] Permission denied: '/var/lib/rpm/.dbenv.lock'
You need to be root to perform this command.
[**@** ~]$ su root
Password:
su: Authentication failure
[**@** ~]$ su root
Password:
[root@**]# yum -y install lrzsz
Loaded plugins: fastestmirror, ovl
Determining fastest mirrors
epel/x86_64/metalink | 8.2 kB 00:00:00 * base: mirrors.cn99.com* epel: mirrors.tuna.tsinghua.edu.cn* extras: mirrors.tuna.tsinghua.edu.cn* updates: mirror.bit.edu.cn
base | 3.6 kB 00:00:00
cuda | 2.6 kB 00:00:00
epel | 5.3 kB 00:00:00
extras | 2.9 kB 00:00:00
updates | 2.9 kB 00:00:00
(1/8): base/7/x86_64/group_gz | 165 kB 00:00:00
(2/8): epel/x86_64/updateinfo | 1.0 MB 00:00:00
(3/8): extras/7/x86_64/primary_db | 153 kB 00:00:00
(4/8): epel/x86_64/group_gz | 90 kB 00:00:05
(5/8): epel/x86_64/primary_db | 6.9 MB 00:00:18
(6/8): updates/7/x86_64/primary_db | 5.8 MB 00:00:20
cuda/primary_db FAILED 97% [==================================================================================- ] 258 kB/s | 20 MB 00:00:01 ETA
...
(7/8): base/7/x86_64/primary_db | 6.0 MB 00:00:36
(8/8): cuda/primary_db | 423 kB 00:00:05
Resolving Dependencies
--> Running transaction check
---> Package lrzsz.x86_64 0:0.12.20-36.el7 will be installed
--> Finished Dependency ResolutionDependencies Resolved===========================================================================================================================================================================================================================Package Arch Version Repository Size
===========================================================================================================================================================================================================================
Installing:lrzsz x86_64 0.12.20-36.el7 base 78 kTransaction Summary
===========================================================================================================================================================================================================================
Install 1 PackageTotal download size: 78 k
Installed size: 181 k
Downloading packages:
lrzsz-0.12.20-36.el7.x86_64.rpm | 78 kB 00:00:07
Running transaction check
Running transaction test
Transaction test succeeded
Running transactionInstalling : lrzsz-0.12.20-36.el7.x86_64 1/1 Verifying : lrzsz-0.12.20-36.el7.x86_64 1/1 Installed:lrzsz.x86_64 0:0.12.20-36.el7 Complete!
安装好之后,在服务器终端将要上传的路径(就是我们刚才找到的~/.keras/models
这个路径)下输入如下命令:
rz
rz是Linux同Windows进行文件传输的命令,使用的是Zmodem协议。输入该命令后,会弹出一个窗口,选择刚才预先下载好的网络模型文件,点击“打开”按钮就可以开始上传到Linux主机。
如果出现上图,就说明已经成功地将预先下载好的网络模型上传至了指定的路径下。
在上传文件的过程中可能会有小伙伴遇到整个终端全部乱码的情况,出现这种情况的时候不要慌,乱码的原因可能是因为上传的是大文件,此时将刚才的rz
命令改为如下命令即可:
rz -b -e
也就是说在终端中输入rz -b -e
命令即可成功地将网络模型文件上传至指定的路径下。
写到这里,差不多本文就要结束了,如果有问题可以在下方留言区留言交流,这是我的第一篇CSDN博客,如果我的这篇文章帮助了你,那我也会感到很高兴,一个人能走多远,在于与谁同行。
Reference参考
如何找到指定的网络模型存放路径
keras离线下载模型的存储位置
将文件上传到服务器终端
Linux上传文件和下载文件命令行方式
使用rz命令上传文件时终端中出现乱码的解决方法
linux rz命令上传文件出现乱码
预先下载的keras库中神经网络模型指定存放路径及如何上传的问题相关推荐
- 深度学习中神经网络模型压缩的解决办法( flask API、onnx、ncnn在嵌入式、流媒体端口应用)
深度学习中神经网络模型压缩的解决办法( flask API.onnx.ncnn在嵌入式.流媒体端口应用) 1 开发环境的创建 1.1 Conda简介 1.2 miniconda 1.3 conda操作 ...
- 笔记:基于keras的不同神经网络模型Minst手写体识别
基于keras的不同神经网络模型MNIST手写体识别 1.CNN版 1.导入数据 相关库(导入plt是为了看数据集的图) import keras from keras.datasets import ...
- 成功解决keras库中出现AttributeError: ‘str‘ object has no attribute ‘decode‘
成功解决keras库中出现AttributeError: 'str' object has no attribute 'decode' 目录 解决问题 解决思路 解决方法 解决问题 Attribute ...
- 基于Keras的卷积神经网络模型预测--狗的品种识别
基于Keras的卷积神经网络模型预测–狗的品种识别 from sklearn.datasets import load_files from keras.utils import np_utils i ...
- C# 淘宝数据包下载,生成csv格式。可直接通过淘宝助理上传到淘宝店铺
核心代码: #region 打包下载/// <summary>/// 淘宝数据包下载,生成csv格式.可直接通过淘宝助理上传到淘宝店铺/// </summary>/// < ...
- 在CAD制图中,如何指定红线路径?
我们在进行CAD制图过程中,如何指定红线路径呢?"红线"在CAD中中为了标明构件的具体尺寸虚设的,那么该如何在CAD中指定红线路径呢?下面来教你操作方法. 1.运行CAD制图工具进 ...
- 采用keras深度学习框架搭建卷积神经网络模型实现垃圾分类,基于树莓派上进行实时视频流的垃圾识别源代码
一.项目概述 简介:该垃圾分类项目主要在于对各种垃圾进行所属归类,本次项目采用keras深度学习框架搭建卷积神经网络模型实现图像分类,最终移植在树莓派上进行实时视频流的垃圾识别. 前期:主要考虑PC端 ...
- 【深度学习】Keras自建神经网络模型实现133种狗的种类识别(记录笔记)
〇.内容说明 主体部分资料来源于: 1.[深度学习图像识别课程]毕业项目:狗狗种类识别(2)代码实现 2.项目:实现一个狗品种识别算法App 3.Kaggle相关比赛:Dog Breed Identi ...
- crt中 新建的连接存储在哪_SecureCRT上传和下载文件(下载默认目录)
SecureCR 下的文件传输协议有ASCII .Xmodem .Ymodem .Zmodem ASCII:这是最快的传输协议,但只能传送文本文件. Xmodem:这种古老的传输协议速度较慢,但由于使 ...
最新文章
- GVIM的使用(动图指导,全网首发)
- 【DIY】手把手教你 DIY 最便宜的 arduino 温湿度计,详细图文视频教程
- python在线翻译脚本_python写一个翻译的小脚本
- PEP 20 -- The Zen of Python(Python之禅)
- ember.js mysql_用AWS部署ember.jspadrino应用系列之一
- js模仿f11全屏_JS实现全屏预览F11功能的示例代码
- Makefile规则介绍
- java 1.8.0 安全_RedHat安全更新修复OpenJDK1.8.0版本漏洞
- tf.nn.rnn_cell.DropoutWrapper用法细节案例1
- React 一些相关的技巧
- 并发编程(十四)—— ScheduledThreadPoolExecutor 实现原理与源码深度解析 之DelayWorkQueue...
- c语言实验报告大气,dsp实验报告心得体会
- cad断点快捷键_CAD如何打断?CAD打断点和CAD打断命令操作方法
- 博士申请 | 澳门科技大学李楠楠老师组招收2022秋季入学全奖博士生
- mybatis 大于等于小于等于
- python在每个字符后加上逗号_Python将逗号添加到数字字符串中
- java基础案例3-2银行存取款
- 小楷的由来,小楷适合写小字
- vue 生命周期的详解
- 机器学习-Sklearn-02(随机森林)