Modelo Sequencial de Rede Neural para Aprendizado Baseado em Física

Dados de entrada

NUM_AMOSTRAS = 200 dados_entrada = np.random.random(NUM_AMOSTRAS) print(dados_entrada)


Geração dos dados de saída

sinais = (- np.ones((NUM_AMOSTRAS,)))**np.random.randint(2,size=NUM_AMOSTRAS) dados_saida = np.sqrt(dados_entrada) * sinais print(sinais) print(dados_saida)


Rede neural

ativacao = tf.keras.layers.ReLU() modelo_sequencial = tf.keras.models.Sequential([ tf.keras.layers.Dense(10, activation=ativacao, input_shape=(1,)), tf.keras.layers.Dense(10, activation=ativacao), tf.keras.layers.Dense(1,activation='linear')])

Função de perda

perda_padrao = tf.keras.losses.MeanSquaredError() otimizador_padrao = tf.keras.optimizers.Adam(learning_rate=0.001) modelo_sequencial.compile(optimizer=otimizador_padrao, loss=perda_padrao)

Treinamento

resultados_padrao = modelo_sequencial.fit(dados_entrada, dados_saida, epochs=5, batch_size= 5, verbose=1)


Resultados

plt.plot(dados_entrada,dados_saida,'.',label='Pontos de dados', color="lightgray") plt.plot(dados_entrada,modelo_sequencial.predict(dados_entrada),'.',label='Aprendizado supervisionado', color="red") plt.xlabel('y') plt.ylabel('x') plt.title('Abordagem padrão') plt.legend() plt.show()


Método aprimorado

Dados de entrada - podemos reutilizar os dados_entrada anteriores

Os dados de saída são calculados dinamicamente

Modelo

modelo_fisico = tf.keras.models.Sequential([ tf.keras.layers.Dense(10, activation=ativacao, input_shape=(1,)), tf.keras.layers.Dense(10, activation=ativacao), tf.keras.layers.Dense(1, activation='linear')])

Função de perda personalizada

mse = tf.keras.losses.MeanSquaredError() def perda_fisica(y_real, y_previsto): return mse(y_real, y_previsto**2)

otimizador_fisico = tf.keras.optimizers.Adam(learning_rate=0.001) modelo_fisico.compile(optimizer=otimizador_fisico, loss=perda_fisica)

Treinamento

resultados_fisico = modelo_fisico.fit(dados_entrada, dados_entrada, epochs=5, batch_size=5, verbose=1)


Resultados

plt.plot(dados_entrada,dados_saida,'.',label='Pontos de dados', color="lightgray") plt.plot(dados_entrada,modelo_fisico.predict(dados_entrada),'.',label='Física diferenciável', color="green") plt.xlabel('x') plt.ylabel('y') plt.title('Abordagem baseada em física diferenciável') plt.legend() plt.show()


</div>

Tags: tensorflow keras deep-learning redes-neurais aprendizado-baseado-em-fisica

Publicado em 6-19 21:10