Jack Huang's Blog


  • 首页

  • 标签

  • 归档

  • 搜索

Docker使用帮助

发表于 2018-10-19 | 更新于 2018-10-20

Docker是一个开放源代码软件项目,让应用程序布署在软件容器下的工作可以自动化进行,借此在Linux操作系统上,提供一个额外的软件抽象层,以及操作系统层虚拟化的自动管理机制。

Docker与传统虚拟机如virtualbox、vmware相比,占用资源少,更加轻便,启动快,更适用于解决软件环境配置难题。

基本概念

  1. 镜像

    Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。

  2. 容器

镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的 类 和 实例 一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。

  1. 仓库

镜像构建完成后,可以很容易的在当前宿主机上运行,但是,如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry 就是这样的服务。

一个 Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。

通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以通过 <仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签。

使用方法

操作镜像

获取镜像

Docker Hub 上有大量的高质量的镜像可以用,使用docker pull命令拉取镜像。

1
2
3
4
// 拉取镜像
$ docker pull ubuntu:16.04
// 以该镜像启动容器
$ docker run -it --rm ubuntu:16.04 bash

docker run 就是运行容器的命令,其参数含义如下:

  • -it:这是两个参数,一个是 -i:交互式操作,一个是 -t 终端。我们这里打算进入 bash 执行一些命令并查看返回结果,因此我们需要交互式终端。
  • –rm:这个参数是说容器退出后随之将其删除。默认情况下,为了排障需求,退出的容器并不会立即删除,除非手动 docker rm。
  • ubuntu:16.04:这是指用 ubuntu:16.04 镜像为基础来启动容器。
  • bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 bash。

列出镜像

1
docker image ls

删除镜像

删除本地镜像格式如下:

1
docker image rm [选项] <镜像1> [<镜像2> ...]

以删除hello-world镜像为例:

1
docker image rm hello-world

操作容器

启动容器

1
2
3
4
// 新建并启动容器
docker run ubuntu:14.04 /bin/echo 'Hello world'
// 启动已终止容器
docker container start

后台运行

1
2
3
4
5
6
7
// 后台运行容器
$ docker run -d ubuntu:17.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"
// 通过 docker container ls 命令来查看容器信息
$ docker container ls

// 通过 docker container logs 命令获取容器的输出信息
$ docker container logs [container ID or NAMES]

终止容器

1
docker container stop

进入容器

在使用 -d 参数时,容器启动后会进入后台。

某些时候需要进入容器进行操作,包括使用 docker attach 命令或 docker exec 命令,推荐大家使用 docker exec 命令。

1
2
3
4
$ docker run -dit ubuntu
$ docker container ls
$ docker exec -i 69d1 bash
$ docker exec -it 69d1 bash

如果从这个 stdin 中 exit,不会导致容器的停止。这就是为什么推荐大家使用 docker exec 的原因。

删除容器

1
2
3
4
5
// 删除一个处于终止状态的容器
$ docker container rm trusting_newton

// 清理所有处于终止状态的容器
docker container prune

参考文献

  1. https://yeasy.gitbooks.io/docker_practice/introduction/what.html
  2. http://www.ruanyifeng.com/blog/2018/02/docker-tutorial.html ,by 阮一峰
  3. https://zh.wikipedia.org/wiki/Docker ,by wikipedia.

Debian_Linux下安装Docker的方法

发表于 2018-10-18

Docker是一个开放源代码软件项目,让应用程序布署在软件容器下的工作可以自动化进行,借此在Linux操作系统上,提供一个额外的软件抽象层,以及操作系统层虚拟化的自动管理机制。

Docker利用Linux核心中的资源分离机制,例如cgroups,以及Linux核心名字空间(name space),来创建独立的软件容器(containers)。这可以在单一Linux实体下运作,避免启动一个虚拟机造成的额外负担。Linux核心对名字空间的支持完全隔离了工作环境中应用程序的视野,包括进程树、网上、用户ID与挂载文件系统,而核心的cgroup提供资源隔离,包括CPU、存储器、block I/O与网上。

下面即记录在Debian Linux下按照Docker社区版的方法。

前期准备

添加Docker的pgp key。

1
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -

配置Docker的Apt仓库。

