我试图用python做一些密集的神经网络机器学习。我在完成代码以计算权重和偏差的输出时遇到问题。当我在某个索引的权重和矩阵元素之间应用操作数*
时,我得到的错误是ValueError:操作数不能与形状(100784)(1000784,1)
一起广播。我是否对循环应用了错误的索引,或者我做错了什么请帮助。
##initialize the training and test arrays
train=np.empty((1000,28,28),dtype='float64')
trainY=np.zeros((1000,10,1))
test=np.empty((10000,28,28), dtype='float64')
testY=np.zeros((10000,10,1))
##reading image data into the training array
#load the images
i=0
for filename in os.listdir('Data/Training1000/'):
y=int(filename[0])
trainY[i,y]=1.0
train[i]=cv2.imread('Data/Training1000/{0}'.format(filename),0)/255.0
i+=1
##reading image data into the testing array
i=0
for filename in os.listdir('Data/Test10000'):
y = int(filename[0])
testY[i,y] = 1.0
test[i] = cv2.imread('Data/Test10000/{0}'.format(filename),0)/255.0
i=i+1
##reshape the training and testing arrays
trainX = train.reshape(train.shape[0],train.shape[1]*train.shape[2],1)
testX = test.reshape(test.shape[0],test.shape[1]*test.shape[2],1)
##section to declare the weights and the biases
w1 = np.random.uniform(low=-0.1,high=0.1,size=(numNeuronsLayer1,784))
b1 = np.random.uniform(low=-1,high=1,size=(numNeuronsLayer1,1))
w2 = np.random.uniform(low=-0.1,high=0.1,size=(numNeuronsLayer2,numNeuronsLayer1))
b2 = np.random.uniform(low=-0.1,high=0.1,size=(numNeuronsLayer2,1))
##declare the hidden layers
numNeuronsLayer1=100
numNeuronsLayer2=10
numEpochs=100
##declare a learning rate
learningRate = 0.1;
##do the forward pass on the weights and the biases
for n in range(0,numEpochs):
loss=0
trainX,trainY = shuffle(trainX, trainY)
for i in range(trainX.shape[0]):
##this is where I have a problem, the line below throws the error described above
##my first pass is declared a2
a2=w1*train[i]+w2*trainX[i]+b1
我如何在上面的循环中正确引用我的训练变量来消除广播错误,谢谢。
你很接近,但有几个问题。首先,你需要做矩阵乘法<代码>*将执行元素乘法(即,np.array([1,2,3])*np。数组([2,3,4])=np。数组([2,6,12])
。要使用numpy
进行矩阵乘法,可以使用@
运算符(即matrix1@matrix2
)或使用np。matmul
功能。
另一个问题是输入的形状。我不知道您为什么要在train.resporate(train.shape[0],train.shape[1]*train.shape[2],1)的末尾添加第三维(
1
)。您应该可以将其保留为矩阵(将其更改为train.reformate(train.shape[0],train.shape[1]*train.shape[2])
,更改测试。相应地重塑
。
最后,你的推论线有点不对劲:
a2=w1*trainX[i]w2*trainX[i]b1
您必须先计算
a1
,然后再计算a2
。矩阵乘法的一个重要部分是内部尺寸必须一致(即,不能将[100,50]和[100,50]形状的矩阵相乘,但可以将[100,50]和[50,60]形状的矩阵相乘,矩阵乘积的结果形状是每个矩阵的外部标记,在本例中为[100,60])。作为矩阵乘法的结果,您还可以摆脱for循环训练示例。所有示例都是同时计算的。因此,为了计算a1
,我们需要将w1
转换为右手变量。
a1 = ( trainX @ w1.transpose() ) + b1.transpose()
然后我们可以将
a2
计算为a1
a2 = ( a1 @ w2.transpose() ) + b2.transpose()
本文向大家介绍tensorflow输出权重值和偏差的方法,包括了tensorflow输出权重值和偏差的方法的使用技巧和注意事项,需要的朋友参考一下 使用tensorflow 训练模型时,我们可以使用 tensorflow自带的 Save模块 tf.train.Saver()来保存模型,使用方式很简单 就是在训练完模型后,调用saver.save()即可 重新载入模型 但是这种方式保存的模型中包含特
我有一分钟一分钟的熊猫数据帧df。我希望将加权应用于返回,并计算滚动加权均方差,窗口=10。我可以计算非加权性病,年化: 在Numpy中还有另一个关于加权std的问题,但我对滚动加权std很好奇。(加权标准偏差,单位为NumPy?) 计算加权标准差的公式为:https://math.stackexchange.com/questions/320441/standard-deviation-of-t
我的数据与此类似: 我需要计算基于名称组的差异列的标准偏差。 我试过了 和 但两者都为传递给的变量提供了KeyError。我试图用以下方法解决它: 但错误仍然存在。 提前谢谢。
我正在训练keras模型,并为优化器使用自定义学习速率调度程序(类型为tf.keras.optimizers.schedules.LearningRateSchedule),我希望通过权重记录学习速率的变化
问题内容: 使用Python,假设我正在运行已知数量的项目,并且能够计时处理每个项目要花费的时间,以及运行所花费的总时间以及到目前为止所处理项目的数量。我目前正在计算飞行中的平均值,但是如果说单个项目花费的时间特别长(几秒钟而不是几毫秒),则可能会导致偏差。 我想展示一个运行中的标准偏差。如何在不保存每个记录的情况下执行此操作? 问题答案: 我使用的是Welford方法,它给出的结果更准确。该链接
我尝试使用< code>rowSds()来计算每一行的标准偏差,这样我就可以选择具有高标准偏差的行来绘制图表。 我的数据帧名为<code>xx 我试图计算每一行的标准偏差,并辅助sd列名: 我得到这个错误: 知道在计算SD时如何省略吗?我的语法正确吗?