是否可以在TPU上运行python tensorflow代码而不使用Estimator API?

是否可以在TPU上运行python tensorflow代码而不使用Estimator API?,tensorflow,reinforcement-learning,tensorflow-estimator,tpu,Tensorflow,Reinforcement Learning,Tensorflow Estimator,Tpu,我花了几个星期的时间试图编写一个Python级别的Tensorflow代码,它可以直接与TPU通信。在没有估计器API的情况下,如何实现可以在TPU上运行的系统 我尝试过的资源: 关于估计器API、TPU的所有文档 我尝试的方式: 初始化了一个TPUClusterResolver并将其作为tf.Session()的参数传递,它只是挂起而没有执行Session.run() 还尝试了sess.run(tpu.initialize_system()),但也被卡住了 尝试查看TPUEstimato

我花了几个星期的时间试图编写一个Python级别的Tensorflow代码,它可以直接与TPU通信。在没有估计器API的情况下,如何实现可以在TPU上运行的系统

我尝试过的资源:

  • 关于估计器API、TPU的所有文档
我尝试的方式:

  • 初始化了一个TPUClusterResolver并将其作为tf.Session()的参数传递,它只是挂起而没有执行Session.run()

  • 还尝试了sess.run(tpu.initialize_system()),但也被卡住了

  • 尝试查看TPUEstimator API,如图所示

def列车模型(自身、环境、事件=100,
load_model=False,#从检查点加载模型(如果可用):?
model_dir='/tmp/pgmodel/',log_freq=10):
#初始化变量和负载模型
init_op=tf.global_variables_initializer()
自我评估运行(初始操作)
如果加载模式为:
ckpt=tf.train.get\u checkpoint\u状态(model\u dir)
打印tf.列车最新检查点(型号\U dir)
如果ckpt和ckpt.model\u检查点路径:
savr=tf.train.import\u元图(ckpt.model\u checkpoint\u path+'.meta')
out=savr.restore(self.\u sess,ckpt.model\u checkpoint\u path)
打印(“模型还原自”,ckpt.Model\u检查点\u路径)
其他:
打印('在:'处未找到检查点,型号\目录)
如果操作系统路径不存在(模型目录):
os.makedirs(model_dir)
事件=0
观察=环境重置()
xs、rs、ys=[]、[]、[]#环境信息
运行奖励=0
奖励金额=0
#训练回路
日=0
simrors=np.zero(剧集)
mktrors=np.0(剧集)
alldf=无
胜利=错误
而插曲<插曲而非胜利:
#从网络中随机抽样策略
x=观察值
feed={self.\utf\ux:np.重塑(x,(1,-1))}
aprob=self.\u sess.run(self.\u tf\u aprob,feed)
aprob=aprob[0,:]#我们生活在一个分批处理的世界:/
动作=np.random.choice(self.\u num\u动作,p=aprob)
标签=np.类零(aprob);标签[行动]=1#制作培训“标签”
#逐步调整环境并获得新的测量值
观察、奖励、完成、信息=环境步骤(行动)
#打印观察、奖励、完成、信息
奖励_sum+=奖励
#记录比赛历史
追加(x)
附加(标签)
卢比(奖励)
天数+=1
如果这样做:
跑步奖励=跑步奖励*0.99+奖励总额*0.01
epx=np.vstack(xs)
epr=np.vstack(卢比)
epy=np.vstack(ys)
xs、rs、ys=[]、[]、[]#重置游戏历史记录
df=env.env.sim.to_df()
#pdb.set_trace()
simrors[插曲]=df.bod_导航值[-1]-1#复合返回
mktrors[插曲]=测向mkt_导航值[-1]-1
如果alldf不是其他pd.concat([alldf,df],轴=0),则alldf=df
feed={self.\utf\ux:epx,self.\utf\uepr:epr,self.\utf\uy:epy}
_=self._sess.run(self._train_op,feed)#参数更新
如果事件%log\u freq==0:
log.info('year#%6d,平均报酬:%8.4f,模拟回报:%8.4f,市场回报:%8.4f,净回报:%8.4f',插曲,
运行奖励,模拟[插曲],模拟[插曲],模拟[插曲]-模拟[插曲])
save\u path=self.\u saver.save(self.\u sess,model\u dir+'model.ckpt',
全局(步骤=事件+1)
如果事件>100:
vict=pd.DataFrame({'sim':simrors[Spidence-100:Spidence],
“mkt”:mktrors[第100集:第]}
vict['net']=vict.sim-vict.mkt
如果vict.net.mean()大于0.0:
胜利=真实
log.info('恭喜你,沃伦·巴菲特!你赢了这场交易游戏')
#打印(“保存在文件中的模型:{}”。格式(保存路径))
插曲+=1
观察=环境重置()
奖励金额=0
日=0
返回alldf,pd.DataFrame({'simror':simrors,'mktror':mktrors})
我在Estimator API实现中遇到的问题:

  • 我有一个基于策略梯度的强化学习代码,其中包含一个神经网络
  • 在执行过程中,我有两个session.run()。在这一集里,每一步都有一个动作。另一个在这一集的结尾
  • tf.train.SessionRunHook不是适合我的代码的实现