在计算z时,我所看到的将数据从一个神经网络层传播到下一个神经网络层背后的所有数学都是这样的:
z=θTx+b
但keras似乎偏离了这个标准。它接受行的样本数和列的特征数形式的输入矩阵,get_weights()
命令返回的矩阵形状仅满足等式z,如果满足以下条件:
z=xθ+b
给出以下网络学习输入维数为4x2、输出维数为4x1的异或门的示例:
from keras.models import Sequential
from keras.layers import Dense
import numpy as np
X = np.array([[0,0],
[1,0],
[0,1],
[1,1]])
Y = np.array([0,1,1,0])
model = Sequential()
model.add(Dense(10, input_dim=2, activation='sigmoid'))
model.add(Dense(10, activation='sigmoid'))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='sgd', metrics=['accuracy'])
model.fit(X, Y, epochs=100000, batch_size=4, verbose=0)
print model.get_weights()
print model.predict(X)
每层的模型权重为2x10、10x10和10x10。矩阵乘法不能满足第一个方程,但对第二个方程似乎有效。keras真的是这样处理它的神经网络计算还是我在代码中误解了什么?我的输入X维应该被转置吗?感谢任何帮助。在
设置权重(形状)的方法有问题。看看这个例子,取自here:
一切如期而至。请查看here编写的代码,并搜索密集类。在
为了让它更简单一点。。下面是两个重要的代码片段。 内核就是这样构建的
这就是乘法的原理
^{pr2}$如果你考虑这种方法,你的权重,输入尺寸等是如何定义的,那么这一切都是非常有意义的。 如果没有,请留下回复:)
相关问题 更多 >
编程相关推荐