我的数据集中有3000000个样本。每个样本具有102个值。前101个值的范围是0到1。最后一个值的范围是几百到几千。我编写了一个深度神经网络,该神经网络将前101个值作为输入要素,并返回最后一个作为输出值。我将数据分成小批,每批大小为30。我使用了3个以tanh作为激活函数的隐藏层。我使用值为0.0001的学习率和MSE作为我的成本函数。 成本函数的值在前100个时期中从2491723.839降低到47836.267,然后保持不变。 我不知道我在哪里弄错了。
PS-我的台式机很旧(7-8岁),要花很多时间(24小时内为500个纪元)进行计算。我附上下面的代码。 谢谢
n_x=X_train.shape[0]
m=X_train.shape[1]
n_y=Y_train.shape[0]
costs=[]
X=tf.placeholder(tf.float32,[n_x,None],name="X")
Y=tf.placeholder(tf.float32,[n_y,None],name="Y")
parameters=init_par(layer_dims)
A=forward(X,parameters,layer_dims)
cost=cost_fn(A,Y,minibatch_size)
otz=tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(cost)
init=tf.global_variables_initializer()
with tf.Session() as sess:
sess.run(init)
for epoch in range(num_epochs):
epoch_cost=0.
num_minibatches=int(m/minibatch_size)
minibatches=random_mini_batches(X_train,Y_train,minibatch_size)
for minibatch in minibatches:
(minibatch_X,minibatch_Y)=minibatch
_,minibatch_cost = sess.run([otz,cost], feed_dict={X:minibatch_X,Y:minibatch_Y})
epoch_cost+=minibatch_cost/num_minibatches
if print_cost == True and epoch % 100 == 0:
print ("Cost after epoch %i: %f" % (epoch, epoch_cost))
if print_cost == True and epoch % 5 == 0:
costs.append(epoch_cost)
plt.plot(np.squeeze(costs))
plt.ylabel('cost')
plt.xlabel('iterations (per tens)')
plt.title("Learning rate =" + str(learning_rate))
plt.show()
parameters=sess.run(parameters)
print("TRAINED!!")
print("Train Accuracy : ", cost.eval({X: X_train, Y: Y_train}))
成本函数为:
def cost_fn(A,Y,minibatch_size):
loss=tf.pow((A-Y),2)
cost=tf.reduce_sum(loss)/minibatch_size
return cost
Init_par是:
def init_par(layer_dims):
L=len(layer_dims)
parameters={}
for l in range(1,L):
parameters["W"+str(l)]=tf.get_variable("W"+str(l),[layer_dims[l],layer_dims[l-1]],initializer=tf.contrib.layers.xavier_initializer())
parameters["b"+str(l)]=tf.get_variable("b"+str(l),[layer_dims[l],1],initializer=tf.zeros_initializer())
return parameters
转发为:
def forward(X,parameters,layer_dims):
outputs={}
outputs["A0"]=X
L=len(layer_dims)
for l in range(1,L-1):
outputs["Z"+str(l)] =tf.add(tf.matmul(parameters["W"+str(l)],outputs["A"+str(l-1)]),parameters["b"+str(l)])
outputs["A"+str(l)]=tf.nn.tanh(outputs["Z"+str(l)])
outputs["Z"+str(L-1)]=tf.add(tf.matmul(parameters["W"+str(L-1)],outputs["A"+str(L-2)]),parameters["b"+str(L-1)])
outputs["A"+str(L-1)] =tf.nn.relu(outputs["Z"+str(L-1)])
return outputs["A"+str(L-1)]