27 个Python数据科学库实战案例 (附代码)

为了大家能够对人工智能常用的 Python 库有一个初步的了解,以选择能够满足自己需求的库进行学习,对目前较为常见的人工智能库进行简要全面的介绍。

029455e0187e6e1f5f2c394c2e759df2.pngb085544f87be5db8f2141d4106ec0c96.png

1、Numpy

f2d28519583eb72cef965d7222d43b7f.gif

NumPy(Numerical Python)Python的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库,Numpy底层使用C语言编写,数组中直接存储对象,而不是存储对象指针,所以其运算效率远高于纯Python代码。我们可以在示例中对比下纯Python与使用Numpy库在计算列表sin值的速度对比:

import numpy as np
import math
import random
import timestart = time.time()
for i in range(10):list_1 = list(range(1,10000))for j in range(len(list_1)):list_1[j] = math.sin(list_1[j])
print("使用纯Python用时{}s".format(time.time()-start))start = time.time()
for i in range(10):list_1 = np.array(np.arange(1,10000))list_1 = np.sin(list_1)
print("使用Numpy用时{}s".format(time.time()-start))

从如下运行结果,可以看到使用 Numpy 库的速度快于纯 Python 编写的代码:

使用纯Python用时0.017444372177124023s
使用Numpy用时0.001619577407836914s

2、OpenCV

6abb8dd30fc41e25d73ec2a9ad6029a4.gif

OpenCV 是一个的跨平台计算机视觉库,可以运行在 Linux、Windows 和 Mac OS 操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时也提供了 Python 接口,实现了图像处理和计算机视觉方面的很多通用算法。下面代码尝试使用一些简单的滤镜,包括图片的平滑处理、高斯模糊等:

import numpy as np
import cv2 as cv
from matplotlib import pyplot as plt
img = cv.imread('h89817032p0.png')
kernel = np.ones((5,5),np.float32)/25
dst = cv.filter2D(img,-1,kernel)
blur_1 = cv.GaussianBlur(img,(5,5),0)
blur_2 = cv.bilateralFilter(img,9,75,75)
plt.figure(figsize=(10,10))
plt.subplot(221),plt.imshow(img[:,:,::-1]),plt.title('Original')
plt.xticks([]), plt.yticks([])
plt.subplot(222),plt.imshow(dst[:,:,::-1]),plt.title('Averaging')
plt.xticks([]), plt.yticks([])
plt.subplot(223),plt.imshow(blur_1[:,:,::-1]),plt.title('Gaussian')
plt.xticks([]), plt.yticks([])
plt.subplot(224),plt.imshow(blur_1[:,:,::-1]),plt.title('Bilateral')
plt.xticks([]), plt.yticks([])
plt.show()
120c9b90cdb70454753f45e1f708f012.png
OpenCV

3、Scikit-image

704dd404b2093fe5821f0627ecb1bc5a.gif

scikit-image是基于scipy的图像处理库,它将图片作为numpy数组进行处理。例如,可以利用scikit-image改变图片比例,scikit-image提供了rescaleresize以及downscale_local_mean等函数。

