机器学习算法4:CNN卷积神经网络
data = datasets.load_digits() X_data = X_data.reshape((X_data.shape[0], X_data.shape[1], X_data.shape[2], 1)) // y_data = to_categorical(y_data) //将类别向量转换为二进制(只有0和1)的矩阵类型表示,其表现为将原有的类别向量转换为独热编码的形式。 # partition data into train/test sets X_train, X_test, y_train, y_test = train_test_split(X_data, y_data, test_size = 0.3, random_state = 777) //生成测试集和数据集 from keras.models import Sequential from keras import optimizers from keras.layers import Dense, Activation, Flatten, Conv2D, MaxPooling2D model = Sequential() # convolution layer 卷积层 model.add(Conv2D(input_shape = (X_data.shape[1], X_data.shape[2], X_data.shape[3]), filters = 10, kernel_size = (3,3), strides = (1,1), padding = 'valid'))
- input_shape: 比如训练样本是(6000,28,28,1), 则input_shape=(28,28,1)。
- filters: 整数,输出空间的维度 (即卷积中滤波器的数量)。
- kernel_size: 一个整数,或者 2 个整数表示的元组或列表, 指明 2D 卷积窗口的宽度和高度。 可以是一个整数,为所有空间维度指定相同的值。
- strides: 一个整数,或者 2 个整数表示的元组或列表, 指明卷积沿宽度和高度方向的步长。 可以是一个整数,为所有空间维度指定相同的值。
- padding:
"valid"或"same"(大小写敏感)。valid padding就是不padding,而same padding就是指padding完尺寸与原来相同
# activation layer 激活层 model.add(Activation('relu'))
激活函数(activation functions)的目标是,将神经网络非线性化。激活函数是连续的(continuous),且可导的(differential)。
常见的激活函数:sigmoid,tanh,relu。 # pooling layer 池化层 model.add(MaxPooling2D(pool_size = (2,2)))
池化核的尺寸(pool_size)默认是2×2 strides = None
# Dense (fully connected layer) 全连接层 model.add(Flatten()) //返回一个一维数组 prior layer should be flattend to be connected to dense layers
model.add(Dense(50, activation = 'relu')) // 50为该层的神经元个数,relu为该层使用的激活函数
model.add(Dense(10, activation = 'softmax')) //10为该层的神经元个数,softmax为该层使用的激活函数
adam = optimizers.Adam(lr = 0.001) //学习率learning rate为0.001
model.compile(loss = 'categorical_crossentropy', optimizer = adam, metrics = ['accuracy'])
目标函数或称损失函数(loss),是网络中的性能函数,也是编译一个模型必须的两个参数之一。损失函数种类众多,在官方keras.io里面,有如下资料:
-
mean_squared_error或mse
-
mean_absolute_error或mae
-
mean_absolute_percentage_error或mape
-
mean_squared_logarithmic_error或msle
-
squared_hinge
-
hinge
-
binary_crossentropy(亦称作对数损失,logloss)
-
categorical_crossentropy:亦称作多类的对数损失,注意使用该目标函数时,需要将标签转化为形如
(nb_samples, nb_classes)的二值序列 -
sparse_categorical_crossentrop:如上,但接受稀疏标签。注意,使用该函数时仍然需要你的标签与输出值的维度相同
-
kullback_leibler_divergence:从预测值概率分布q到真值概率分布P的信息增益,用以度量两个分布的差异.
-
cosine_proximity:即预测值与真实标签的余弦距离平均值的相反数
history = model.fit(X_train, y_train, batch_size = 50, validation_split = 0.2, epochs = 100, verbose = 0)
- batch_size:整数,指定进行梯度下降时每个batch包含的样本数。训练时一个batch的样本会被计算一次梯度下降,使目标函数优化一步。
- validation_split:0~1之间的浮点数,用来指定训练集的一定比例数据作为验证集。验证集将不参与训练,并在每个epoch结束后测试的模型的指标。
- epochs:整数,训练终止时的epoch值,训练将在达到该epoch值时停止,训练的总轮数为epochs - inital_epoch(该值默认为0)
- verbose:日志显示,0为不在标准输出流输出日志信息,1为输出进度条记录,2为每个epoch输出一行记录
results = model.evaluate(X_test, y_test) print('Test accuracy: ', results[1])
//报告结果//
预测准确度为97.78%


浙公网安备 33010602011771号