如何使用Keras Functional API进行深度学习

Keras Python库使创建深度学习模型变得又快又简单。

顺序API允许你针对大多数问题逐层创建模型。它的局限性在于不允许创建共享层或具有多个输入或输出的模型。

Keras中的Functional API是创建模型的另一种方式,它提供了更大的灵活性,包括创建更复杂的模型。

在本教程中,你将了解如何使用Keras中更灵活的函数式API来定义深度学习模型。

完成本教程后,你将了解:

  • 顺序API和函数式API之间的区别。
  • 如何使用函数式API定义简单的多层感知器、卷积神经网络和递归神经网络模型。
  • 如何定义更复杂的具有共享层和多个输入输出的模型。

我们开始吧。

教程概述

本教程分为7个部分,它们是:

  • Keras序贯模型。
  • Keras函数模型。
  • 标准网络模型。
  • 共享层模型。
  • 多种投入产出模式。
  • 最佳做法。
  • 新增:关于函数式API Python语法的说明。

1.Keras序贯模型

作为回顾,Keras提供了一个Sequential模型API。

如果你是KERS或深度学习的新手,请参阅此Keras分步教程。

Sequential model API是一种创建深度学习模型的方法,其中创建了Sequential类的实例,并创建了模型层并将其添加到其中。

例如,可以定义层并将其作为数组传递给Sequential:

from keras.models import Sequential
from keras.layers import Dense
model = Sequential([Dense(2, input_dim=1), Dense(1)])

也可以分段添加层:

from keras.models import Sequential
from keras.layers import Dense
model = Sequential()
model.add(Dense(2, input_dim=1))
model.add(Dense(1))

在大多数情况下,Sequential model API非常适合开发深度学习模型,但它也有一些限制。

例如,定义可能具有多个不同输入源、产生多个输出目的地或重用层的模型并不简单。

2.Keras功能模型

Keras Functional API为定义模型提供了更灵活的方式。

它特别允许你定义多个输入或输出模型以及共享层的模型。不仅如此,它还允许你定义即席非循环网络图。

定义模型的方法是:创建层的实例并将它们成对直接相互连接,然后定义一个模型,该模型指定要作为模型的输入和输出的层。

让我们依次了解Keras Functional API的三个独特方面:

1.定义输入

与顺序模型不同,你必须创建和定义指定输入数据形状的独立输入层。

输入层采用形状参数,该参数是指示输入数据维数的元组。

当输入数据是一维时,例如对于多层感知器,形状必须明确地为训练网络时拆分数据时使用的小批量大小的形状留出空间。因此,当输入为一维(2,)时,形状元组始终定义为悬挂的最后一个维度,例如:

from keras.layers import Input
visible = Input(shape=(2,))

2.连接层

模型中的层是成对连接的。

这是通过在定义每个新图层时指定输入来自何处来实现的。使用方括号表示法,以便在创建层之后,指定当前层的输入来自的层。

让我们用一个简短的例子来说明这一点。我们可以如上所述创建输入层,然后创建一个隐藏层作为只从输入层接收输入的密集层。

from keras.layers import Input
from keras.layers import Dense
visible = Input(shape=(2,))
hidden = Dense(2)(visible)

请注意创建密集层后的(可见),该密集层将输入层输出作为输入连接到密集隐藏层。

正是这种逐段连接层的方式为函数API提供了灵活性。例如,你可以看到开始定义图层的即席图形是多么容易。

3.创建模型

创建所有模型层并将它们连接在一起后,必须定义模型。

与Sequential API一样,模型是你可以总结、拟合、评估和用来进行预测的东西。

Keras提供了一个模型类,你可以使用该类从创建的层创建模型。它只要求你指定输入和输出层。例如:

from keras.models import Model
from keras.layers import Input
from keras.layers import Dense
visible = Input(shape=(2,))
hidden = Dense(2)(visible)
model = Model(inputs=visible, outputs=hidden)

现在我们已经了解了Kera Functional API的所有关键部分,接下来让我们定义一套不同的模型并建立一些实践。