from skimage import data, color, io
from skimage.transform import rescale, resize, downscale_local_meanimage = color.rgb2gray(io.imread('h89817032p0.png'))image_rescaled = rescale(image, 0.25, anti_aliasing=False)
image_resized = resize(image, (image.shape[0] // 4, image.shape[1] // 4),anti_aliasing=True)
image_downscaled = downscale_local_mean(image, (4, 3))
plt.figure(figsize=(20,20))
plt.subplot(221),plt.imshow(image, cmap='gray'),plt.title('Original')
plt.xticks([]), plt.yticks([])
plt.subplot(222),plt.imshow(image_rescaled, cmap='gray'),plt.title('Rescaled')
plt.xticks([]), plt.yticks([])
plt.subplot(223),plt.imshow(image_resized, cmap='gray'),plt.title('Resized')
plt.xticks([]), plt.yticks([])
plt.subplot(224),plt.imshow(image_downscaled, cmap='gray'),plt.title('Downscaled')
plt.xticks([]), plt.yticks([])
plt.show()
bc567288efc8b3ef778a58d04ac06285.png
Scikit-image

4、PIL

1ef9242eee32df7ec3dc7581a3ae68e9.gif

Python Imaging Library(PIL) 已经成为 Python 事实上的图像处理标准库了,这是由于,PIL 功能非常强大,但API却非常简单易用。但是由于PIL仅支持到 Python 2.7,再加上年久失修,于是一群志愿者在 PIL 的基础上创建了兼容的版本,名字叫 Pillow,支持最新 Python 3.x,又加入了许多新特性,因此,我们可以跳过 PIL,直接安装使用 Pillow

5、Pillow

40f3edc1bba44f6e07a89c4a28e1488b.gif

使用 Pillow 生成字母验证码图片:

from PIL import Image, ImageDraw, ImageFont, ImageFilterimport random# 随机字母:
def rndChar():return chr(random.randint(65, 90))# 随机颜色1:
def rndColor():return (random.randint(64, 255), random.randint(64, 255), random.randint(64, 255))# 随机颜色2:
def rndColor2():return (random.randint(32, 127), random.randint(32, 127), random.randint(32, 127))# 240 x 60:
width = 60 * 6
height = 60 * 6
image = Image.new('RGB', (width, height), (255, 255, 255))
# 创建Font对象:
font = ImageFont.truetype('/usr/share/fonts/wps-office/simhei.ttf', 60)
# 创建Draw对象:
draw = ImageDraw.Draw(image)
# 填充每个像素:
for x in range(width):for y in range(height):draw.point((x, y), fill=rndColor())
# 输出文字:
for t in range(6):draw.text((60 * t + 10, 150), rndChar(), font=font, fill=rndColor2())
# 模糊:
image = image.filter(ImageFilter.BLUR)
image.save('code.jpg', 'jpeg')
4564b368babfee57980966efa13796b8.jpeg
验证码

6、SimpleCV

8153170313befc1659627896e535b70d.gif

SimpleCV 是一个用于构建计算机视觉应用程序的开源框架。使用它,可以访问高性能的计算机视觉库,如 OpenCV,而不必首先了解位深度、文件格式、颜色空间、缓冲区管理、特征值或矩阵等术语。但其对于 Python3 的支持很差很差,在 Python3.7 中使用如下代码:

from SimpleCV import Image, Color, Display
# load an image from imgur
img = Image('http://i.imgur.com/lfAeZ4n.png')
# use a keypoint detector to find areas of interest
feats = img.findKeypoints()
# draw the list of keypoints
feats.draw(color=Color.RED)
# show the  resulting image. 
img.show()
# apply the stuff we found to the image.
output = img.applyLayers()
# save the results.
output.save('juniperfeats.png')

会报如下错误,因此不建议在 Python3 中使用:

SyntaxError: Missing parentheses in call to 'print'. Did you mean print('unit test')?

7、Mahotas

4bab053dbbc1caba2af50c2d6a05ae9b.gif

Mahotas 是一个快速计算机视觉算法库,其构建在 Numpy 之上,目前拥有超过100种图像处理和计算机视觉功能,并在不断增长。使用 Mahotas 加载图像,并对像素进行操作:

import numpy as np
import mahotas
import mahotas.demosfrom mahotas.thresholding import soft_threshold
from matplotlib import pyplot as plt
from os import path
f = mahotas.demos.load('lena', as_grey=True)
f = f[128:,128:]
plt.gray()
# Show the data:
print("Fraction of zeros in original image: {0}".format(np.mean(f==0)))
plt.imshow(f)
plt.show()
5fa5a2ed4fa7e89aa4d8466247b9d4f7.png
Mahotas

8、Ilastik

e71977867577d6d0035d0038538ab973.gif

Ilastik 能够给用户提供良好的基于机器学习的生物信息图像分析服务,利用机器学习算法,轻松地分割,分类,跟踪和计数细胞或其他实验数据。大多数操作都是交互式的,并不需要机器学习专业知识。

9、Scikit-Learn

c4ec866a9c54bfeae6ead807da0ccce0.gif

Scikit-learn 是针对 Python 编程语言的免费软件机器学习库。它具有各种分类,回归和聚类算法,包括支持向量机,随机森林,梯度提升,k均值和 DBSCAN 等多种机器学习算法。使用Scikit-learn实现KMeans算法:

import timeimport numpy as np
import matplotlib.pyplot as pltfrom sklearn.cluster import MiniBatchKMeans, KMeans
from sklearn.metrics.pairwise import pairwise_distances_argmin
from sklearn.datasets import make_blobs# Generate sample data
np.random.seed(0)batch_size = 45
centers = [[1, 1], [-1, -1], [1, -1]]
n_clusters = len(centers)
X, labels_true = make_blobs(n_samples=3000, centers=centers, cluster_std=0.7)# Compute clustering with Meansk_means = KMeans(init='k-means++', n_clusters=3, n_init=10)
t0 = time.time()
k_means.fit(X)
t_batch = time.time() - t0# Compute clustering with MiniBatchKMeansmbk = MiniBatchKMeans(init='k-means++', n_clusters=3, batch_size=batch_size,n_init=10, max_no_improvement=10, verbose=0)
t0 = time.time()
mbk.fit(X)
t_mini_batch = time.time() - t0# Plot result
fig = plt.figure(figsize=(8, 3))
fig.subplots_adjust(left=0.02, right=0.98, bottom=0.05, top=0.9)
colors = ['#4EACC5', '#FF9C34', '#4E9A06']# We want to have the same colors for the same cluster from the
# MiniBatchKMeans and the KMeans algorithm. Let's pair the cluster centers per
# closest one.
k_means_cluster_centers = k_means.cluster_centers_
order = pairwise_distances_argmin(k_means.cluster_centers_,mbk.cluster_centers_)
mbk_means_cluster_centers = mbk.cluster_centers_[order]k_means_labels = pairwise_distances_argmin(X, k_means_cluster_centers)
mbk_means_labels = pairwise_distances_argmin(X, mbk_means_cluster_centers)# KMeans
for k, col in zip(range(n_clusters), colors):my_members = k_means_labels == kcluster_center = k_means_cluster_centers[k]plt.plot(X[my_members, 0], X[my_members, 1], 'w',markerfacecolor=col, marker='.')plt.plot(cluster_center[0], cluster_center[1], 'o', markerfacecolor=col,markeredgecolor='k', markersize=6)
plt.title('KMeans')
plt.xticks(())
plt.yticks(())plt.show()
8eae368d7295b685ed19326d38d1e409.png
KMeans

10、SciPy

dce3aab7bef9f94838dc50d984573b60.gif

SciPy 库提供了许多用户友好和高效的数值计算,如数值积分、插值、优化、线性代数等。SciPy 库定义了许多数学物理的特殊函数,包括椭圆函数、贝塞尔函数、伽马函数、贝塔函数、超几何函数、抛物线圆柱函数等等。

from scipy import special
import matplotlib.pyplot as plt
import numpy as npdef drumhead_height(n, k, distance, angle, t):kth_zero = special.jn_zeros(n, k)[-1]return np.cos(t) * np.cos(n*angle) * special.jn(n, distance*kth_zero)theta = np.r_[0:2*np.pi:50j]
radius = np.r_[0:1:50j]
x = np.array([r * np.cos(theta) for r in radius])
y = np.array([r * np.sin(theta) for r in radius])
z = np.array([drumhead_height(1, 1, r, theta, 0.5) for r in radius])fig = plt.figure()
ax = fig.add_axes(rect=(0, 0.05, 0.95, 0.95), projection='3d')
ax.plot_surface(x, y, z, rstride=1, cstride=1, cmap='RdBu_r', vmin=-0.5, vmax=0.5)
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_xticks(np.arange(-1, 1.1, 0.5))
ax.set_yticks(np.arange(-1, 1.1, 0.5))
ax.set_zlabel('Z')
plt.show()
59c2093d1c0f5bc2b00ea5fd6daf05a4.png
SciPy

11、NLTK

05c31a35e51decf7da35d62f2da3f064.gif

NLTK 是构建Python程序以处理自然语言的库。它为50多个语料库和词汇资源(如 WordNet )提供了易于使用的接口,以及一套用于分类、分词、词干、标记、解析和语义推理的文本处理库、工业级自然语言处理 (Natural Language Processing, NLP) 库的包装器。NLTK被称为 “a wonderful tool for teaching, and working in, computational linguistics using Python”

import nltk
from nltk.corpus import treebank# 首次使用需要下载
nltk.download('punkt')
nltk.download('averaged_perceptron_tagger')
nltk.download('maxent_ne_chunker')
nltk.download('words')
nltk.download('treebank')sentence = """At eight o'clock on Thursday morning Arthur didn't feel very good."""
# Tokenize
tokens = nltk.word_tokenize(sentence)
tagged = nltk.pos_tag(tokens)# Identify named entities
entities = nltk.chunk.ne_chunk(tagged)# Display a parse tree
t = treebank.parsed_sents('wsj_0001.mrg')[0]
t.draw()
1469bd2693da97cbad35cc622a0809df.jpeg
NLTK

12、spaCy

5f9578dab92829a9a21835052a6328e0.gif

spaCy 是一个免费的开源库,用于 Python 中的高级 NLP。它可以用于构建处理大量文本的应用程序;也可以用来构建信息提取或自然语言理解系统,或者对文本进行预处理以进行深度学习。

import spacytexts = ["Net income was $9.4 million compared to the prior year of $2.7 million.","Revenue exceeded twelve billion dollars, with a loss of $1b.",]nlp = spacy.load("en_core_web_sm")for doc in nlp.pipe(texts, disable=["tok2vec", "tagger", "parser", "attribute_ruler", "lemmatizer"]):# Do something with the doc hereprint([(ent.text, ent.label_) for ent in doc.ents])

nlp.pipe 生成 Doc 对象,因此我们可以对它们进行迭代并访问命名实体预测:

[('$9.4 million', 'MONEY'), ('the prior year', 'DATE'), ('$2.7 million', 'MONEY')]
[('twelve billion dollars', 'MONEY'), ('1b', 'MONEY')]

13、LibROSA

80661611d8aa6b7a8616a95cd14deeee.gif

librosa 是一个用于音乐和音频分析的 Python 库,它提供了创建音乐信息检索系统所必需的功能和函数。

# Beat tracking example
import librosa# 1. Get the file path to an included audio example
filename = librosa.example('nutcracker')# 2. Load the audio as a waveform `y`
#    Store the sampling rate as `sr`
y, sr = librosa.load(filename)# 3. Run the default beat tracker
tempo, beat_frames = librosa.beat.beat_track(y=y, sr=sr)
print('Estimated tempo: {:.2f} beats per minute'.format(tempo))# 4. Convert the frame indices of beat events into timestamps
beat_times = librosa.frames_to_time(beat_frames, sr=sr)

14、Pandas

39bcc6e81669a8f7f4676617b5aad3a6.gif

Pandas 是一个快速、强大、灵活且易于使用的开源数据分析和操作工具, Pandas 可以从各种文件格式比如 CSV、JSON、SQL、Microsoft Excel 导入数据,可以对各种数据进行运算操作,比如归并、再成形、选择,还有数据清洗和数据加工特征。Pandas 广泛应用在学术、金融、统计学等各个数据分析领域。

import matplotlib.pyplot as plt
import pandas as pd
import numpy as npts = pd.Series(np.random.randn(1000), index=pd.date_range("1/1/2000", periods=1000))
ts = ts.cumsum()df = pd.DataFrame(np.random.randn(1000, 4), index=ts.index, columns=list("ABCD"))
df = df.cumsum()
df.plot()
plt.show()
77c5fd69a80a797ef3670831923c0261.png
Pandas

15、Matplotlib

6cf11693f2171cb45b4a2497ca3001bf.gif

Matplotlib 是Python的绘图库,它提供了一整套和 matlab 相似的命令 API,可以生成出版质量级别的精美图形,Matplotlib 使绘图变得非常简单,在易用性和性能间取得了优异的平衡。使用 Matplotlib 绘制多曲线图:

# plot_multi_curve.py
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0.1, 2 * np.pi, 100)
y_1 = x
y_2 = np.square(x)
y_3 = np.log(x)
y_4 = np.sin(x)
plt.plot(x,y_1)
plt.plot(x,y_2)
plt.plot(x,y_3)
plt.plot(x,y_4)
plt.show()
1e52a5957d2636a5f5046bd2864cd74d.png
Matplotlib

16、Seaborn

d34a004ee36d33619789fe999c34c522.gif

Seaborn 是在 Matplotlib 的基础上进行了更高级的API封装的Python数据可视化库,从而使得作图更加容易,应该把 Seaborn 视为 Matplotlib 的补充,而不是替代物。

import seaborn as sns
import matplotlib.pyplot as plt
sns.set_theme(style="ticks")df = sns.load_dataset("penguins")
sns.pairplot(df, hue="species")
plt.show()
ddb7eb301e436da493320af62679c27a.png
seaborn

17、Orange

e88faf0f1aaca76863f41f68cab3242e.gif

Orange 是一个开源的数据挖掘和机器学习软件,提供了一系列的数据探索、可视化、预处理以及建模组件。Orange 拥有漂亮直观的交互式用户界面,非常适合新手进行探索性数据分析和可视化展示;同时高级用户也可以将其作为 Python 的一个编程模块进行数据操作和组件开发。使用 pip 即可安装 Orange,好评~

$ pip install orange3

安装完成后,在命令行输入 orange-canvas 命令即可启动 Orange 图形界面:

$ orange-canvas

启动完成后,即可看到 Orange 图形界面,进行各种操作。

3bc09af8845681ffa8b9409c9017d296.png
Orange

18、PyBrain

5c1d102d8e76f1adc2cfc8d560e287b7.gif

PyBrainPython 的模块化机器学习库。它的目标是为机器学习任务和各种预定义的环境提供灵活、易于使用且强大的算法来测试和比较算法。PyBrainPython-Based Reinforcement Learning, Artificial Intelligence and Neural Network Library 的缩写。我们将利用一个简单的例子来展示 PyBrain 的用法,构建一个多层感知器 (Multi Layer Perceptron, MLP)。首先,我们创建一个新的前馈网络对象:

from pybrain.structure import FeedForwardNetwork
n = FeedForwardNetwork()

接下来,构建输入、隐藏和输出层:

from pybrain.structure import LinearLayer, SigmoidLayerinLayer = LinearLayer(2)
hiddenLayer = SigmoidLayer(3)
outLayer = LinearLayer(1)

为了使用所构建的层,必须将它们添加到网络中:

n.addInputModule(inLayer)
n.addModule(hiddenLayer)
n.addOutputModule(outLayer)

可以添加多个输入和输出模块。为了向前计算和反向误差传播,网络必须知道哪些层是输入、哪些层是输出。这就需要明确确定它们应该如何连接。为此,我们使用最常见的连接类型,全连接层,由 FullConnection 类实现:

from pybrain.structure import FullConnection
in_to_hidden = FullConnection(inLayer, hiddenLayer)
hidden_to_out = FullConnection(hiddenLayer, outLayer)

与层一样,我们必须明确地将它们添加到网络中:

n.addConnection(in_to_hidden)
n.addConnection(hidden_to_out)

所有元素现在都已准备就位,最后,我们需要调用.sortModules()方法使MLP可用:

n.sortModules()

这个调用会执行一些内部初始化,这在使用网络之前是必要的。

19、Milk

ac0dcd0e83978427e5d4d3f34db6797e.gif

MILK(MACHINE LEARNING TOOLKIT) 是 Python 语言的机器学习工具包。它主要是包含许多分类器比如 SVMS、K-NN、随机森林以及决策树中使用监督分类法,它还可执行特征选择,可以形成不同的例如无监督学习、密切关系传播和由 MILK 支持的 K-means 聚类等分类系统。使用 MILK 训练一个分类器:

import numpy as np
import milk
features = np.random.rand(100,10)
labels = np.zeros(100)
features[50:] += .5
labels[50:] = 1
learner = milk.defaultclassifier()
model = learner.train(features, labels)# Now you can use the model on new examples:
example = np.random.rand(10)
print(model.apply(example))
example2 = np.random.rand(10)
example2 += .5
print(model.apply(example2))

20、TensorFlow

3679a01e980219b6f991464a3d560189.gif

TensorFlow 是一个端到端开源机器学习平台。它拥有一个全面而灵活的生态系统,一般可以将其分为 TensorFlow1.x 和 TensorFlow2.x,TensorFlow1.x 与 TensorFlow2.x 的主要区别在于 TF1.x 使用静态图而 TF2.x 使用Eager Mode动态图。这里主要使用TensorFlow2.x作为示例,展示在 TensorFlow2.x 中构建卷积神经网络 (Convolutional Neural Network, CNN)。

import tensorflow as tffrom tensorflow.keras import datasets, layers, models# 数据加载
(train_images, train_labels), (test_images, test_labels) = datasets.cifar10.load_data()# 数据预处理
train_images, test_images = train_images / 255.0, test_images / 255.0# 模型构建
model = models.Sequential()
model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(32, 32, 3)))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.Flatten())
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dense(10))# 模型编译与训练
model.compile(optimizer='adam',loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),metrics=['accuracy'])
history = model.fit(train_images, train_labels, epochs=10, validation_data=(test_images, test_labels))

