我想在我的本地机器(1个CPU,1个cuda兼容GPU)中实现Asynchronous Advantage Actor Critic(A3C)模型以进行强化学习.在该算法中,若干"学习者"网络与环境的副本交互并定期更新中心模型.
我已经看到在同一个图中创建n个"工作者"网络和一个"全局"网络的实现,并使用线程来运行这些.在这些方法中,通过将梯度应用于具有"全局"范围的可训练参数来更新全局网络.
但是,我最近读了一些关于分布式张量流的内容,现在我有点困惑.使用分布式tensorflow API实现这一点会更容易/更快/更好吗?在文档和会谈中,他们总是提到在多设备环境中使用它.我不知道在本地异步算法中使用它是否过分.
我还想问一下,有没有办法批处理每个工人计算出的梯度,在n步之后一起应用?
我创建了一个演员评论模型来测试一些OpenAI健身房环境.但是,我在某些环境中遇到问题.
CartPole:该模型最终收敛并获得最大奖励.但是,由于某些原因,如果我只使用策略梯度方法而不是值函数/优势,它会收敛得更快.
MountainCar,Acrobot:这两个型号都有负面奖励.如果你的经纪人需要10秒来解决任务,你的奖励将是-10.出于某种原因,当我试图解决负面回报的环境时,我的政策从负值开始并慢慢收敛到0.价值损失开始荒谬地高并且开始减少,尽管它在某个时候(当政策崩溃时)处于低位.任何人都可以帮我诊断问题吗?我添加了一些带有相关情节值的日志记录语句.
from scipy.signal import lfilter
import numpy as np
import gym
import tensorflow as tf
layers = tf.keras.layers
tf.enable_eager_execution()
def discount(x, gamma):
return lfilter([1], [1, -gamma], x[::-1], axis=0)[::-1]
def boltzmann(probs):
return tf.multinomial(tf.log(probs), 1)
def greedy(probs):
return tf.argmax(probs)
def gae(bval, vals, rews):
vboot = np.hstack((vals, bval))
return rews * vboot[1:] - vals
class PG(tf.keras.Model):
def __init__(self, n_actions, selection_strategy=boltzmann, lr=0.001):
super(PG, self).__init__()
self.fc1 = layers.Dense(64, activation='relu', kernel_initializer=tf.initializers.orthogonal(1))
self.fc2 = layers.Dense(64, activation='relu', kernel_initializer=tf.initializers.orthogonal(1))
self.pol = layers.Dense(n_actions, kernel_initializer=tf.initializers.orthogonal(0.01))
self.val = layers.Dense(1, kernel_initializer=tf.initializers.orthogonal(1)) …
Run Code Online (Sandbox Code Playgroud) 我正在使用Airbnb的新库Lottie在我的应用程序中制作动画.
动画由70 kb JSON文件和328 kb图像文件夹组成.这个文件夹中有13个小png.
根据GitHub回购的指示,我宣布我的观点是这样的
<com.airbnb.lottie.LottieAnimationView
android:id="@+id/lottie_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:lottie_fileName="animation.json"
android:layout_gravity="bottom"
app:lottie_loop="false"
app:lottie_autoPlay="true"/>
Run Code Online (Sandbox Code Playgroud)
然后,在相关的java类中我调用:
mLottieView.setImageAssetsFolder("images");
Run Code Online (Sandbox Code Playgroud)
但是,我有一个问题.动画很笨拙,而且我的记忆用量在屋顶上跳跃.它从13 MB到89,所有这些都发生在主线程上.
你能告诉我有没有办法解决这个问题?
谢谢
我正在使用改进版本2.1.0将JSON反序列化为pojos.pojo中的字段可以在json中以不同的名称接收.要正确地反序列化字段,我使用@serializedName注释以下列方式:
@AutoValue
public abstract class Media implements Parcelable {
@SerializedName(value = "title", alternate = {"name"})
public abstract String title();
// More fields and code
Run Code Online (Sandbox Code Playgroud)
但是,由于某种原因,当生成的JSON在键"title"下有字段时,Gson会正确读取它,但是当该字段与"name"键相关联时,它不会被读取.
如何在反序列化期间让GSON识别备用名称?
很长一段时间我听说RelativeLayouts很慢.在几次谈话中,我记得听说过这种类型的布局会两次调用onMeasure,并且出于某种原因,这会拖累性能.
但是,我正在学习Udacity的表演课程,我观看了以下视频:
https://www.youtube.com/watch?time_continue=303&v=gK9tdeqqigE
这里,教师使用层次结构查看器工具使用相对布局和嵌套线性布局来比较同一视图组的渲染成本.
在视频中,相对布局是明显的赢家,这与我迄今为止关于该问题所听到的一切相矛盾.
能帮助我了解每种方法哪种情况更好?
谢谢
我有一个 React Web 应用程序,它使用 aws amplify 来构建其后端。该后端由一个 graphql api 和一个 dynamodb 表作为数据源(由我的 graphql 模式中声明的模型创建)和一个 lambda 函数组成,该函数从第 3 方 api 获取信息并将结果保存到 dynamodb 表中以使其可用于该应用程序。
按照本教程操作:
https://docs.amplify.aws/cli/function#graphql-from-lambda
我创建了运行“amplify add function”命令的 lambda 函数。当我被问及 lambda 是否应该有权访问其他放大资源时,我回答“是”,并且我为 lambda 提供了对我的 graphql api 的写入和更新访问权限,以便我可以从 lambda 执行突变。
当我完成创建过程时,amplify 通知我 lambda 中有两个可用的新环境变量:
API_<MY_APP>_GRAPHQLAPIENDPOINTOUTPUT
API_<MY_APP>_GRAPHQLAPIIDOUTPUT
Run Code Online (Sandbox Code Playgroud)
然而问题是,我还需要 api 密钥才能执行突变(我的 graphql api 将“api 密钥”作为主要 id 方法)。
本教程使用 process.env.API_KEY。然而他们没有解释这个变量来自哪里,因为在我的例子中它的值是未定义的。
您知道如何使 api 密钥可供我的 lambda 使用吗?
PS:硬编码不是一个选择,因为我有几个后端环境。
我一直在研究一个Android工作室项目,突然间,今天我开始在尝试构建项目时遇到错误.
构建过程抛出一个NullPointerException,我无法弄清楚为什么我的生活.这是我得到的堆栈跟踪,甚至没有给我一个关于我的问题的提示.
你能给我一些指示吗?
Error:FAILURE: Build failed with an exception.
* What went wrong:
java.lang.NullPointerException (no error message)
* Try:
Run with --info or --debug option to get more log output.
* Exception is:
java.lang.NullPointerException
at org.gradle.api.internal.changedetection.state.TreeSnapshotRepository.removeTreeSnapshotUsage(TreeSnapshotRepository.java:85)
at org.gradle.api.internal.changedetection.state.CacheBackedFileSnapshotRepository.remove(CacheBackedFileSnapshotRepository.java:47)
at org.gradle.api.internal.changedetection.state.CacheBackedTaskHistoryRepository$1$1.run(CacheBackedTaskHistoryRepository.java:81)
at org.gradle.internal.Factories$1.create(Factories.java:22)
at org.gradle.cache.internal.DefaultCacheAccess.useCache(DefaultCacheAccess.java:192)
at org.gradle.cache.internal.DefaultCacheAccess.useCache(DefaultCacheAccess.java:175)
at org.gradle.cache.internal.DefaultPersistentDirectoryStore.useCache(DefaultPersistentDirectoryStore.java:106)
at org.gradle.cache.internal.DefaultCacheFactory$ReferenceTrackingCache.useCache(DefaultCacheFactory.java:187)
at org.gradle.api.internal.changedetection.state.DefaultTaskArtifactStateCacheAccess.useCache(DefaultTaskArtifactStateCacheAccess.java:60)
at org.gradle.api.internal.changedetection.state.CacheBackedTaskHistoryRepository$1.update(CacheBackedTaskHistoryRepository.java:66)
at org.gradle.api.internal.changedetection.changes.DefaultTaskArtifactStateRepository$TaskArtifactStateImpl.afterTask(DefaultTaskArtifactStateRepository.java:135)
at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:68)
at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58)
at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:52)
at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)
at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:53)
at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:203)
at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:185)
at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.processTask(AbstractTaskPlanExecutor.java:66)
at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.run(AbstractTaskPlanExecutor.java:50)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor.process(DefaultTaskPlanExecutor.java:25)
at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter.execute(DefaultTaskGraphExecuter.java:110) …
Run Code Online (Sandbox Code Playgroud) 我一直在努力解决这个问题,以至于我接近抑郁症.
我有一个名为"Song"的模型,看起来像这样.
from django.db import models
class Song(models.Model):
title = models.CharField(max_length=100)
songfile = models.FileField()
duration = models.FloatField()
isPlaying = False
def __str__(self):
return self.title
Run Code Online (Sandbox Code Playgroud)
当您从索引页面上传mp3文件时,它会创建此模型的实例,并使用此视图将文件存储在myapp/songdir /中:
def home(request):
if request.method == 'POST':
form = UploadForm(request.POST, request.FILES)
if form.is_valid():
song_title = request.POST.items()[1][1]
song_address = 'upnplay/songdir/' + song_title + '.mp3'
with open(song_address, 'wb+' ) as destination:
for chunk in request.FILES['file'].chunks():
destination.write(chunk)
audio = MP3(song_address)
c = Song(title = song_title, songfile = song_address, duration = audio.info.length)
c.save()
return HttpResponseRedirect('')
else:
form = UploadForm() …
Run Code Online (Sandbox Code Playgroud) android ×3
java ×2
tensorflow ×2
animation ×1
audio ×1
auto-value ×1
aws-amplify ×1
aws-lambda ×1
django ×1
gradle ×1
graphql ×1
gson ×1
keras ×1
media ×1
python ×1
retrofit2 ×1