Keras文档学习01.序贯模型&数据尺寸&编译&训练

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/fantacy10000/article/details/83110080

关键词:Sequential、input_shape(input_dim)、compile(3个参数)、fit
参考地址:文档对应位置

1.两种搭建方法:
【1】可以通过向Sequential模型传递一个layer的list来构造该模型,就是“一次完成”:

from keras.models import Sequential
from keras.layers import Dense, Activation
model = Sequential([Dense(32, units=784), Activation('relu'), Dense(10), Activation('softmax'),])

【2】先定义一个Sequential对象,然后用add按网络结构添加,就是“累进完成”:

from keras.models import Sequential
from keras.layers import Dense, Activation
model = Sequential()
model.add(Dense(32, input_shape=(784,)))
model.add(Activation('relu'))

2.关于输入数据尺寸的方法:
模型需要知道输入数据的shape,因此Sequential的第一层需要接受一个关于输入数据shape的参数,后面的各个层则可以自动的推导出中间数据的shape,因此不需要为每个层都指定这个参数。
[1]传递一个input_shape的关键字参数给第一层,input_shape是一个tuple类型的数据,其中也可以填入None,如果填入None则表示此位置可能是任何正整数。数据的batch大小不应包含在其中。

model = Sequential()
model.add(Dense(32, input_shape=(784,)))

[2]有些2D层,如Dense,支持通过指定其输入维度input_dim来隐含的指定输入数据shape;
一些3D的时域层支持通过参数input_dim和input_length来指定输入shape。

model = Sequential()
model.add(Dense(32, input_dim=784))

[3]如果你需要为输入指定一个固定大小的batch_size(常用于stateful RNN网络),可以传递batch_size参数到一个层中,例如你想指定输入张量的batch大小是32,数据shape是(6,8),则你需要传递batch_size=32和input_shape=(6,8)。

3.编译
在训练模型之前,我们需要通过compile来对学习过程进行配置。compile接收三个参数:
①优化器optimizer ②损失函数loss ③指标列表metrics

# For a multi-class classification problem多分类问题
model.compile(optimizer='rmsprop',
              loss='categorical_crossentropy',
              metrics=['accuracy'])

# For a binary classification problem二分类问题
model.compile(optimizer='rmsprop',
              loss='binary_crossentropy',
              metrics=['accuracy'])

# For a mean squared error regression problem均方误差回归问题
model.compile(optimizer='rmsprop',
              loss='mse')

# For custom metrics自定义指标!!
import keras.backend as K

def mean_pred(y_true, y_pred):
    return K.mean(y_pred)

model.compile(optimizer='rmsprop',
              loss='binary_crossentropy',
              metrics=['accuracy', mean_pred])

4.训练
Keras以Numpy数组作为输入数据和标签的数据类型。训练模型一般使用fit函数。

# For a single-input model with 2 classes (binary classification):

model = Sequential()
model.add(Dense(32, activation='relu', input_dim=100))
model.add(Dense(1, activation='sigmoid'))
model.compile(optimizer='rmsprop',
              loss='binary_crossentropy',
              metrics=['accuracy'])

# Generate dummy data
import numpy as np
data = np.random.random((1000, 100))
labels = np.random.randint(2, size=(1000, 1))

# Train the model, iterating on the data in batches of 32 samples
model.fit(data, labels, epochs=10, batch_size=32)
# For a single-input model with 10 classes (categorical classification):

model = Sequential()
model.add(Dense(32, activation='relu', input_dim=100))
model.add(Dense(10, activation='softmax'))
model.compile(optimizer='rmsprop',
              loss='categorical_crossentropy',
              metrics=['accuracy'])

# Generate dummy data
import numpy as np
data = np.random.random((1000, 100))
labels = np.random.randint(10, size=(1000, 1))

# Convert labels to categorical one-hot encoding
one_hot_labels = keras.utils.to_categorical(labels, num_classes=10)

# Train the model, iterating on the data in batches of 32 samples
model.fit(data, one_hot_labels, epochs=10, batch_size=32)

猜你喜欢

转载自blog.csdn.net/fantacy10000/article/details/83110080