21、PyTorch

2e102beb11f166c3e8629e008679e6a6.gif

PyTorch 的前身是 Torch,其底层和 Torch 框架一样,但是使用 Python 重新写了很多内容,不仅更加灵活,支持动态图,而且提供了 Python 接口。

# 导入库
import torch
from torch import nn
from torch.utils.data import DataLoader
from torchvision import datasets
from torchvision.transforms import ToTensor, Lambda, Compose
import matplotlib.pyplot as plt# 模型构建
device = "cuda" if torch.cuda.is_available() else "cpu"
print("Using {} device".format(device))# Define model
class NeuralNetwork(nn.Module):def __init__(self):super(NeuralNetwork, self).__init__()self.flatten = nn.Flatten()self.linear_relu_stack = nn.Sequential(nn.Linear(28*28, 512),nn.ReLU(),nn.Linear(512, 512),nn.ReLU(),nn.Linear(512, 10),nn.ReLU())def forward(self, x):x = self.flatten(x)logits = self.linear_relu_stack(x)return logitsmodel = NeuralNetwork().to(device)# 损失函数和优化器
loss_fn = nn.CrossEntropyLoss()
optimizer = torch.optim.SGD(model.parameters(), lr=1e-3)# 模型训练
def train(dataloader, model, loss_fn, optimizer):size = len(dataloader.dataset)for batch, (X, y) in enumerate(dataloader):X, y = X.to(device), y.to(device)# Compute prediction errorpred = model(X)loss = loss_fn(pred, y)# Backpropagationoptimizer.zero_grad()loss.backward()optimizer.step()if batch % 100 == 0:loss, current = loss.item(), batch * len(X)print(f"loss: {loss:>7f}  [{current:>5d}/{size:>5d}]")

