[Python] Tensorflow perfomance issue

Discussão em 'Python' iniciado por Stack, Fevereiro 13, 2025.

  1. Stack

    Stack Membro Participativo

    I'm trying to do a very primitive reinforced learning model on tensorflow. Although it's relatively small, a single iteration takes ~6-7 seconds.

    def build_model():
    model = keras.Sequential([
    layers.Input(shape=(400,)),
    layers.Dense(128, activation="relu"),
    layers.Dense(128, activation="relu"),
    layers.Dense(3)
    ])
    model.compile(optimizer=keras.optimizers.Adam(learning_rate=0.001), loss="huber")
    return model

    class DQNAgent:
    def __init__(self):
    self.model = build_model()
    self.target_model = build_model()
    self.target_model.set_weights(self.model.get_weights())

    self.memory = deque(maxlen=1000)
    self.epsilon = 1.0
    self.epsilon_min = 0.01
    self.epsilon_decay = 0.995
    self.gamma = 0.95
    self.batch_size = 32

    def choose_action(self, state):
    if np.random.rand() < self.epsilon:
    return random.choice([0, 1, 2])
    q_values = self.model.predict(np.array([state]), verbose=0)
    return np.argmax(q_values[0])

    def remember(self, state, action, reward, next_state, done):
    self.memory.append((state, action, reward, next_state, done))

    def train(self):
    if len(self.memory) < self.batch_size:
    return
    batch = random.sample(self.memory, self.batch_size)
    states, targets = [], []

    for state, action, reward, next_state, done in batch:
    target = reward
    if not done:
    target += self.gamma * np.max(self.target_model.predict(np.array([next_state]), verbose=0))

    q_values = self.model.predict(np.array([state]), verbose=0)
    q_values[0][action] = target

    states.append(state)
    targets.append(q_values[0])

    self.model.fit(np.array(states), np.array(targets), epochs=1, verbose=0)

    if self.epsilon > self.epsilon_min:
    self.epsilon *= self.epsilon_decay

    def update_target_model(self):
    self.target_model.set_weights(self.model.get_weights())


    After profiling all the given code, I saw that the model.predict() takes that much time to complete: Profiler results

    Initially I thought I just need to compute on GPU, but after two days wasted trying to do so, nothing really changed. Does it really take that much time, or I messed smth up in the code?

    GPU:Geforce 2060,
    CPU:Intel Core i7,
    Windows 11,
    Python:3.10
    Tensorflow: 2.10

    Continue reading...

Compartilhe esta Página