我想用Keras训练神经网络进行二维回归.
我的输入是一个数字,我的输出有两个数字:
model = Sequential()
model.add(Dense(16, input_shape=(1,), kernel_initializer=initializers.constant(0.0), bias_initializer=initializers.constant(0.0)))
model.add(Activation('relu'))
model.add(Dense(16, input_shape=(1,), kernel_initializer=initializers.constant(0.0), bias_initializer=initializers.constant(0.0)))
model.add(Activation('relu'))
model.add(Dense(2, kernel_initializer=initializers.constant(0.0), bias_initializer=initializers.constant(0.0)))
adam = Adam(lr=0.001, beta_1=0.9, beta_2=0.999, epsilon=1e-08, decay=0.0)
model.compile(loss='mean_squared_error', optimizer=adam)
Run Code Online (Sandbox Code Playgroud)
然后我创建了一些用于训练的虚拟数据:
inputs = np.zeros((10, 1), dtype=np.float32)
targets = np.zeros((10, 2), dtype=np.float32)
for i in range(10):
inputs[i] = i / 10.0
targets[i, 0] = 0.1
targets[i, 1] = 0.01 * i
Run Code Online (Sandbox Code Playgroud)
最后,我在一个循环中训练了小型飞机,同时测试了训练数据:
while True:
loss = model.train_on_batch(inputs, targets)
test_outputs = model.predict(inputs)
print test_outputs
Run Code Online (Sandbox Code Playgroud)
问题是,打印出的输出如下:
[0.1,0.045] [0.1,0.045] [0.1,0.045] ..... ..... .....
因此,虽然第一个维度是正确的(0.1),但第二个维度是不正确的.第二个维度应为[0.01,0.02,0.03,.....].所以实际上,网络的输出(0.45)只是第二维中所有值的平均值.
我究竟做错了什么?
我在具有 3 GB 内存的 NVIDIA GPU 上使用 TensorFlow 1.9。我的 minibatch 的大小是 100 MB。因此,我有可能同时在我的 GPU 上安装多个小批量。所以我的问题是这是否可能以及它是否是标准做法。
例如,当我训练我的 TensorFlow 模型时,我在每个 epoch 上运行这样的事情:
loss_sum = 0
for batch_num in range(num_batches):
batch_inputs = get_batch_inputs()
batch_labels = get_batch_labels()
batch_loss, _ = sess.run([loss_op, train_op], feed_dict={inputs: batch_inputs, labels: batch_labels})
loss_sum += batch_loss
loss = batch_loss / num_batches
Run Code Online (Sandbox Code Playgroud)
这将迭代我的小批量并为每个小批量执行一次权重更新。但规模image_data和label_data只有100 MB,所以多数GPU的不被使用。
一种选择是增加 minibatch 大小,使 minibatch 更接近 3 GB GPU 容量。但是,我想保持相同的小 minibatch 大小以帮助优化。
因此,另一种选择可能是通过 GPU 并行发送多个小批量,并为每个小批量执行一次权重更新。能够并行发送小批量将显着减少训练时间。
这是可能的并推荐吗?
假设我有一个包含字符串的单元格数组:
c = {'foo1', 'foo2', 'foo3'}
Run Code Online (Sandbox Code Playgroud)
我现在想为bar每个字符串添加相同的后缀" ",以便单元格数组变为:
c = {'foo1bar', 'foo2bar', 'foo3bar'}
Run Code Online (Sandbox Code Playgroud)
有这样做的快捷方式,没有显式循环每个元素?
我已经构建一个 ASP.NET MVC 5 项目几天了,主要是处理 CSS 文件。然而,突然间,用于在浏览器中显示 HTML 的 CSS 文件已恢复为旧版本。
在 中BundleConfig.cs,我有:
bundles.Add(new StyleBundle("~/Content/css").Include("~/Content/site.css"));
Run Code Online (Sandbox Code Playgroud)
~/Content/site.css在过去的几天里,该文件已逐步更新,当我从 Visual Studio 运行该程序时,可以在 HTML 中观察到更改。
但今天,我注意到渲染的 HTML 突然完全不同了。当我View Source在 Firefox 中时,在<head>标签中显示:
<link href="/Content/site.css" rel="stylesheet"/>
正如预期的那样。但是,如果我单击此源文件中指向此 CSS 文件的链接,则会显示几天前的一个非常旧的 CSS 文件的内容。我已经检查过多次,该文件Content/site.css确实是我的新版本,而不是旧版本。我尝试过清理、重建、重新启动 Visual Studio 等,但这些都没有效果。
这很奇怪——我有什么想法可以尝试弄清楚发生了什么吗?
谢谢!
我刚刚在 Visual Studio 2012 中创建了一个新的空控制台 C++ 项目。我创建了一个名为 的文件main.cpp,代码如下:
#include "myheader.hpp"
int main()
{
return 0;
}
Run Code Online (Sandbox Code Playgroud)
然后,我右键单击解决方案资源管理器,选择添加现有项目,然后浏览到我的文件所在的位置myheader.hpp。添加后,我看到它出现在Solution Items.
现在,我尝试构建项目,但出现错误:
Error 1 error C1083: Cannot open include file: 'myheader.hpp': No such file or directory
Run Code Online (Sandbox Code Playgroud)
这是怎么回事?
我想在C++ 11中使用多线程来在自己的线程中调用类成员函数.我已经能够使用全局函数:
#include <thread>
#include <iostream>
void Alpha(int x)
{
while (true)
{
std::cout << x << std::endl;
}
}
int main()
{
std::thread alpha_thread(Alpha, 5);
alpha_thread.join();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但是,我无法使用类成员函数进行编译:
#include <thread>
#include <iostream>
class Beta
{
public:
void Gamma(int y)
{
while (true)
{
std::cout << y << std::endl;
}
}
};
int main()
{
Beta my_beta;
std::thread gamma_thread(my_beta.Gamma, 5);
gamma_thread.join();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编译错误是:
no matching function for call to 'std::thread::thread(<unresolved overloaded function type>)'
std::thread gamma_thread(my_beta.Gamma, 5); …Run Code Online (Sandbox Code Playgroud) 我想制作一个简单的静态库,并从另一个项目链接到它。有三个源文件(全部在同一目录下),从该创建库:main1.cpp,header1.h,和header2.h。main1.cpp包含行#include "header1.h",反过来又header1.h包含行#include "header2.h"。为了创建库,我add_library(foo STATIC main1.cpp)在我的CMakeLists.txt文件中使用。运行cmake,然后按预期make创建文件libfoo.a。
然后我有另一个项目,有一个文件main2.cpp,其中包含行#include "header1.h". 在CMakeLists.txt这个项目的文件中,我使用add_executable(bar main2.cpp)和target_link_libraries(bar foo.a)创建一个链接到我的静态库的可执行文件。然后我复制foo.a和header1.h文件并将它们放在与此项目相同的目录中。
问题是,在编译第二个项目时,出现以下错误:
header1.h: fatal error: header2.h: No such file or directory
Run Code Online (Sandbox Code Playgroud)
所以它告诉我header2.h无法找到,即使它在header1.h. 但是,我会认为 的内容foo.a将包含header2.h构建库时的所有内容?当我想构建第二个项目时,我当然不应该包含第一个项目中的所有头文件吗?
谢谢 :)
在Python中,我想列出根目录中的所有目录,并打印出目录号和目录。然后,我想打印出该目录中的文件。
该代码将类似于:
for subdir, dirs, files in os.walk(root_dir):
print "Directory " + str(dir_num) + " = " subdir
for (file_num, file) in enumrate(files):
print "File " + str(file_num) + " = " file
Run Code Online (Sandbox Code Playgroud)
但是,如何获得的值dir_num,即根目录中的目录号?我知道如何使用来打印文件号enumerate(),但是我不确定如何将其应用于os.walk()...
假设我有一个foo采用默认参数的Python函数,该默认参数设置为某些全局变量。如果现在在调用函数之前更改该全局变量,则默认参数仍设置为该全局变量的原始值。
例如:
x = 1
def foo(a=x):
print a
x = 2
foo()
Run Code Online (Sandbox Code Playgroud)
打印1,而不是2。
我应该如何编写代码,以便可以更改此全局变量,并使其更新此默认参数?
我想创建一个元胞数组,其中每一行都是一个字符串数组。这些行的长度不同。假设我将这些行存储为单元格本身,例如:
row1 = {'foo1', 'foo2', 'foo3'}
row2 = {'foo1', 'foo2', 'foo3', 'foo4'}
row3 = {'foo1', 'foo2'}
Run Code Online (Sandbox Code Playgroud)
如何将这些连接到一个单元格中?像这样的东西:
cell = row1
cell = [cell; row2]
cell = [cell; row3]
Run Code Online (Sandbox Code Playgroud)
但这给了我一个错误:
Error using vertcat. Dimensions of matrices being concatenated are not consistent.
Run Code Online (Sandbox Code Playgroud)
我想在循环中执行此操作,以便在每次交互时,将另一行添加到单元格中。
我怎样才能做到这一点?谢谢。
c++ ×2
cell-array ×2
matlab ×2
python ×2
tensorflow ×2
asp.net-mvc ×1
c++11 ×1
cmake ×1
function ×1
keras ×1
makefile ×1
python-2.7 ×1
string ×1
theano ×1
ubuntu ×1
visual-c++ ×1