每个示例都是可执行的,并打印结构并创建图形的图表。我建议对你自己的模型执行此操作,以明确你定义的确切内容。

我希望当你将来想要使用Functional API定义你自己的模型时,这些示例能够为你提供模板。

3.标准网络模型

在开始使用Functional API时,最好看看一些标准神经网络模型是如何定义的。

在本节中,我们将介绍如何定义一个简单的多层感知器、卷积神经网络和递归神经网络。

这些示例将为稍后理解更详细的示例提供基础。

多层感知器

在本节中,我们定义了一个用于二进制分类的多层感知器模型。

该模型有10个输入,3个隐含10、20和10个神经元的隐层,以及1个输出的输出层。在每个隐含层使用校正的线性激活函数,在输出层使用Sigmoid激活函数,用于二值分类。

# Multilayer Perceptron
from keras.utils import plot_model
from keras.models import Model
from keras.layers import Input
from keras.layers import Dense
visible = Input(shape=(10,))
hidden1 = Dense(10, activation='relu')(visible)
hidden2 = Dense(20, activation='relu')(hidden1)
hidden3 = Dense(10, activation='relu')(hidden2)
output = Dense(1, activation='sigmoid')(hidden3)
model = Model(inputs=visible, outputs=output)
# summarize layers
print(model.summary())
# plot graph
plot_model(model, to_file='multilayer_perceptron_graph.png')

运行该示例将打印网络结构。

_________________________________________________________________
Layer (type)                 Output Shape              Param #
=================================================================
input_1 (InputLayer)         (None, 10)                0
_________________________________________________________________
dense_1 (Dense)              (None, 10)                110
_________________________________________________________________
dense_2 (Dense)              (None, 20)                220
_________________________________________________________________
dense_3 (Dense)              (None, 10)                210
_________________________________________________________________
dense_4 (Dense)              (None, 1)                 11
=================================================================
Total params: 551
Trainable params: 551
Non-trainable params: 0
_________________________________________________________________

还会创建模型图形的绘图并将其保存到文件中。

多层感知器网络图
多层感知器网络图

卷积神经网络。

在本节中,我们将定义一个用于图像分类的卷积神经网络。

该模型接收64×64黑白图像作为输入,然后由两个卷积和汇集层组成的序列作为特征提取器,然后是用于解释特征的全连通层和用于两类预测的具有S形激活的输出层。

# Convolutional Neural Network
from keras.utils import plot_model
from keras.models import Model
from keras.layers import Input
from keras.layers import Dense
from keras.layers import Flatten
from keras.layers.convolutional import Conv2D
from keras.layers.pooling import MaxPooling2D
visible = Input(shape=(64,64,1))
conv1 = Conv2D(32, kernel_size=4, activation='relu')(visible)
pool1 = MaxPooling2D(pool_size=(2, 2))(conv1)
conv2 = Conv2D(16, kernel_size=4, activation='relu')(pool1)
pool2 = MaxPooling2D(pool_size=(2, 2))(conv2)
flat = Flatten()(pool2)
hidden1 = Dense(10, activation='relu')(flat)
output = Dense(1, activation='sigmoid')(hidden1)
model = Model(inputs=visible, outputs=output)
# summarize layers
print(model.summary())
# plot graph
plot_model(model, to_file='convolutional_neural_network.png')