22、Theano

e6730c9a09aa31c67f759621df56b93b.gif

Theano 是一个 Python 库,它允许定义、优化和有效地计算涉及多维数组的数学表达式,建在 NumPy 之上。在 Theano 中实现计算雅可比矩阵:

import theano
import theano.tensor as T
x = T.dvector('x')
y = x ** 2
J, updates = theano.scan(lambda i, y,x : T.grad(y[i], x), sequences=T.arange(y.shape[0]), non_sequences=[y,x])
f = theano.function([x], J, updates=updates)
f([4, 4])

23、Keras

e05dfd29ec9c7522346da166a62ec16d.gif

Keras 是一个用 Python 编写的高级神经网络 API,它能够以 TensorFlow, CNTK, 或者 Theano 作为后端运行。Keras 的开发重点是支持快速的实验,能够以最小的时延把想法转换为实验结果。

from keras.models import Sequential
from keras.layers import Dense# 模型构建
model = Sequential()
model.add(Dense(units=64, activation='relu', input_dim=100))
model.add(Dense(units=10, activation='softmax'))# 模型编译与训练
model.compile(loss='categorical_crossentropy',optimizer='sgd',metrics=['accuracy'])
model.fit(x_train, y_train, epochs=5, batch_size=32)

24、Caffe

