首先需要安裝gym模組,提供遊戲的。
1,所需模組
importtensorflow as tf
import
numpy as np
import
gymimport
random
from collections import
deque
from keras.utils.np_utils import to_categorical
2,自定義乙個簡單的3層dense model
#自定義model
class
qnetwork(tf.keras.model):
def__init__
(self):
super().
__init__()#
簡單的3個dense
self.dense1=tf.keras.layers.dense(24,activation='
relu')
self.dense2=tf.keras.layers.dense(24,activation='
relu')
self.dense3=tf.keras.layers.dense(2)
defcall(self,inputs):
x=self.dense1(inputs)
x=self.dense2(x)
x=self.dense3(x)
return
x
defpredict(self,inputs):
q_values=self(inputs)#
呼叫call
return tf.argmax(q_values,axis=-1)
3,定義相關引數
#遊戲環境,例項化乙個遊戲
env=gym.make('
cartpole-v1')
model=qnetwork()
#迴圈輪數設定小一點,50就可以了
num_episodes=500num_exploration=100max_len=1000batch_size=32lr=1e-3gamma=1.
initial_epsilon=1.
final_epsilon=0.01replay_buffer=deque(maxlen=10000)
epsilon=initial_epsilon
#tensorflow2.0
optimizer=tf.compat.v1.train.adamoptimizer(learning_rate=lr)
4,訓練,測試
for i in
range(num_episodes):
#初始化環境
state=env.reset()
#逐漸衰減,至final_epsilon
epsilon=max(initial_epsilon*(num_exploration-i)/num_exploration,final_epsilon)
for t in
range(max_len):
#當前幀繪製到螢幕
env.render()
#以epsilon的概率隨機行動,epsilon是衰減的,說明遊戲動作會越來越穩定
if random.random()action=env.action_space.sample()
else:#
從當前狀態**乙個動作
action=model.predict(tf.constant(np.expand_dims(state,axis=0),dtype=tf.float32)).numpy()
action=action[0]
#執行一步動作
next_state,reward,done,info=env.step(action)#獎勵
reward=-10.if done else
reward#快取
state=next_state
ifdone:
print('
episode %d,epsilon %f,score %d
'%(i,epsilon,t))
break
#**batch_size步後執行
if len(replay_buffer)>=batch_size:
#隨機獲取乙個batch的資料
batch_state,batch_action,batch_reward,batch_next_state,batch_done=\
[np.array(a,dtype=np.float32) for a in zip(*random.sample(replay_buffer,batch_size))]
#下乙個狀態,由此得到的y為真實值
#**值與真實值的計算看不太懂
q_value=model(tf.constant(batch_next_state,dtype=tf.float32))
y=batch_reward+(gamma*tf.reduce_max(q_value,axis=1))*(1-batch_done)
with tf.gradienttape() as tape:
#loss=tf.losses.mean_squared_error(labels=y,predictions=tf.reduce_sum(
#model(tf.constant(batch_state))*tf.one_hot(batch_action,depth=2),axis=1))
loss=tf.losses.mean_squared_error(y,tf.reduce_sum(
model(tf.constant(batch_state))*to_categorical(batch_action,num_classes=2),axis=1))
grads=tape.gradient(loss,model.variables)
最終會出現乙個視窗,平衡遊戲不斷進行。。。
上面注釋部分因為tf.one_hot方法會報錯。
TensorFlow2學習八之資料增強
影象增強 對影象的簡單形變。tensorflow2影象增強函式tf.keras.preprocessing.image.imagedatagenerator image gen train tf.keras.preprocessing.image.imagedatagenerator rescale...
tensorflow 學習 學習中
基於 virtualenv 的安裝 在 linux 上 sudo apt get install python pip python dev python virtualenv 在 mac 上 sudo easy install pip 如果還沒有安裝 pip sudo pip install up...
tensorflow學習筆記
tensorflow安裝可以直接通過命令列或者原始碼安裝,在此介紹tensorflow8命令列安裝如下 安裝tensorflow sudo pip install upgrade 另外,解除安裝tensorflow命令為 sudo pip uninstall tensorflow tensorflo...