运行该示例汇总了模型层。

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
input_1 (InputLayer)         (None, 64, 64, 1)         0         
_________________________________________________________________
conv2d_1 (Conv2D)            (None, 61, 61, 32)        544       
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 30, 30, 32)        0         
_________________________________________________________________
conv2d_2 (Conv2D)            (None, 27, 27, 16)        8208      
_________________________________________________________________
max_pooling2d_2 (MaxPooling2 (None, 13, 13, 16)        0         
_________________________________________________________________
flatten_1 (Flatten)          (None, 2704)              0         
_________________________________________________________________
dense_1 (Dense)              (None, 10)                27050     
_________________________________________________________________
dense_2 (Dense)              (None, 1)                 11        
=================================================================
Total params: 35,813
Trainable params: 35,813
Non-trainable params: 0
_________________________________________________________________

还会创建模型图形的绘图并将其保存到文件中。

卷积神经网络图
卷积神经网络图

递归神经网络

在这一部分中,我们将定义一个用于序列分类的长短期记忆递归神经网络。

该模型期望一个特征的100个时间步长作为输入。该模型具有用于从序列中提取特征的单个LSTM隐藏层,接着是用于解释LSTM输出的完全连通层,接着是用于进行二元预测的输出层。

# Recurrent Neural Network
from keras.utils import plot_model
from keras.models import Model
from keras.layers import Input
from keras.layers import Dense
from keras.layers.recurrent import LSTM
visible = Input(shape=(100,1))
hidden1 = LSTM(10)(visible)
hidden2 = Dense(10, activation='relu')(hidden1)
output = Dense(1, activation='sigmoid')(hidden2)
model = Model(inputs=visible, outputs=output)
# summarize layers
print(model.summary())
# plot graph
plot_model(model, to_file='recurrent_neural_network.png')

运行该示例汇总了模型层。

_________________________________________________________________
Layer (type)                 Output Shape              Param #
=================================================================
input_1 (InputLayer)         (None, 100, 1)            0
_________________________________________________________________
lstm_1 (LSTM)                (None, 10)                480
_________________________________________________________________
dense_1 (Dense)              (None, 10)                110
_________________________________________________________________
dense_2 (Dense)              (None, 1)                 11
=================================================================
Total params: 601
Trainable params: 601
Non-trainable params: 0
_________________________________________________________________

还会创建模型图形的绘图并将其保存到文件中。

递归神经网络图
递归神经网络图

4.共享层模型

多个层可以共享一个层的输出。

例如,一个输入可能有多个不同的要素提取图层,或者可能有多个图层用于解释要素提取图层的输出。

让我们来看看这两个例子。

共享输入图层

在本节中,我们定义具有不同大小的核的多个卷积层来解释图像输入。

该模型拍摄大小为64×64像素的黑白图像。有两个CNN特征提取子模型共享此输入;第一个核大小为4,第二个核大小为8。这些特征提取子模型的输出被展平成向量,并连接成一个长向量,并在最终输出层进行二进制分类之前传递到完全连接层进行解释。

# Shared Input Layer
from keras.utils import plot_model
from keras.models import Model
from keras.layers import Input
from keras.layers import Dense
from keras.layers import Flatten
from keras.layers.convolutional import Conv2D
from keras.layers.pooling import MaxPooling2D
from keras.layers.merge import concatenate
# input layer
visible = Input(shape=(64,64,1))
# first feature extractor
conv1 = Conv2D(32, kernel_size=4, activation='relu')(visible)
pool1 = MaxPooling2D(pool_size=(2, 2))(conv1)
flat1 = Flatten()(pool1)
# second feature extractor
conv2 = Conv2D(16, kernel_size=8, activation='relu')(visible)
pool2 = MaxPooling2D(pool_size=(2, 2))(conv2)
flat2 = Flatten()(pool2)
# merge feature extractors
merge = concatenate([flat1, flat2])
# interpretation layer
hidden1 = Dense(10, activation='relu')(merge)
# prediction output
output = Dense(1, activation='sigmoid')(hidden1)
model = Model(inputs=visible, outputs=output)
# summarize layers
print(model.summary())
# plot graph
plot_model(model, to_file='shared_input_layer.png')

运行该示例汇总了模型层。

____________________________________________________________________________________________________
Layer (type)                     Output Shape          Param #     Connected to
====================================================================================================
input_1 (InputLayer)             (None, 64, 64, 1)     0
____________________________________________________________________________________________________
conv2d_1 (Conv2D)                (None, 61, 61, 32)    544         input_1[0][0]
____________________________________________________________________________________________________
conv2d_2 (Conv2D)                (None, 57, 57, 16)    1040        input_1[0][0]
____________________________________________________________________________________________________
max_pooling2d_1 (MaxPooling2D)   (None, 30, 30, 32)    0           conv2d_1[0][0]
____________________________________________________________________________________________________
max_pooling2d_2 (MaxPooling2D)   (None, 28, 28, 16)    0           conv2d_2[0][0]
____________________________________________________________________________________________________
flatten_1 (Flatten)              (None, 28800)         0           max_pooling2d_1[0][0]
____________________________________________________________________________________________________
flatten_2 (Flatten)              (None, 12544)         0           max_pooling2d_2[0][0]
____________________________________________________________________________________________________
concatenate_1 (Concatenate)      (None, 41344)         0           flatten_1[0][0]
                                                                   flatten_2[0][0]
____________________________________________________________________________________________________
dense_1 (Dense)                  (None, 10)            413450      concatenate_1[0][0]
____________________________________________________________________________________________________
dense_2 (Dense)                  (None, 1)             11          dense_1[0][0]
====================================================================================================
Total params: 415,045
Trainable params: 415,045
Non-trainable params: 0
____________________________________________________________________________________________________

还会创建模型图形的绘图并将其保存到文件中。

具有共享输入的神经网络图
具有共享输入的神经网络图

共享要素提取图层

在本节中,我们将使用两个并行的子模型来解释用于序列分类的LSTM特征提取器的输出。

模型的输入是1个特征的100个时间步长。具有10个存储单元的LSTM层解释该序列。第一种解释模型为浅层单层全连通模型,第二种解释模型为深3层模型。两个解释模型的输出被连接成一个长向量,该向量被传递到用于进行二进制预测的输出层。

# Shared Feature Extraction Layer
from keras.utils import plot_model
from keras.models import Model
from keras.layers import Input
from keras.layers import Dense
from keras.layers.recurrent import LSTM
from keras.layers.merge import concatenate
# define input
visible = Input(shape=(100,1))
# feature extraction
extract1 = LSTM(10)(visible)
# first interpretation model
interp1 = Dense(10, activation='relu')(extract1)
# second interpretation model
interp11 = Dense(10, activation='relu')(extract1)
interp12 = Dense(20, activation='relu')(interp11)
interp13 = Dense(10, activation='relu')(interp12)
# merge interpretation
merge = concatenate([interp1, interp13])
# output
output = Dense(1, activation='sigmoid')(merge)
model = Model(inputs=visible, outputs=output)
# summarize layers
print(model.summary())
# plot graph
plot_model(model, to_file='shared_feature_extractor.png')

运行该示例汇总了模型层。

____________________________________________________________________________________________________
Layer (type)                     Output Shape          Param #     Connected to
====================================================================================================
input_1 (InputLayer)             (None, 100, 1)        0
____________________________________________________________________________________________________
lstm_1 (LSTM)                    (None, 10)            480         input_1[0][0]
____________________________________________________________________________________________________
dense_2 (Dense)                  (None, 10)            110         lstm_1[0][0]
____________________________________________________________________________________________________
dense_3 (Dense)                  (None, 20)            220         dense_2[0][0]
____________________________________________________________________________________________________
dense_1 (Dense)                  (None, 10)            110         lstm_1[0][0]
____________________________________________________________________________________________________
dense_4 (Dense)                  (None, 10)            210         dense_3[0][0]
____________________________________________________________________________________________________
concatenate_1 (Concatenate)      (None, 20)            0           dense_1[0][0]
                                                                   dense_4[0][0]
____________________________________________________________________________________________________
dense_5 (Dense)                  (None, 1)             21          concatenate_1[0][0]
====================================================================================================
Total params: 1,151
Trainable params: 1,151
Non-trainable params: 0
____________________________________________________________________________________________________

还会创建模型图形的绘图并将其保存到文件中。

具有共享特征提取层的神经网络图
具有共享特征提取层的神经网络图

5.多种投入产出模式

功能性API还可以用于开发具有多个输入(可能具有不同的模态)的更复杂的模型。它还可以用于开发产生多个输出的模型。

我们将在本节中查看每种类型的示例。

多输入模型

我们将开发一个图像分类模型,该模型接受图像的两个版本作为输入,每个版本的大小不同。特别是黑白64×64版和彩色32×32版。单独的特征提取CNN模型分别对每个模型进行操作,然后将两个模型的结果连接起来进行解释和最终预测。

请注意,在创建Model()实例时,我们将两个输入层定义为数组。具体而言:

model = Model(inputs=[visible1, visible2], outputs=output)

下面列出了完整的示例。

# Multiple Inputs
from keras.utils import plot_model
from keras.models import Model
from keras.layers import Input
from keras.layers import Dense
from keras.layers import Flatten
from keras.layers.convolutional import Conv2D
from keras.layers.pooling import MaxPooling2D
from keras.layers.merge import concatenate
# first input model
visible1 = Input(shape=(64,64,1))
conv11 = Conv2D(32, kernel_size=4, activation='relu')(visible1)
pool11 = MaxPooling2D(pool_size=(2, 2))(conv11)
conv12 = Conv2D(16, kernel_size=4, activation='relu')(pool11)
pool12 = MaxPooling2D(pool_size=(2, 2))(conv12)
flat1 = Flatten()(pool12)
# second input model
visible2 = Input(shape=(32,32,3))
conv21 = Conv2D(32, kernel_size=4, activation='relu')(visible2)
pool21 = MaxPooling2D(pool_size=(2, 2))(conv21)
conv22 = Conv2D(16, kernel_size=4, activation='relu')(pool21)
pool22 = MaxPooling2D(pool_size=(2, 2))(conv22)
flat2 = Flatten()(pool22)
# merge input models
merge = concatenate([flat1, flat2])
# interpretation model
hidden1 = Dense(10, activation='relu')(merge)
hidden2 = Dense(10, activation='relu')(hidden1)
output = Dense(1, activation='sigmoid')(hidden2)
model = Model(inputs=[visible1, visible2], outputs=output)
# summarize layers
print(model.summary())
# plot graph
plot_model(model, to_file='multiple_inputs.png')

运行该示例汇总了模型层。

____________________________________________________________________________________________________
Layer (type)                     Output Shape          Param #     Connected to
====================================================================================================
input_1 (InputLayer)             (None, 64, 64, 1)     0
____________________________________________________________________________________________________
input_2 (InputLayer)             (None, 32, 32, 3)     0
____________________________________________________________________________________________________
conv2d_1 (Conv2D)                (None, 61, 61, 32)    544         input_1[0][0]
____________________________________________________________________________________________________
conv2d_3 (Conv2D)                (None, 29, 29, 32)    1568        input_2[0][0]
____________________________________________________________________________________________________
max_pooling2d_1 (MaxPooling2D)   (None, 30, 30, 32)    0           conv2d_1[0][0]
____________________________________________________________________________________________________
max_pooling2d_3 (MaxPooling2D)   (None, 14, 14, 32)    0           conv2d_3[0][0]
____________________________________________________________________________________________________
conv2d_2 (Conv2D)                (None, 27, 27, 16)    8208        max_pooling2d_1[0][0]
____________________________________________________________________________________________________
conv2d_4 (Conv2D)                (None, 11, 11, 16)    8208        max_pooling2d_3[0][0]
____________________________________________________________________________________________________
max_pooling2d_2 (MaxPooling2D)   (None, 13, 13, 16)    0           conv2d_2[0][0]
____________________________________________________________________________________________________
max_pooling2d_4 (MaxPooling2D)   (None, 5, 5, 16)      0           conv2d_4[0][0]
____________________________________________________________________________________________________
flatten_1 (Flatten)              (None, 2704)          0           max_pooling2d_2[0][0]
____________________________________________________________________________________________________
flatten_2 (Flatten)              (None, 400)           0           max_pooling2d_4[0][0]
____________________________________________________________________________________________________
concatenate_1 (Concatenate)      (None, 3104)          0           flatten_1[0][0]
                                                                   flatten_2[0][0]
____________________________________________________________________________________________________
dense_1 (Dense)                  (None, 10)            31050       concatenate_1[0][0]
____________________________________________________________________________________________________
dense_2 (Dense)                  (None, 10)            110         dense_1[0][0]
____________________________________________________________________________________________________
dense_3 (Dense)                  (None, 1)             11          dense_2[0][0]
====================================================================================================
Total params: 49,699
Trainable params: 49,699
Non-trainable params: 0
____________________________________________________________________________________________________

还会创建模型图形的绘图并将其保存到文件中。

多输入神经网络图
多输入神经网络图

多输出模型

在本节中,我们将开发一个做出两种不同类型预测的模型。在给定一个特征的100个时间步长的输入序列的情况下,该模型将对该序列进行分类并输出相同长度的新序列。

LSTM层解释输入序列并返回每个时间步的隐藏状态。第一个输出模型创建堆叠的LSTM,解释特征,并进行二进制预测。第二个输出模型使用相同的输出层对每个输入时间步长进行实值预测。

# Multiple Outputs
from keras.utils import plot_model
from keras.models import Model
from keras.layers import Input
from keras.layers import Dense
from keras.layers.recurrent import LSTM
from keras.layers.wrappers import TimeDistributed
# input layer
visible = Input(shape=(100,1))
# feature extraction
extract = LSTM(10, return_sequences=True)(visible)
# classification output
class11 = LSTM(10)(extract)
class12 = Dense(10, activation='relu')(class11)
output1 = Dense(1, activation='sigmoid')(class12)
# sequence output
output2 = TimeDistributed(Dense(1, activation='linear'))(extract)
# output
model = Model(inputs=visible, outputs=[output1, output2])
# summarize layers
print(model.summary())
# plot graph
plot_model(model, to_file='multiple_outputs.png')

运行该示例汇总了模型层。

____________________________________________________________________________________________________
Layer (type)                     Output Shape          Param #     Connected to
====================================================================================================
input_1 (InputLayer)             (None, 100, 1)        0
____________________________________________________________________________________________________
lstm_1 (LSTM)                    (None, 100, 10)       480         input_1[0][0]
____________________________________________________________________________________________________
lstm_2 (LSTM)                    (None, 10)            840         lstm_1[0][0]
____________________________________________________________________________________________________
dense_1 (Dense)                  (None, 10)            110         lstm_2[0][0]
____________________________________________________________________________________________________
dense_2 (Dense)                  (None, 1)             11          dense_1[0][0]
____________________________________________________________________________________________________
time_distributed_1 (TimeDistribu (None, 100, 1)        11          lstm_1[0][0]
====================================================================================================
Total params: 1,452
Trainable params: 1,452
Non-trainable params: 0
____________________________________________________________________________________________________

还会创建模型图形的绘图并将其保存到文件中。

具有多个输出的神经网络图
具有多个输出的神经网络图

6.最佳实践

在本节中,我想给你一些提示,以便你在定义自己的模型时最大限度地利用Functional API。

  • 变量名称一致。对输入(可见)层和输出层(输出)使用相同的变量名,甚至可能对隐藏层使用相同的变量名(idden1、idden2)。这将有助于将事物正确地连接在一起。
  • 查看图层摘要。始终打印模型摘要并查看图层输出,以确保模型按预期连接在一起。
  • 查看曲线图。始终创建模型图的曲线图并对其进行检查,以确保所有内容都按你的预期组合在一起。
  • 命名图层。可以为查看模型图形的摘要和绘图时使用的层指定名称。例如:Dense(1,name=‘idden1’)。
  • 分隔子模型。考虑分离子模型的开发,并在最后将子模型组合在一起。

7.关于函数API Python语法的说明

如果你是Python的新手或新手,Functional API中使用的语法可能会令人困惑。

例如,假设:

...
dense1 = Dense(32)(input)
...

双方括号语法有什么作用?

什么意思?

它看起来令人困惑,但它并不是一个特殊的Python东西,只是一行做两件事。

第一个括号“(32)”通过类构造函数创建层,第二个括号“(Input)”是通过__call__()函数实现的没有名称的函数,调用时将连接层。

__call__()函数是所有可以覆盖的Python对象的默认函数,用于“调用”实例化的对象。就像__init__()函数是在实例化对象以初始化它之后立即调用的所有对象上的默认函数一样。

我们可以用两行来做同样的事情:

# create layer
dense1 = Dense(32)
# connect layer to previous layer
dense1(input)

我想我们也可以显式调用对象上的__call__()函数,尽管我从未尝试过:

# create layer
dense1 = Dense(32)
# connect layer to previous layer
dense1.__call_(input)

进一步阅读

如果你想深入了解,本节提供了更多有关该主题的资源。

  • 序列模型API。
  • Keras Sequential模型入门。
  • Keras Functional API入门。
  • 模型类函数API。

摘要

在本教程中,你了解了如何使用Keras中的Functional API来定义简单和复杂的深度学习模型。

具体地说,你了解到:

  • 顺序API和函数式API之间的区别。
  • 如何使用函数式API定义简单的多层感知器、卷积神经网络和递归神经网络模型。
  • 如何定义更复杂的具有共享层和多个输入输出的模型。

00

Python

发表评论

邮箱地址不会被公开。 必填项已用*标注

什么阻碍了你实现迈入机器学习领域的目标?

什么阻碍了你实现迈入机器学习领域的目标?

2020-04-22 机器学习

如果你在为进入机器学习领域而挣扎,感觉到有什么东西阻止了自己的开始,那么你应该看看这篇文章。 在这篇文章中,我们会讨论阻止进入机器学习领域的自我限制的信念,让你明白面临的问题。 几乎总是一种自我限制的信念阻碍了你们的进步。 也许你会在一个或多个这样的信念中看到自己。如果是这样的话, [......]

了解详情

R语言机器学习迷你课程

R语言机器学习迷你课程

2020-08-12 机器学习

在这个迷你课程中,你将发现如何开始,构建精确的模型,并自信地完成在14天内使用R预测建模机器学习项目。 这是一个重要而重要的文章。你可能想把它书签。 了解如何准备数据,拟合机器学习模型,并用我的新书评估他们在r上的预测,包括14步教程、3个项目和完整源代码。 我们开始吧。 [......]

了解详情

关于机器学习的几点思考

关于机器学习的几点思考

2020-04-26 机器学习

机器学习是一个大的、跨学科的研究领域。 你可以通过机器学习获得令人印象深刻的结果,并找到非常具有挑战性的问题的解决方案。但这只是更广泛的机器学习领域的一小部分,通常被称为预测建模或预测分析。 在这篇文章中,你将发现如何改变你对机器学习的思考方式,以便更好地为你提供机器学习实践者的服务。 [......]

了解详情

找到你的机器学习部落

找到你的机器学习部落

2020-04-26 机器学习

机器学习是一个充满算法和数据的迷人而强大的研究领域。 问题是,有这么多不同类型的人对机器学习感兴趣,每个人都有不同的需求。重要的是要了解你想要从机器学习中得到什么,并根据这些需求调整你的自学。 如果你不这样做,你很容易就会陷入困境,迷失方向,失去兴趣,得不到你想要的东西。 找到 [......]

了解详情

应用机器学习过程

应用机器学习过程

2020-04-26 机器学习

随着时间的推移,在处理应用机器学习问题时,你会开发出一种模式或流程,以快速获得良好的正常结果。 一旦开发完成,你就可以在一个又一个项目上反复使用此过程。你的流程越健壮、越发达,你就能越快地获得可靠的结果。 在这篇文章中,我想与你分享我解决机器学习问题的过程框架。 你可以将其用作下一 [......]

了解详情