802f6c0b992a43a231961df75ad0222b.gif

在 Caffe2 官方网站上,这样说道:Caffe2 现在是 PyTorch 的一部分。虽然这些 api 将继续工作,但鼓励使用 PyTorch api。

25、MXNet

b99688f72689bb19fd52da6d67fd31ce.gif

MXNet 是一款设计为效率和灵活性的深度学习框架。它允许混合符号编程和命令式编程,从而最大限度提高效率和生产力。使用 MXNet 构建手写数字识别模型:

import mxnet as mx
from mxnet import gluon
from mxnet.gluon import nn
from mxnet import autograd as ag
import mxnet.ndarray as F# 数据加载
mnist = mx.test_utils.get_mnist()
batch_size = 100
train_data = mx.io.NDArrayIter(mnist['train_data'], mnist['train_label'], batch_size, shuffle=True)
val_data = mx.io.NDArrayIter(mnist['test_data'], mnist['test_label'], batch_size)# CNN模型
class Net(gluon.Block):def __init__(self, **kwargs):super(Net, self).__init__(**kwargs)self.conv1 = nn.Conv2D(20, kernel_size=(5,5))self.pool1 = nn.MaxPool2D(pool_size=(2,2), strides = (2,2))self.conv2 = nn.Conv2D(50, kernel_size=(5,5))self.pool2 = nn.MaxPool2D(pool_size=(2,2), strides = (2,2))self.fc1 = nn.Dense(500)self.fc2 = nn.Dense(10)def forward(self, x):x = self.pool1(F.tanh(self.conv1(x)))x = self.pool2(F.tanh(self.conv2(x)))# 0 means copy over size from corresponding dimension.# -1 means infer size from the rest of dimensions.x = x.reshape((0, -1))x = F.tanh(self.fc1(x))x = F.tanh(self.fc2(x))return x
net = Net()
# 初始化与优化器定义
# set the context on GPU is available otherwise CPU
ctx = [mx.gpu() if mx.test_utils.list_gpus() else mx.cpu()]
net.initialize(mx.init.Xavier(magnitude=2.24), ctx=ctx)
trainer = gluon.Trainer(net.collect_params(), 'sgd', {'learning_rate': 0.03})# 模型训练
# Use Accuracy as the evaluation metric.
metric = mx.metric.Accuracy()
softmax_cross_entropy_loss = gluon.loss.SoftmaxCrossEntropyLoss()for i in range(epoch):# Reset the train data iterator.train_data.reset()for batch in train_data:data = gluon.utils.split_and_load(batch.data[0], ctx_list=ctx, batch_axis=0)label = gluon.utils.split_and_load(batch.label[0], ctx_list=ctx, batch_axis=0)outputs = []# Inside training scopewith ag.record():for x, y in zip(data, label):z = net(x)# Computes softmax cross entropy loss.loss = softmax_cross_entropy_loss(z, y)# Backpropogate the error for one iteration.loss.backward()outputs.append(z)metric.update(label, outputs)trainer.step(batch.data[0].shape[0])# Gets the evaluation result.name, acc = metric.get()# Reset evaluation result to initial state.metric.reset()print('training acc at epoch %d: %s=%f'%(i, name, acc))

