小编lef*_*ion的帖子

如何在Keras中的两个不同GPU上并行运行两个模型

我想对神经网络上的参数进行网格搜索。我有两个GPU,我想在第一个GPU上运行一个模型,在另一个GPU上运行具有不同参数的另一个模型。无效的第一次尝试是这样的:

with tf.device('/gpu:0'):
    model_1 = sequential()
    model_1.add(embedding) // the embeddings are defined earlier in the code
    model_1.add(LSTM(50))
    model_1.add(Dense(5, activation = 'softmax'))
    model_1.compile(loss = 'categorical_crossentropy', optimizer = 'adam')
    model_1.fit(np.array(train_x), np.array(train_y), epochs = 15, batch_size = 15)
with tf.device('/gpu:1'):
    model_2 = sequential()
    model_2.add(embedding)
    model_2.add(LSTM(100))
    model_2.add(Dense(5, activation = 'softmax'))
    model_2.compile(loss = 'categorical_crossentropy', optimizer = 'adam')
    model_2.fit(np.array(train_x), np.array(train_y), epochs = 15, batch_size = 15)
Run Code Online (Sandbox Code Playgroud)

编辑:我再次运行我的代码,没有收到错误。但是,这两个模型顺序运行,而不是并行运行。可以在这里进行多线程吗?那是我的下一个尝试。

网上有很多关于将多个GPU与keras一起使用的讨论,但是当涉及到同时运行多个模型时,讨论仅限于在单个GPU上运行多个模型。关于多个GPU的讨论也仅限于数据并行化和设备并行化。我不相信自己也不想这样做,因为我不想破坏单个模型以在多个GPU上运行。是否可以在带有两个GPU的keras中同时运行两个单独的模型?

keras tensorflow

5
推荐指数
1
解决办法
1631
查看次数

Prolog递归的顺序是否重要?

我对一个问题的两个解决方案之间的区别有疑问.该问题要求将列表转换为截断列表,如下所示:

?- reduce([a,a,a,b,b,c,c,b,b,d,d],Z).
Z = [a,b,c,b,d].
Run Code Online (Sandbox Code Playgroud)

第一个解决方案需要一个额外的步骤来反转列表:

reduce([X|Xs],Z) :-
   reduce(X,Xs,Y,[X]),
   reverse(Y,Z).

reduce(X,[L|Ls],Y,List) :-
    (  X=L
    -> reduce(X,Ls,Y,List)
    ;  reduce(L,Ls,Y,[L|List])
    ).
reduce(_,[],Y,Y).
Run Code Online (Sandbox Code Playgroud)

第二种解决方案不需要reverse/2:

reduced([X|Xs],Result) :- 
    reduced(Xs,List),
    List=[A|_],
    (  A=X
    -> Result=List
    ;  Result=[X|List]
    ),
    !.
reduced(Result,Result).
Run Code Online (Sandbox Code Playgroud)

在一系列语句之前或之后执行递归时有哪些优化注意事项?条件的顺序是否重要?我倾向于认为提前完成所有递归是要走的路,特别是因为这里需要向后构建列表.

optimization recursion memory-management prolog

2
推荐指数
1
解决办法
504
查看次数

Javascript没有使用=运算符执行函数

我是javascript的新手,所以这是一个基本问题.我创建了一个简单的mp3播放器,可以加载第一首歌曲,然后在阵列中播放下一首歌曲.我修改了我在堆栈上找到的代码,它可以工作:

audioPlayer.onended = function() {
    if(currentSong < nextSong.length-1) {
        audioPlayer.src = nextSong[++currentSong];
        document.getElementById('songTitle').innerHTML 
                                = songTitle[currentSong];
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试将实现放在它自己的函数中并以这种方式调用函数它不起作用:

audioPlayer.onended = nextSong();

function nextSong() {
    if(currentSong < nextSong.length-1) {
        audioPlayer.src = nextSong[++currentSong];
        document.getElementById('songTitle').innerHTML 
                                = songTitle[currentSong];
    }
}
Run Code Online (Sandbox Code Playgroud)

每次我想使用函数nextSong()时,我都不想重写代码.我试过从标签内的一个按钮调用nextSong()函数,例如这篇文章,但是无法调用函数.谢谢你的帮助.

javascript html5 dom

0
推荐指数
1
解决办法
35
查看次数