1
echo 'deb https://download.docker.com/linux/debian stretch stable' | sudo tee /etc/apt/sources.list.d/docker.list

更新Apt仓库

1
sudo apt-get update

安装Docker

1
2
3
4
5
6
// 清除之前安装的Docker版本
apt-get remove docker docker-engine docker.io
// 在安装最新的Docker社区版
apt-get install docker-ce
// 测试docker
docker run hello-world

以非root用户管理docker

1
2
sudo groupadd docker
sudo usermod -aG docker $USER

参考文献

  1. https://zh.wikipedia.org/wiki/Docker ,by wikipedia.

tensorflow学习笔记

发表于 2018-10-14 | 更新于 2022-02-05

TensorFlow™ 是一个开放源代码软件库,用于进行高性能数值计算。借助其灵活的架构,用户可以轻松地将计算工作部署到多种平台(CPU、GPU、TPU)和设备(桌面设备、服务器集群、移动设备、边缘设备等)。TensorFlow™ 最初是由 Google Brain 团队(隶属于 Google 的 AI 部门)中的研究人员和工程师开发的,可为机器学习和深度学习提供强力支持,并且其灵活的数值计算核心广泛应用于许多其他科学领域。

tensorflow入门

tensorflow实现机器学习的基本步骤如下:

  1. 定义模型,建立数据流图
  2. 定义loss,并指定优化器
  3. 传入数据并进行训练
  4. 使用测试集进行评测

通用代码框架

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import tensorflow as tf

# 初始化变量和模型参数,定义训练闭环中的运算

def inference(X):
# 计算推断模型在数据X上的输出,并将结果返回

def loss(X,Y):
# 依据训练数据X及其期望输出Y计算损失

def inputs():
# 读取或生成训练数据X及其期望输出Y

def train(total_loss):
# 依据计算的总损失训练或调整模型参数

def evaluate(sess,X,Y):
# 对训练得到的模型进行评估

# 在一个会话对象中启动数据流图,搭建流程
with tf.Session() as sess:
tf.initialize_all_variables().run()

X,Y=inputs()

total_loss=loss(X,Y)
train_op=train(total_loss)

coord=tf.train.Coordinator()
threads=tf.train.start_queue_runners(sess=sess,coord=coord)

# 实际的训练迭代次数
training_steps=1000
for step in range(training_steps):
sess.run([train_op])
# 出于调试和学习的目的,查看损失在训练过程中递减的情况
if step % 10 =0:
print "loss: ",sess.run([total_loss])

evaluate(sess,X,Y)

coord.request_stop()
coord.join(threads)
sess.close()

保存训练检查点

借助tf.train.Saver类可创建检查点文件,将数据流图中变量保存至其中。修改后框架如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 模型定义代码
# 创建一个Saver对象
saver=tf.train.Saver()

# 在会话对象中启动数据流图,搭建流程
with tf.Session() as sess:
# 模型设置

# 实际的训练闭环
for step in range(training_steps):
sess.run([train_op])

if step % 1000 ==0
# 将创建遵循命名模板为my-model-{step}的检查点文件,默认保存最近的5个文件
saver.save(sess,'my-model',global_step=step)

# 模型评估

saver.save(sess,'my-model',global_step=training_steps)
sess.close()

如果希望从检查点恢复,则使用tf.train.get_checkpoint_state方法验证检查点文件的存在,并使用tf.train.Saver.restore方法恢复变量值。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
with tf.Session() as sess:
# 模型设置

initial_step=0

# 验证之前是否已经保存了检查点文件
ckpt=tf.train.get_checkpoint_state(os.path.dirname(__file__))
if ckpt and ckpt.model_checkpoint_path:
# 从检查点恢复模型参数
saver.restore(sess,ckpt.model_checkpoint_path)
initial_step=int(ckpt.model_checkpoint_path.rsplite('_',1)[1])

# 实际的训练闭环
for step in range(initial_step, training_steps):
...