26、PaddlePaddle

bc336fc8f804701690695be86dee84a4.gif

飞桨 (PaddlePaddle) 以百度多年的深度学习技术研究和业务应用为基础,集深度学习核心训练和推理框架、基础模型库、端到端开发套件、丰富的工具组件于一体。是中国首个自主研发、功能完备、开源开放的产业级深度学习平台。使用 PaddlePaddle 实现 LeNtet5

# 导入需要的包
import paddle
import numpy as np
from paddle.nn import Conv2D, MaxPool2D, Linear## 组网
import paddle.nn.functional as F# 定义 LeNet 网络结构
class LeNet(paddle.nn.Layer):def __init__(self, num_classes=1):super(LeNet, self).__init__()# 创建卷积和池化层# 创建第1个卷积层self.conv1 = Conv2D(in_channels=1, out_channels=6, kernel_size=5)self.max_pool1 = MaxPool2D(kernel_size=2, stride=2)# 尺寸的逻辑:池化层未改变通道数;当前通道数为6# 创建第2个卷积层self.conv2 = Conv2D(in_channels=6, out_channels=16, kernel_size=5)self.max_pool2 = MaxPool2D(kernel_size=2, stride=2)# 创建第3个卷积层self.conv3 = Conv2D(in_channels=16, out_channels=120, kernel_size=4)# 尺寸的逻辑:输入层将数据拉平[B,C,H,W] -> [B,C*H*W]# 输入size是[28,28],经过三次卷积和两次池化之后,C*H*W等于120self.fc1 = Linear(in_features=120, out_features=64)# 创建全连接层,第一个全连接层的输出神经元个数为64, 第二个全连接层输出神经元个数为分类标签的类别数self.fc2 = Linear(in_features=64, out_features=num_classes)# 网络的前向计算过程def forward(self, x):x = self.conv1(x)# 每个卷积层使用Sigmoid激活函数,后面跟着一个2x2的池化x = F.sigmoid(x)x = self.max_pool1(x)x = F.sigmoid(x)x = self.conv2(x)x = self.max_pool2(x)x = self.conv3(x)# 尺寸的逻辑:输入层将数据拉平[B,C,H,W] -> [B,C*H*W]x = paddle.reshape(x, [x.shape[0], -1])x = self.fc1(x)x = F.sigmoid(x)x = self.fc2(x)return x

