通过调试信息,我的意思是TensorFlow在我的终端中显示有关加载的库和找到的设备等,而不是python错误.
I tensorflow/stream_executor/dso_loader.cc:105] successfully opened CUDA library libcublas.so locally
I tensorflow/stream_executor/dso_loader.cc:105] successfully opened CUDA library libcudnn.so locally
I tensorflow/stream_executor/dso_loader.cc:105] successfully opened CUDA library libcufft.so locally
I tensorflow/stream_executor/dso_loader.cc:105] successfully opened CUDA library libcuda.so.1 locally
I tensorflow/stream_executor/dso_loader.cc:105] successfully opened CUDA library libcurand.so locally
I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:900] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
I tensorflow/core/common_runtime/gpu/gpu_init.cc:102] Found device 0 with properties:
name: Graphics Device
major: 5 minor: …Run Code Online (Sandbox Code Playgroud) 我有计划使用分布式TensorFlow,我看到TensorFlow可以使用GPU进行培训和测试.在群集环境中,每台计算机可能有0个或1个或更多GPU,我想在尽可能多的计算机上运行我的TensorFlow图形到GPU.
我发现在运行tf.Session()TensorFlow时会在日志消息中提供有关GPU的信息,如下所示:
I tensorflow/core/common_runtime/gpu/gpu_init.cc:126] DMA: 0
I tensorflow/core/common_runtime/gpu/gpu_init.cc:136] 0: Y
I tensorflow/core/common_runtime/gpu/gpu_device.cc:838] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GTX 1080, pci bus id: 0000:01:00.0)
Run Code Online (Sandbox Code Playgroud)
我的问题是如何从TensorFlow获取有关当前可用GPU的信息?我可以从日志中获取加载的GPU信息,但我希望以更复杂的程序化方式完成.我也可以故意使用CUDA_VISIBLE_DEVICES环境变量限制GPU,所以我不想知道从OS内核获取GPU信息的方法.
简而言之,如果机器中有两个可用的GPU ,我希望这样的函数tf.get_available_gpus()将返回['/gpu:0', '/gpu:1'].我该如何实现呢?
我在tf.nn.conv2d 这里看一下tensorflow的文档.但我无法理解它的作用或它想要实现的目标.它在文档上说,
#1:将滤镜展平为具有形状的二维矩阵
[filter_height * filter_width * in_channels, output_channels].
那现在做什么?是元素乘法还是纯矩阵乘法?我也无法理解文档中提到的其他两点.我在下面写了:
#2:从输入张量中提取图像块以形成虚拟的形状张量
[batch, out_height, out_width, filter_height * filter_width * in_channels].#3:对于每个补丁,右对乘滤波器矩阵和图像补丁矢量.
如果有人能给出一个例子,一段代码(非常有用)可能并解释那里发生了什么以及为什么操作是这样的,这将是非常有用的.
我尝试过编写一小部分并打印出操作的形状.不过,我无法理解.
我试过这样的事情:
op = tf.shape(tf.nn.conv2d(tf.random_normal([1,10,10,10]),
tf.random_normal([2,10,10,10]),
strides=[1, 2, 2, 1], padding='SAME'))
with tf.Session() as sess:
result = sess.run(op)
print(result)
Run Code Online (Sandbox Code Playgroud)
我理解卷积神经网络的点点滴滴.我在这里研究过它们.但是,张量流的实现并不是我的预期.所以它提出了这个问题.
编辑:所以,我实现了一个更简单的代码.但我无法弄清楚发生了什么.我的意思是结果是这样的.如果有人能告诉我什么过程产生这个输出,那将是非常有帮助的.
input = tf.Variable(tf.random_normal([1,2,2,1]))
filter = tf.Variable(tf.random_normal([1,1,1,1]))
op = tf.nn.conv2d(input, filter, strides=[1, 1, 1, 1], padding='SAME')
init = tf.initialize_all_variables()
with tf.Session() as sess:
sess.run(init)
print("input")
print(input.eval())
print("filter")
print(filter.eval())
print("result")
result = sess.run(op) …Run Code Online (Sandbox Code Playgroud) 据我所知,Variable是制作变量的默认操作,get_variable主要用于权重分享.
一方面,有些人建议在需要变量时使用get_variable而不是原始Variable操作.另一方面,我只是get_variable在TensorFlow的官方文档和演示中看到任何使用.
因此,我想知道如何正确使用这两种机制的一些经验法则.有没有"标准"原则?
我已经使用CNN训练了二进制分类模型,这是我的代码
model = Sequential()
model.add(Convolution2D(nb_filters, kernel_size[0], kernel_size[1],
border_mode='valid',
input_shape=input_shape))
model.add(Activation('relu'))
model.add(Convolution2D(nb_filters, kernel_size[0], kernel_size[1]))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=pool_size))
# (16, 16, 32)
model.add(Convolution2D(nb_filters*2, kernel_size[0], kernel_size[1]))
model.add(Activation('relu'))
model.add(Convolution2D(nb_filters*2, kernel_size[0], kernel_size[1]))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=pool_size))
# (8, 8, 64) = (2048)
model.add(Flatten())
model.add(Dense(1024))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(2)) # define a binary classification problem
model.add(Activation('softmax'))
model.compile(loss='categorical_crossentropy',
optimizer='adadelta',
metrics=['accuracy'])
model.fit(x_train, y_train,
batch_size=batch_size,
nb_epoch=nb_epoch,
verbose=1,
validation_data=(x_test, y_test))
Run Code Online (Sandbox Code Playgroud)
在这里,我想像TensorFlow一样获得每一层的输出,我该怎么做?
我安装了最新版本的Python (3.6.4 64-bit)和最新版本的PyCharm (2017.3.3 64-bit).然后我在PyCharm(Numpy,Pandas,...)中安装了一些模块,但是当我尝试安装Tensorflow时它没有安装,我收到了错误消息:
找不到满足要求tensorflow的版本(来自版本:)没有找到tensorflow的匹配分布
然后我尝试从命令提示符安装tensorflow,我得到了相同的错误消息.然而,我确实安装了tflearn.
我还安装了Python 2.7,但我又得到了相同的错误消息.我搜索了这个错误并尝试了一些建议给其他人的东西,但没有任何效果(包括安装Flask).
如何安装Tensorflow?谢谢.
我刚刚通过安装了最新版本的 Tensorflow pip install tensorflow,每当我运行程序时,我都会收到日志消息:
W tensorflow/stream_executor/platform/default/dso_loader.cc:55] 无法加载动态库“cudart64_101.dll”;dlerror: 找不到 cudart64_101.dll
这很糟糕吗?如何修复错误?
我想了解的进步在tf.nn.avg_pool,tf.nn.max_pool,tf.nn.conv2d说法.
该文件反复说
strides:长度> = 4的整数列表.输入张量的每个维度的滑动窗口的步幅.
我的问题是:
tf.reshape(_X,shape=[-1, 28, 28, 1]).为什么-1?遗憾的是,使用-1重新整形的文档中的示例并不能很好地转换为这种情况.
python convolution neural-network conv-neural-network tensorflow
我正在阅读Tensorflow中的一些示例代码,我发现以下代码
flags = tf.app.flags
FLAGS = flags.FLAGS
flags.DEFINE_float('learning_rate', 0.01, 'Initial learning rate.')
flags.DEFINE_integer('max_steps', 2000, 'Number of steps to run trainer.')
flags.DEFINE_integer('hidden1', 128, 'Number of units in hidden layer 1.')
flags.DEFINE_integer('hidden2', 32, 'Number of units in hidden layer 2.')
flags.DEFINE_integer('batch_size', 100, 'Batch size. '
'Must divide evenly into the dataset sizes.')
flags.DEFINE_string('train_dir', 'data', 'Directory to put the training data.')
flags.DEFINE_boolean('fake_data', False, 'If true, uses fake data '
'for unit testing.')
Run Code Online (Sandbox Code Playgroud)
在 tensorflow/tensorflow/g3doc/tutorials/mnist/fully_connected_feed.py
但我找不到任何关于这种用法的文档tf.app.flags.
我发现这个标志的实现在
tensorflow/tensorflow/python/platform/default/_flags.py
显然,这tf.app.flags在某种程度上用于配置网络,那么为什么它不在API文档中呢?谁能解释一下这里发生了什么?
在大多数模型中,有一个步骤参数指示在数据上运行的步骤数.但是我在大多数实际用法中看到,我们也执行拟合函数N个时期.
运行1000步与1纪元和运行100步与10纪元有什么区别?哪一个在实践中更好?连续时期之间的任何逻辑变化?数据改组?