hhw9307 2018-03-30 12:41 采纳率: 0%
浏览 1918
已结题

各位大神好,我在用tensorflow跑多任务学习的多层感知机遇到问题,训练得到y值都基本一样

-*- coding: utf-8 -*-

"""
Created on Fri Mar 30 18:09:10 2018

@author: 32641
"""
import tensorflow as tf
import xlrd
import numpy as np
data2=[]
data0=[]
data = xlrd.open_workbook('C:/Users/32641/Desktop/论文2/汇率上证.xls')
table = data.sheet_by_name('Sheet1')
nrows = table.nrows
for rownum in range(1, nrows): #也就是从Excel第二行开始,第一行表头不算
row = table.row_values(rownum)
#for i in range(1,ncols):heet
#row[i]=(row[i]-meansl[i-1])/stdl[i-1]
#row[i]=(row[i]-minsl[i-1])/(maxsl[i-1]-minsl[i-1])
#date = xlrd.xldate_as_tuple(row[0],0)
#date1=str(date[0])+'.'+str(date[1])+'.'+str(date[2])
#row[0]=date1
data0.append(row[1])
data2.append(row[2])

timeseries1=[]
timeseries2=[]
timeseriess=data0
for q in range(len(timeseriess)):
timeseries1.append((timeseriess[q]-min(timeseriess))/(max(timeseriess)-min(timeseriess)))
timeseries1=np.array(timeseries1)
for q in range(len(timeseriess)):
timeseries2.append((timeseriess[q]-min(timeseriess))/(max(timeseriess)-min(timeseriess)))
timeseries2=np.array(timeseries2)
lag=1
def cut(timeseries,lag):
x=np.zeros((1,lag))
y=np.zeros((1,1))
for i in range(len(timeseries)-lag):
x=np.vstack((x,timeseries[i:i+lag]))
y=np.vstack((y,timeseries[i+lag]))
return x[1:],y[1:]
x1,y1=cut(timeseries1,lag)
x2,y2=cut(timeseries2,lag)

split_boundary = int(x1.shape[0] * 0.8)

train_x1=x1[:split_boundary]
test_x1=x1[split_boundary:]
train_y1=x1[:split_boundary]
test_y1=x1[split_boundary:]

train_x2=x2[:split_boundary]
test_x2=x2[split_boundary:]
train_y2=x2[:split_boundary]
test_y2=x2[split_boundary:]

定义占位符

X = tf.placeholder("float",name="X")
Y1 = tf.placeholder("float", name="Y1")
Y2 = tf.placeholder("float", name="Y2")

定义权重

initial_shared_layer_weights = np.random.rand(1,2)
initial_Y1_layer_weights = np.random.rand(2,1)
initial_Y2_layer_weights = np.random.rand(2,1)

shared_layer_weights = tf.Variable(initial_shared_layer_weights, name="share_W", dtype="float32")
Y1_layer_weights = tf.Variable(initial_Y1_layer_weights, name="share_Y1", dtype="float32")
Y2_layer_weights = tf.Variable(initial_Y2_layer_weights, name="share_Y2", dtype="float32")

使用relu激活函数构建层

shared_layer = tf.nn.sigmoid(tf.matmul(X,shared_layer_weights))
Y1_layer = tf.nn.sigmoid(tf.matmul(shared_layer,Y1_layer_weights))
Y2_layer = tf.nn.sigmoid(tf.matmul(shared_layer,Y2_layer_weights))

计算loss

Y1_Loss = tf.nn.l2_loss(Y1-Y1_layer)
Y2_Loss = tf.nn.l2_loss(Y2-Y2_layer)

优化器

Y1_op = tf.train.AdamOptimizer().minimize(Y1_Loss)
Y2_op = tf.train.AdamOptimizer().minimize(Y2_Loss)

Calculation (Session) Code

==========================

open the session

with tf.Session() as session:
session.run(tf.initialize_all_variables())
for iters in range(3000):
if np.random.rand() < 0.5:
_, Y1_loss,Y1_Layer= session.run([Y1_op, Y1_Loss,Y1_layer],
{
X: train_x1,
Y1: train_y1,
Y2: train_y2
})
print(Y1_Layer)
print(Y1_loss)
else:
_, Y2_loss= session.run([Y2_op, Y2_Loss],
{
X: train_x2,
Y1: train_y1,
Y2: train_y2
})
print(Y2_loss)
session.close()

  • 写回答

1条回答 默认 最新

  • threenewbee 2018-03-30 15:35
    关注

    数据读取有没有问题,初始化参数是随机的么?

    评论

报告相同问题?

悬赏问题

  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大
  • ¥15 import arcpy出现importing _arcgisscripting 找不到相关程序
  • ¥15 onvif+openssl,vs2022编译openssl64