参考文献

  1. TensorFlow指南,by tensorflow.
  2. 尝试理解 shape 的用法,by mcoder.
  3. Python中的列表(list),元组(Tuple),字典(Dict)和集合(Set),by liuyanfeier.
  4. 使用list和tuple,by liaoxuefeng.
  5. Python的reshape(-1,1),by lxlong89940101.
  6. numpy.array,by numpy.
  7. TensorFlow 官方文档中文版,by pythontab.
  8. numpy.array shape (R, 1) and (R,) 的区别,by 时间被海绵吃了2.
  9. tf.variable_scope中的reuse,by 超级无敌小小顺利.
  10. Tensorflow共享变量机制理解与应用,by BetterManPeter.
  11. tf.reduce_mean()函数解析(最清晰的解释),by 我是管小亮.
  12. 深度解析OPENAI-MADDPG,by 起点教程.
  13. diagonal Gaussian policies的一些理解,by Intuition.
  14. 强化学习随机策略之高斯似然数原理与代码实现,by 神奇的战士.
  15. 数学基础——浅谈似然,by shidata.
  16. gym中的discrete类、box类和multidiscrete类简介和使用,by iitter.
  17. OPENAI Baeslines 详解(零)综述,by zachary2wave.
  18. 强化学习Gym库学习实践(一),by 愣娃RC.
  19. Gym使用简介,by Lisnol.
  20. 左右互搏,self-play,《Emergent Complexity via Multi-Agent Competition》,by 王小惟 Weixun.
  21. 多智能体深度强化学习——MADDPG算法代码分析(tensorflow),by RavenRaaven.
  22. 多元高斯分布以及高斯分布微分熵,by 侠肝义胆陈浩天.
  23. tf.split 与 tf.squeeze 用法,by 应钟有微.
  24. 碎片化学习之数学(二):Categorical Distribution,by 李新春.
  25. Distribution is all you need:这里有12种做ML不可不知的分布,by 机器之心.
  26. tensorflow中axis理解非常重要,by 爱视觉.
  27. tensorflow中四种不同交叉熵函数tf.nn.softmax_cross_entropy_with_logits(),by iotstu.
  28. TF里几种loss和注意事项,by 崔权.
  29. Softmax函数和Sigmoid函数的区别与联系初识CV,by 初识CV.
  30. 损失函数|交叉熵损失函数,by 飞鱼Talk.
  31. tf.random_uniform的使用,by UESTC_C2_403.
  32. sparse_softmax_cross_entropy_with_logits与softmax_cross_entropy_with_logits,by 光彩照人.
  33. 关于LogSumExp,by Hurry Z.
  34. softmax 与 log sum exp,by 我要给主播生猴子.

Python常用库简介

发表于 2018-10-14 | 更新于 2018-12-05

Python的高效开发建立在大量常用库基础上,因此掌握常用的Python库十分必要。下面简单介绍Python的各类常用库。

常用标准库

  • os: 访问操作系统功能模块
  • sys: 访问一些环境变量和与 Python 解释器交互
  • datetime: 日期时间处理
  • collections: 高级数据结构,有序字典,队列等等
  • uuid: 生成 UUID 模块
  • random: 随机数生成模块
  • re: 正则表达式模块
  • json: JSON 处理模块
  • pdb: 单步调试模块

科学计算

  • scipy:基于Python的matlab实现,旨在实现matlab的所有功能。包含Numpy、Ipython、Pandas、Matplotlib、Sympy等常用库
  • numpy: 基于Python的科学计算第三方库,提供了矩阵,线性代数,傅立叶变换等等的解决方案
  • pandas: 支持表格等多维数据
  • matplotlib: 用Python实现的类matlab的第三方库,用以绘制一些高质量的数学二维图形

命令交互

  • ipython: 交互命令行,适合科学计算
  • jupyter: ipython notebook 的延伸,可以直接放在github上
  • argparse:(Python 标准库)用于命令项选项与参数解析的模块

爬虫相关

  • urllib: (Python 标准库),接受URL请求的相关模块
  • http: (Python 标准库),处理所有客户端–服务器http请求的具体细节
  • requests: 第三方库,人性化的HTTP请求库,比urllib更好用
  • pillow: 处理验证码
  • rsa: 处理加密问题
  • BeautifulSoup:解析html文档为用户提供需要抓取的数据
  • lxml: 是基于 libxml2 这一 XML 解析库的 Python 封装,解析速度比 Beautiful Soup 更快

