Я бы поступил немного иначе.Есть что-то, что не имеет смысла в вашем коде:
for n_batch in range(0,len(x_data)):
y_pred = neural(x[n_batch])
y_pred_col.append(y_pred)
Здесь каждый вызов neural
создает новую нейронную сеть, так что в итоге вы получаете len(x_data)
сетей.Я утверждаю, что вы хотите одну сеть.В этом случае вы должны вызывать neural
только один раз:
y_pred = neural(x)
Это потребует от вас определения операций tf.matmul из neural
другим способом (кактеперь вам нужно принять во внимание первое измерение X
).Тогда функция потерь будет определена следующим образом:
loss = tf.reduce_mean(tf.square(y_ - y_pred))
Собираем все вместе:
#Setting value placeholder
x = tf.placeholder(tf.float64,shape=(None,15), name = 'Input')
y_ = tf.placeholder(tf.float64,shape=(None,10), name = 'Output')
#Setting DNN key architectural values
n_layers = 3
n_nodes_l1 = 20
n_nodes_l2 = 30
n_nodes_l3 = 10
W01 = tf.Variable(tf.random_uniform([15, n_nodes_l1],0,1,dtype=tf.float64,name="W01"))
W02 = tf.Variable(tf.random_uniform([n_nodes_l1, n_nodes_l2],0,1,dtype=tf.float64),name='W02')
W03 = tf.Variable(tf.random_uniform([n_nodes_l2, n_nodes_l3],0,1,dtype=tf.float64),name='W03')
b01 = tf.Variable(tf.random_uniform([n_nodes_l1],0,1,dtype=tf.float64),name='b01')
b02 = tf.Variable(tf.random_uniform([n_nodes_l2],0,1,dtype=tf.float64),name='b02')
b03 = tf.Variable(tf.random_uniform([n_nodes_l3],0,1,dtype=tf.float64),name='b03')
#Building the architecture
def neural(X):
a01 = tf.matmul(X, W01) + b01
X2 = tf.sigmoid(a01)
a02 = tf.matmul(X2, W02) + b02
X3 = tf.sigmoid(a02)
a03 = tf.matmul(X3, W03) + b03
y_prediction= tf.sigmoid(a03)
return y_prediction
#Loss and Optimizer
y_pred = neural(x)
loss = tf.reduce_mean(tf.square(y_ - y_pred))
optimizer = tf.train.GradientDescentOptimizer(0.0005).minimize(loss)
#Setting up Tensor Session
sess = tf.Session()
init = tf.global_variables_initializer()
sess.run(init)
n_steps = 30
for iter in range(n_steps):
_, l, W01_train = sess.run([optimizer,loss,W01], feed_dict = {x: x_data, y_: y_data})
print(l)
Обратите внимание, что для удобства я изменил определение заполнителей и весов.Код выше будет работать при условии, что формы x_data
и y_data
равны (batch_size=19,15)
и (batch_size=19,10)
соответственно.Если проблема все еще остается после этих изменений, то это, вероятно, связано с другими причинами (т.е. зависит от ваших данных или гиперпараметров).