27、CNTK

0ac2c73a043c21b4447e78cdc279e572.gif

CNTK(Cognitive Toolkit) 是一个深度学习工具包,通过有向图将神经网络描述为一系列计算步骤。在这个有向图中,叶节点表示输入值或网络参数,而其他节点表示对其输入的矩阵运算。CNTK 可以轻松地实现和组合流行的模型类型,如 CNN 等。CNTK 用网络描述语言 (network description language, NDL) 描述一个神经网络。简单的说,要描述输入的 feature,输入的 label,一些参数,参数和输入之间的计算关系,以及目标节点是什么。

NDLNetworkBuilder=[run=ndlLRndlLR=[# sample and label dimensionsSDim=$dimension$LDim=1features=Input(SDim, 1)labels=Input(LDim, 1)# parameters to learnB0 = Parameter(4) W0 = Parameter(4, SDim)B = Parameter(LDim)W = Parameter(LDim, 4)# operationst0 = Times(W0, features)z0 = Plus(t0, B0)s0 = Sigmoid(z0)   t = Times(W, s0)z = Plus(t, B)s = Sigmoid(z)    LR = Logistic(labels, s)EP = SquareError(labels, s)# root nodesFeatureNodes=(features)LabelNodes=(labels)CriteriaNodes=(LR)EvalNodes=(EP)OutputNodes=(s,t,z,s0,W0)]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/22911.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

原生代码加载网络图片和Volley和Picasso的简单介绍和优缺点对比

网路下载图片,并以滚动列表的方式展示图片资源,是一种典型的Android App开发场景,但是如何更好的去实现这种效果一直是Android程序员所头疼的事情。比如,将下载的图片数据存储到本地,那就会造成一个原声Android代码的卡…

【历史上的今天】10 月 21 日:最短命的流媒体;Imgur 创始人出生;王安申请磁芯存储器专利

整理 | 王启隆 透过「历史上的今天」,从过去看未来,从现在亦可以改变未来。 今天是 2021 年 10 月 21 日,在 1883 年的今天,伊曼纽尔诺贝尔(Noble)诞生,以他命名的诺贝尔奖每年会授予世界各国在…

在AWS上部署、监控和扩展机器学习模型

作者|Aparna Dhinakaran 编译|Flin 来源|towardsdatascience 部署健壮的、可扩展的机器学习解决方案仍然是一个非常复杂的过程,需要大量的人力参与,并做出很多努力。因此,新产品和服务需要很长时间才能上市,或者在原型状态下就被放弃,从而降低了行业内的对它的兴趣。那么,…

使用Lambda和S3构建高度可扩展的Imgur克隆

因此,我之前两次尝试在一夜之间成为百万富翁的尝试已经失败了。 当然,我设法鼓起了一点兴奋,但是我还没有法拉利坐在我自己家的车道上…… 这第三次尝试肯定是赢家,对吗? 我将建立一个可以与流行图像托管网站Imgur媲…

php匿名图文贴程序,使用imgur api v3使用php匿名上传图像

我计划使用其api匿名上传图像到imgur,我在匿名上传类别中注册了我的应用程序,并获得客户端ID和客户端密码,如何使用php将图像上传到imgur并将图像直接检索到图像? 任何人都可以建议任何示例的链接? 这是我试图做的,但我得到错误“致命错误:最…

uPic 图床配置教程 - Imgur

uPic 图床配置教程 - Imgur 配置项说明Client ID 获取方式 配置项说明 Client ID: Applications Client ID Client ID 获取方式 1.打开Imgur 官网并登陆 2.进入应用注册页面 3.按要求填写表单信息 4.注意Authorization type选项必须选择OAuth 2 authorization without a cal…

在线图片托管服务imgur

免费的图片分享网站imgur 什么是imgur 网址:https://imgur.com/ Imgur于2009年由俄亥俄大学一位大三学生Alan Schaaf创办,很快就获得了很多人的关注。 Imgur是一个在线图片托管服务网站。网站于2009年2月23日由阿兰沙夫创建。Imgur为用户提供免费图片托管服务&a…

Wallpaper Engine 提取/导出原壁纸

文章目录 前言一、壁纸选取二、提取壁纸总结 前言 本教程基于大佬制作的pkg解压项目,为小白提供的简单教程,项目源地址 https://github.com/notscuffed/repkg 一、壁纸选取 打开 Wallpaper Engine, 选择想要提取的壁纸,右键选择…

微信壁纸小程序V1.2.0(自带后台上传图片)

前篇:微信壁纸头像小程序(附源码)_热衷与自由的博客-CSDN博客_头像小程序源码 前言 在上篇文章中,我给大家介绍了一个纯前端的微信壁纸小程序,也简单教会大家如何去搭建,但是这个小程序的图片是通过网上开放…

Wallpaper壁纸提取得到tex文件,tex文件转图像,tex文件转png,tex文件提取壁纸,Wallpaper壁纸提取无法得到图像文件,RePKG-GUI提取得到tex文件而不是图像的解决方法

之前我们介绍了如何利用RePKG-GUI工具从Wallpaper壁纸的sence.pkg文件提取壁纸,但最近在提取壁纸时,我发现,有一小部分壁纸无法利用RePKG-GUI工具提取得到图像文件,而是会得到一个.tex类型的文件。 Bug是怎么产生的暂时不知道&am…

一键提取Wallpaper Engine壁纸 pkg格式壁纸图片素材导出教程

wallpaper engineer下载的壁纸文件并不能直接查看,在资源管理器中打开后会有一个scene.pkg的文件中。并不能打开,网上搜了些解决办法,记录一下。 软件下载链接如下: 点我下载 提取码:kwft 下载后直接解压点击RePKG-GU…

(转载)《HelloGitHub》第 82 期

《HelloGitHub》第 82 期 原文链接:HelloGitHub|第 82 期https://hellogithub.com/periodical/volume/82 HelloGitHub 分享 GitHub 上有趣、入门级的开源项目,每月 28 号更新一期。 这里有好玩和入门级的开源项目、开源书籍、实战项目、企业…

23/04/16使用pyecharts绘制中国地图并显示城市

需求 近日几个高中朋友都上岸研究生,某人提议做一个求学路线图,这种技术活儿当然就交给我了。 一共是两幅图,本科城市分布图和研究生城市分布图背景是中国地图在地图中标记大学所在城市在标记点上显示每个人的头像附录显示大学名称每个人本…

ChatGPT中的提示工程(Prompt)怎么做?DAIR.AI最新《提示工程指南》,全面讲述提示技术,附书册课件视频...

来源:专知 提示工程是一门相对较新的学科,用于开发和优化提示,以有效地将语言模型(LM)用于各种应用和研究主题。提示工程技能有助于更好地理解大型语言模型(LLM)的能力和局限性。 研究人员使用prompt engineering来提高LLM在广泛的常见和复杂…

ChatGPT引发混乱!数千种期刊:它不能成为论文作者

本文来源:艾思科蓝整理自财新网、卫报、中国科学报、百度百科,编辑:募格学术 ChatGPT诞生才两个月,但它给全世界投下的「重磅炸弹」就没停下来过。 日前,中国人民大学首都发展与战略研究院副院长郭英剑也发表了题为“2…

【算法动画图解】:安利一款昨天发现的app

偶然看到一个app:算法动画图解,用动画的形式帮你把基础算法捋一遍,个人觉得很赞。 如下是目录。后面有空我会逐个大类更新具体内容。 1、分类 (1)冒泡排序 (2)选择性排序 (3&…

chatgpt赋能python:如何用Python制作动画?

如何用Python制作动画? Python作为一种优秀的编程语言,可以用于不同领域的编程。其中,Python也可以被用于创建动画。使用Python的主要好处之一是其强大的Matplotlib库,它可以帮助我们更轻松地创建可视化效果。 什么是Matplotlib…

GAN生成漫画脸

最近对对抗生成网络GAN比较感兴趣,相关知识点文章还在编辑中,以下这个是一个练手的小项目~ (在原模型上做了,为了减少计算量让其好训练一些。) 一、导入工具包 import tensorflow as tf from tensorflow.keras import layersimport numpy a…

拥抱毒瘤 DDD!

点击关注公众号,Java干货及时送达👇 来源:小姐姐味道 牛B的人物,早已经厌倦了中英文混杂,他们更进一步,使用中英文缩写,对普通人进行降维打击。更厉害的,造就新的名词,并…

技术人的618种草书单,这些好书值得收藏

虽然才刚刚进入 6 月,但各大网店的 618 活动都已经悄悄拉开帷幕,最近图灵君收到读者们的催更,希望我们推荐一些值得购买的书,想趁着 618 期间下手,于是火速响应大家的需求,集结了各方数据,整理出…