环境管理

  • virtualenv:创建独立 Python 环境的工具
  • virtualenvwrapper:virtualenv 的一组扩展

包管理

  • pip:Python 包和依赖关系管理工具
  • conda:跨平台,Python 二进制包管理工具

并发和并行

  • threading:(Python 标准库)更高层的线程接口
  • multiprocessing:(Python 标准库) 基于进程的“线程”接口

日志

  • logging:(Python 标准库) 为 Python 提供日志功能。

兼容性

  • six:Python 2 和 3 的兼容性工具

计算机视觉

  • opencv

机器学习

  • tensorflow

参考文献

  1. Python 笔记四:Python的常用库收集, by brandonxiang

Virtualenv简易教程

发表于 2018-10-09 | 更新于 2021-06-07

virtualenv是一个创建隔离python环境的工具,主要用于解决包冲突问题。

安装方法

1
sudo pip3 install virtualenv -i https://mirrors.aliyun.com/pypi/simple/

使用方法

创建项目的虚拟环境

1
2
$ cd my_project_folder
$ virtualenv venv #venv是虚拟环境名称

执行上述命令后,将生成一个与虚拟环境同名的文件夹,包含 Python 可执行文件和 pip 库的拷贝,可用于安装其他包。

但是默认情况下,虚拟环境中不会包含也无法使用系统环境的global site-packages。比如系统环境里安装了 requests 模块,在虚拟环境里import requests会提示ImportError。如果想使用系统环境的第三方软件包,可以在创建虚拟环境时使用参数–system-site-packages。如下所示:

1
virtualenv --system-site-packages venv

此外可以指定虚拟环境所使用的 Python 版本,但前提是系统中已经安装了该版本:

1
virtualenv -p /usr/bin/python2.7 venv

使用虚拟环境

启动虚拟环境:

1
2
3
cd venv
source bin/activate
python -V

退出虚拟环境:

1
deactivate

virtualenvwrapper

virtualenvwrapper是virtualenv 的扩展工具,提供了一系列命令行命令,可以方便地创建、删除、复制、切换不同的虚拟环境。同时,使用该扩展后,所有虚拟环境都会被放置在同一个目录下。

安装方法

1
pip3 install virtualenvwrapper

环境配置

在$home/.bashrc文件中添加如下几行代码:

1
2
3
4
5
# bash -f file检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true
if [ -f /usr/local/bin/virtualenvwrapper.sh ]; then
export WORKON_HOME=$HOME/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh
fi

使用方法

mkvirtualenv 也可以使用 virtualenv 的参数,比如 –python 来指定 Python 版本。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
mkvirtualenv venv # 创建虚拟环境,虚拟环境目录都在 WORKON_HOME 里

lsvirtualenv -b # 列出虚拟环境

workon [虚拟环境名称] # 切换虚拟环境

lssitepackages # 查看环境里安装了哪些包

cdvirtualenv [子目录名] # 进入当前环境的目录

cpvirtualenv [source] [dest] # 复制虚拟环境

deactivate # 退出虚拟环境

rmvirtualenv [虚拟环境名称] # 删除虚拟环境

conda vs. pip vs. virtualenv

Conda是一个开源包管理系统和环境管理系统,用于安装多个版本的软件包及其依赖关系,并在它们之间轻松切换。 它适用于Linux,OS X和Windows,是为Python程序创建的,但可以打包和分发任何软件。

Pip是一个以Python计算机程序语言写成的软件包管理系统,用于安装和管理软件包。

它们直接的区别如下:

conda vs. pip vs. virtualenv

pip使用方法

1
2
3
4
# 导出python安装包环境
pip freeze > requirements.txt
# 导入requirements文件
pip install -r requirements.txt

参考文献

  1. 最全的Python虚拟环境使用方法,by Stevent.
  2. Pipenv:新一代Python项目环境与依赖管理工具,by 李辉.
  3. Python 修改 pip 源为国内源,by 花晓星辰.

Blender简易教程

发表于 2018-09-19 | 更新于 2024-11-23

最近需要用Blender建3D模型,试用了半天,将经验简单总结一下。

