4 一个工程了解Keras序贯模型-线性回归与分类任务
【用到的】
本节中涉及到的序贯模型的方法:
五步:添加层,删除层、编译、训练、评估、预测、
工具:训练、评估、预测 数据生成器函数:
1 add(self, layer) 2 3 pop(self) 4 5 compile(self, optimizer, loss, metrics=None, sample_weight_mode=None) 6 7 fit(self, x, y, batch_size=32, epochs=10, verbose=1, callbacks=None, validation_split=0.0, validation_data=None, shuffle=True, class_weight=None, sample_weight=None, initial_epoch=0) 8 9 evaluate(self, x, y, batch_size=32, verbose=1, sample_weight=None) 10 11 predict(self, x, batch_size=32, verbose=0) 12 13 train_on_batch(self, x, y, class_weight=None, sample_weight=None) 14 15 test_on_batch(self, x, y, sample_weight=None) 16 17 predict_on_batch(self, x) 18 19 fit_generator(self, generator, steps_per_epoch, epochs=1, verbose=1, callbacks=None, validation_data=None, validation_steps=None, class_weight=None, max_q_size=10, workers=1, pickle_safe=False, initial_epoch=0) 20 21 evaluate_generator(self, generator, steps, max_q_size=10, workers=1, pickle_safe=False) 22 23 predict_generator(self, generator, steps, max_q_size=10, workers=1, pickle_safe=False, verbose=0)
Dense()
第一个参数:输出节点数
uints,input_dim,input_shape ?
【简单的例子-硬上神经网络做线性回归】-改编自网上的例子,可将代码复制到Jupyter中,执行查看显示结果
1 import numpy as np 2 np.random.seed(1337) 3 from keras.models import Sequential 4 from keras.layers import Dense 5 import matplotlib.pyplot as plt 6 7 # 生成200组数据 8 X = np.linspace(-1, 1, 200) #在返回(-1, 1)范围内的等差序列 9 np.random.shuffle(X) # 打乱顺序 10 Y = 0.5 * X + 2 + np.random.normal(0, 0.05, (200, )) #生成Y并添加噪声 11 # plot 12 plt.scatter(X, Y) 13 plt.show() 14 15 X_train, Y_train = X[:160], Y[:160] # 前160组数据为训练数据集 16 X_test, Y_test = X[160:], Y[160:] #后40组数据为测试数据集 17 18 # 构建神经网络模型 19 model = Sequential() 20 model.add(Dense(20,input_shape=(1,)))#第一隐藏层20个节点 21 model.add(Dense(1))#第二层1个节点 22 23 # 选定loss函数和优化器 24 model.compile(loss='mse', optimizer='sgd') 25 26 # 训练过程 27 print('Training -----------') 28 for step in range(501): 29 cost = model.train_on_batch(X_train, Y_train) 30 if step % 50 == 0: 31 print("After %d trainings, the cost: %f" % (step, cost)) 32 33 # 测试过程 34 print('\nTesting ------------') 35 cost = model.evaluate(X_test, Y_test, batch_size=40) 36 print('test cost:', cost) 37 W1, b1 = model.layers[0].get_weights() 38 print('Weights=', W1, '\nbiases=', b1) 39 40 W2, b2 = model.layers[1].get_weights() 41 print('Weights=', W2, '\nbiases=', b2) 42 43 # 将训练结果绘出 44 Y_pred = model.predict(X_test) 45 plt.scatter(X_test, Y_test) 46 plt.plot(X_test, Y_pred) 47 plt.show()
【正常的工程代码】
1 from keras.models import Sequential # 导入序冠模型
2 from keras.layers import Dense, Dropout, Activation # 导入全连接层 、、激活函数
3 from keras.optimizers import SGD # 导入随机梯度下降
4
5 # 生成训练和测试数据
6 import numpy as np
7 x_train = np.random.random((1000, 20)) #random.random()生成0和1之间的随机浮点数float
8 y_train = keras.utils.to_categorical(np.random.randint(10, size=(1000, 1)), num_classes=10) #to_categorical函数将类别向量(从0到nb_classes的整数向量)映射为二值类别矩阵, 用于应用到以categorical_crossentropy为目标函数的模型中.
9 x_test = np.random.random((100, 20))
10 y_test = keras.utils.to_categorical(np.random.randint(10, size=(100, 1)), num_classes=10)
11
12 model = Sequential()
13 # Dense(64) is a fully-connected layer with 64 hidden units.
14 # in the first layer, you must specify the expected input data shape:
15 # here, 20-dimensional vectors.
16 model.add(Dense(64, activation='relu', input_dim=20))
17 model.add(Dropout(0.5))
18 model.add(Dense(64, activation='relu'))
19 model.add(Dropout(0.5))
20 model.add(Dense(10, activation='softmax'))
21
22 sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)
23 model.compile(loss='categorical_crossentropy',
24 optimizer=sgd,
25 metrics=['accuracy'])
26
27 model.fit(x_train, y_train,
28 epochs=20,
29 batch_size=128)
30 score = model.evaluate(x_test, y_test, batch_size=128)
【序贯模型另一种用法】直接在定义是加入各层,不用调用model.add()方法
1 from keras.models import Sequential 2 from keras.layers import Dense, Activation 3 4 model = Sequential([ 5 Dense(32, units=784), 6 Activation('relu'), 7 Dense(10), 8 Activation('softmax'), 9 ])
【疑问】:
【如何评估损失符合要求】

浙公网安备 33010602011771号