在前面几篇博客的学习之后,你应该了解了如何写出Tensorflow有关的代码,如何在Tensorflow中搭建一个层以及如何在Tensorflow之中实现前向推理(链接),也了解了Tensorflow有关的数据形式(链接)
今天,我们要把这些内容放在一起,搭建一个真正的神经网络密集负载,其实就是用tensorflow的一些库函数简化了代码,同时会采用一种不同且更加简单的方式。
x = np.array([[200.0, 17.0]])
layer_1 = Dense(units=3, activation='sigmoid')
a_1 = layer_1(x)
layer_2 = Dense(units=1, activation='sigmoid')
a_2 = layer_2(a_1)
之前构建神经网络的做法是,先创建了特征向量,再分别构建隐藏层和最终输出层,然后一步一步前向传播最终得到预测值。这是一种显式的构建方式。
事实上,Tensorflow有多种不同的方式来实现前向传播以及学习方式,让我来展示一种:
和以前一样的是创建层:
layer_1 = Dense(units=3, activation='sigmoid')
layer_2 = Dense(units=1, activation='sigmoid')
但现在不是手动获取数据并传入第一层,然后再手动传入第二层等等,相反,我们可以告诉Tensorflow,希望它采用第一层和第二层并且串在一起形成一个神经网络,写法为:
model = Sequential([layer_1, layer_2])
简单点说,以上代码就是告诉Tensorflow,把这俩层按照顺序串联好。事实证明,使用Sequential框架可以做很多事情,假设你有这么一个咖啡的例子(不了解的可以看我上面的链接,以前提到过):
你可以将x存储为矩阵:
x = np.array([[200, 17],
[120, 5],
[425, 20],
[212, 18]])
你也可以将y存储为矩阵,采取的形式为一维数组:
y = np.array([1,0,0,1])
然后将以前的一大堆内容简化为了这三个库函数:
model.compile(...)
model.fit(x, y)
model.predict(x_new)
如果你想运行这个神经网络,且你想调用一些参数,那么可以使用model.compile(以后详细讲)
model.fit(x, y),它可以告诉Tensorflow按照顺序将第一层和第二层串联在一起搭建神经网络并进行拟合。
假设你有一组新的特征向量x_new,你可以用model.predict(x_new)来进行预测。
layer_1 = Dense(units=3, activation='sigmoid')
layer_2 = Dense(units=1, activation='sigmoid')
model = Sequential([layer_1, layer_2])
所有一般来说,以上三行显式的代码在定义完之后不用重复写了,因为可以使用:
model.compile(...)
model.fit(x, y)
model.predict(x_new)
的形式来隐式表示,里面可以具体定义有几层,每层各多少神经元,用的什么激活函数之类的
让我们也用以上方法重新写下以前博客写过的数字分类(可以在我的博客中找到)
第一步定义下各层:
layer_1 = Dense(units=25, activation='sigmoid')
layer_2 = Dense(units=15, activation='sigmoid')
layer_3 = Dense(units=1, activation='sigmoid')
第二步使用Squential把三层串联在一起:
model = Sequential([layer_1, layer_2, layer_3])
第三步使用compile定义具体参数:
model.compile(...)
第四步定义下数据集:
x = np.array([[0.0,...245,...240,...0]
[0.0,...200,...184,...0]])
y = np.array([1, 0])
第五步进行拟合:
model.fit(x, y)
第六步进行预测:
model.predict(x_new)
一二步代码可以用嵌套的形式,更加简接:
model = Squential([
Dense(units = 25, activation = 'sigmoid'),
Dense(units = 15, activation = 'sigmoid'),
Dense(units = 1, activation = 'sigmoid')
])
为了给读者你造成不必要的麻烦,博主的所有视频都没开仅粉丝可见,如果想要阅读我的其他博客,可以点个小小的关注哦。