3D建模流程

  • 建立3D模型:通常在Blender的3D视图窗口对物体进行建模。
  • 拆分制作纹理:设置缝合边,再展开。打开U/V图像编辑器窗口即可看到拆分效果。导出图片后制作纹理。
  • 使用材质贴图:设置材质着色,添加纹理。

Blender快捷键

Blender快捷键很多,熟练使用可加速3D模型的建立。

3D视图窗口

字母键

  • A:全选、取消选择
  • Shift+A:增加物件,新建的物件会出现在准星的位置
  • B:框选,加Shift取消选择,按Esc退出选择
  • C:刷选,加Shift取消选择,按Esc退出选择
  • Shift+C:将游标设置到坐标系中心
  • Ctrl+Shift+C:为骨头添加约束
  • Shift+D:复制对象
  • E:挤出选中对象
  • Shift+E:编辑模式下,打开对称镜像挤出骨架
  • F:编辑模式下,在点的基础上构建边或面;在权重绘制模式下,设置笔刷大小
  • G:移动选中对象
  • Alt+G: 在Pose Mode下,按“Alt+G”骨架归位
  • H:隐藏对象(Hide)
  • Alt+H:显示对象
  • I:增加关键帧
  • Ctrl+I:物体模式下,反选所有未选择的物体
  • Shift+I:在Pose Mode下,选中骨架,再按“Shift+I”插入反关节
  • Ctrl+J: 在Pose Mode下,连接两个独立的骨架,以便在编辑模式下同时编辑;在Object Mode下,选择两个物件后合并
  • K: 切割,按“enter”键完成切割。按“k”键接着按住“ctrl”键移动到线框上可以自动定位到线的二分之一处。按“k”键接着按一下“c”键可以水平垂直或者45度进行切割。按“k”键接着按一下“z”键可以对物体一圈进行切割。
  • Ctrl+L:编辑模式下,选择一个点,在Ctrl+L将选择与点相连的连续表面
  • M:选中物体,按“M”键,再选择要将物体放置的图层。
  • N:打开物体属性
  • Ctrl+P:编辑模式下,设置多个骨头的父骨头;或者物体模式下,设置多个物体的父级。
  • Alt+P:物体模式下,取消物体的父子关系。
  • R: 旋转
  • Alt+R: 在Pose Mode下,按“Alt+R”骨架归位
  • Ctrl+R: 环切并滑动
  • S: 缩放
  • S+XYZ:沿XYZ轴方向缩放
  • Alt+S:法向缩放
  • T:打开左侧工具栏
  • U:编辑模式下按“U”,打开UV映射菜单,选择活动面再全选,然后UV展开
  • Ctrl+U:存储为启动文件
  • W:快捷拓展命令栏
  • X:删除
  • Z:线框模式与实体模式之间切换
  • Shift+Z:视口着色切换到实时渲染模式
  • ]:在Pose模式下,选择主骨头,再按“]”可直接选择下一根骨头
  • Shift+]:在Pose模式下,选择主骨头,再按“Shift+]”可直接选择下一根骨头
  • Ctrl+Space:调出三维坐标系操纵物体
  • Ctrl+Tab:进行点、线、面的编辑模式
  • Ctrl+Alt+Q:切换四视图
  • Ctrl+向上箭头:最大化对应视图
  • Shift+空格键:放大视图
  • Tab:编辑模式和物体模式切换
  • Ctrl+句号.:仅变换原点

功能键

  • F12:计算结果(算图模式),如果是黑色的,需要把摄像机和光源放在同一个图层中,或者选择摄像机和光源的图层。

数字键

数字键主要用于视角切换

  • 1:前视图
  • 3:侧视图
  • 5:正交与透视之间切换
  • 7:俯视图

鼠标键

  • 右键:选择物体
  • shift+中键:平移
  • 滚轴/(Ctrl+中键拖拽):缩放

参考文献

  1. Blender常用快捷键,by JinunMeng.
  2. 如何系统的学习blender?,by zhihu.
  3. 贴图、纹理、材质的区别是什么?,by zhihu.
  4. 材质、贴图、纹理的区别,by MATU.
  5. 材质和纹理的区别,by zhuyong006.
  6. 一文看懂材质/纹理 Material, Texture, Shading, Shader 的区别,by kidult00.
  7. Blender 移动、旋转、缩放,by heavi.
  8. 数字人轻松学习Blender系列之七:坐标,by DIGITALMAN.
  9. 【转载】Blender 常用快捷键大全,by ShaderJoy.

