点这里,搜索淘宝优惠券!
点这里,搜索淘宝优惠券!

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 ])                    

 

【疑问】:

  【如何评估损失符合要求】

  

posted @ 2018-09-05 13:41  chd_ailex  阅读(805)  评论(0)    收藏  举报