Windows下将cmd命令添加到右键菜单

发表于 2018-09-11

经常需要使用cmd命令,如果打开cmd窗口后在cd到目标路径,则非常麻烦。可使用如下方法将cmd添加到右键菜单,这样一打开cmd窗口就到了目标路径。设置方法如下:

  1. 打开注册表
  2. 添加注册项
    1
    2
    3
    a) 找到[HKEY_CLASSESS_ROOT\Folder\shell]子键,在其下新建“cmdPrompt”子项,在窗口右侧名称列上点击右键修改,将数值数据改为“CMD快速通道”。

    b) 再在这个项下,新建名为“command”子项,同样修改数值数据修改为c:\windows\system32\cmd.exe /k cd "%1"
    设置完成后即可在目标路径文件夹上右键单击,选择“CMD快速通道”命令,打开cmd窗口的同时,已跳转到目标路径下。

Windows平台Python安装与配置教程

发表于 2018-09-07 | 更新于 2019-03-17

下面记录在Windows平台安装配置Python的过程。

  1. 去Python官网下载最新的Python3,当前最新版本为3.7。
  2. 双击Python3.7的安装包进行安装,设置安装路径为C:\Python\Python37,同时将Python路径加入系统Path变量中。
  3. 使用如下命令安装ipython。加参数–trusted-host,否则会报错误:SSLError(SSLCertVerificationError(1, ‘[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed。加参数-i,制定国内pip源,显著提高下载速度。
    1
    pip install ipython -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn

Windows与Linux双系统Grub引导修复

发表于 2018-09-06 | 更新于 2018-11-20

因为个人爱好,我再笔记本中安装了Windows和Linux的双系统。最近因为Windows系统故障原因,重装Windows系统,导致无法引导Linux启动。

故障原因是之前安装双系统时,先安装Windows,再安装Linux,这样将由Grub2来引导Linux和Windows的启动。而重装Windows的过程中,将覆盖Grub2引导程序,导致无法Linux的启动。

故障解决方法是重新在硬盘中写入Grub2引导程序。具体步骤如下:

  1. 使用Linux安装盘,使用Live CD方式进行Linux系统。
  2. 使用fdisk -l命令查看硬盘信息。
  3. 使用grub-install –root-directory=/media/boot /dev/sda将grub2引导程序写入硬盘。/media/boot为引导分区所在位置,grub-install写入grub2引导程序时需要使用引导分区所在linux映像。
  4. 使用update-grub2更新引导配置。

中文文献免费下载方法

发表于 2018-08-26 | 更新于 2018-09-09

下面记录经过验证可用的中文文献下载方法:

  1. idata中国知网
    1
    2
    3
    4
    idata中国知网网址:https://www.cn-ki.net/
    进入系统,注册账号,登陆就可以每天免费下载五篇知网论文。
    额度用完之后,第二天可以继续下载。
    每天五篇的额度基本能满足需要,这样还不够的话,可以多注册几个账号。
  2. 全国图书馆参考咨询联盟
    1
    2
    3
    全国图书馆参考咨询联盟网址:http://www.ucdrs.superlib.net/
    很全,可以查图书,查期刊,报纸等。还有硕士,博士的毕业论文。不仅有中文,还有外文。
    网站无需注册,通过文献传递服务,即通过邮箱接收全文。最快一两分钟,最慢三四个小时即可接收到全文。
  3. 上海研发公共服务平台
    1
    2
    3
    上海研发公共服务平台网址:http://www.sgst.cn/。
    注册后可直接下载,论文、文献数量直接匹配知网和万方数据。
    下载速度较快,但有数量限制,可注册多个用户名。
  4. 库问搜索
    1
    2
    库问搜索网址:http://www.koovin.com/。
    库问搜索提供千万级文献免费下载。
上一页1…484950…52下一页

Jack Huang

519 日志
66 标签
© 2025 Jack Huang
由 Hexo 强力驱动
|
主题 — NexT.Muse