在我看来,GOF中描述的Observer设计模式与Listeners在各种工具包中找到的实际上是相同的.概念之间是否存在差异,或者听众和观察者是否真的相同.
(我不是在寻找任何特定的计算机语言实现,我只是想从设计的角度来理解差异(如果有的话).是的,我知道有关SOF的类似问题有几个答案,但它们已根深蒂固关于特定语言的具体问题 - 我正在寻找设计答案,而不是语言答案.)
我正在玩tensorflow并遇到以下代码的问题:
def _init_parameters(self, input_data, labels):
# the input shape is (batch_size, input_size)
input_size = tf.shape(input_data)[1]
# labels in one-hot format have shape (batch_size, num_classes)
num_classes = tf.shape(labels)[1]
stddev = 1.0 / tf.cast(input_size, tf.float32)
w_shape = tf.pack([input_size, num_classes], 'w-shape')
normal_dist = tf.truncated_normal(w_shape, stddev=stddev, name='normaldist')
self.w = tf.Variable(normal_dist, name='weights')
Run Code Online (Sandbox Code Playgroud)
(我正在tf.pack按照这个问题的建议使用,因为我得到了同样的错误)
当我运行它(从一个更大的脚本调用这个),我得到这个错误:
ValueError: initial_value must have a shape specified: Tensor("normaldist:0", shape=TensorShape([Dimension(None), Dimension(None)]), dtype=float32)
Run Code Online (Sandbox Code Playgroud)
我试图在交互式shell中复制该过程.实际上,normal_dist虽然提供的值确实存在,但未指定维度:
In [70]: input_size.eval()
Out[70]: 4
In [71]: num_classes.eval()
Out[71]: 3
In [72]: w_shape.eval() …Run Code Online (Sandbox Code Playgroud) Python文档说明:
异常通常应直接或间接地从Exception类派生.
这个词'typically'让我处于模棱两可的状态.
考虑代码:
class good(Exception): pass
class bad(object): pass
Heaven = good()
Hell = bad()
>>> raise Heaven
Traceback (most recent call last):
File "<pyshell#163>", line 1, in <module>
raise Heaven
good
>>> raise Hell
Traceback (most recent call last):
File "<pyshell#171>", line 1, in <module>
raise Hell
TypeError: exceptions must be classes or instances, not bad
Run Code Online (Sandbox Code Playgroud)
所以阅读python文档的时候,我应该代替'typically'用''?
如果我有一个与Exception类无关的类层次结构,并且我想"提升"属于该层次结构的对象,该怎么办?
我总是可以用一个参数引发异常:
raise Exception, Hell
Run Code Online (Sandbox Code Playgroud)
这对我来说似乎有些尴尬
Exception(EDIT:或BaseException)类有什么特别之处,只有它的家庭成员可以被提升?
我想在脚本中定义不同的子分析器,同时继承来自公共父级的选项,但具有不同的默认值.但它没有按预期工作.
这是我做的:
import argparse
# this is the top level parser
parser = argparse.ArgumentParser(description='bla bla')
# this serves as a parent parser
base_parser = argparse.ArgumentParser(add_help=False)
base_parser.add_argument('-n', help='number', type=int)
# subparsers
subparsers = parser.add_subparsers()
subparser1= subparsers.add_parser('a', help='subparser 1',
parents=[base_parser])
subparser1.set_defaults(n=50)
subparser2 = subparsers.add_parser('b', help='subparser 2',
parents=[base_parser])
subparser2.set_defaults(n=20)
args = parser.parse_args()
print args
Run Code Online (Sandbox Code Playgroud)
当我从命令行运行脚本时,这就是我得到的:
$ python subparse.py b
Namespace(n=20)
$ python subparse.py a
Namespace(n=20)
Run Code Online (Sandbox Code Playgroud)
显然,第二个会set_defaults覆盖父母中的第一个.由于argparse文档中没有任何关于它的内容(非常详细),我认为这可能是一个错误.
有一些简单的解决方案吗?之后我可以检查args变量并将None值替换为每个subparser的预期默认值,但这正是我期望argparse为我做的.
顺便说一下,这是Python 2.7.
我知道如何在使用张量板训练后可视化张量流图.现在,是否可以只显示图形的前向部分,即没有定义训练操作符?
我问这个的原因是我收到了这个错误:
No gradients provided for any variable, check your graph for ops that do not support gradients, between variables [ ... list of model variables here ... ] and loss Tensor("Mean:0", dtype=float32).
Run Code Online (Sandbox Code Playgroud)
我想检查图表以找出梯度张量流(双关语意图)被打破的位置.
python visualization machine-learning tensorflow tensorboard
有没有办法通过NLTK从同义词集中捕获WordNet选择限制(例如+ animate,+ human等)?或者有没有其他方式提供有关synset的语义信息?我能得到的最接近的是上位词关系.
我正在尝试编写一个简单的文本挖掘应用程序来尝试分辨德语单词的性别和复数形式。
所以,首先,我需要一个大的单词表来进行训练。我四处搜寻,但找不到任何具有性别或复数的列表。
对于返回另一个函数的函数,Python 命名约定是什么(如果有)?
我有一个使用我编写的cython模块的python脚本.我想发布它,为了节省用户编译cython东西的麻烦(特别是在Windows上很复杂),我想提供预编译的扩展.
但是,我需要32位的一个版本和64的另一个版本.我想将这两个文件包含为mymodule32.pyd和mymodule64.pyd,然后mymodule.py执行以下操作:
if bits == 32:
from mymodule32 import *
elif bits == 64:
from mymodule64 import *
Run Code Online (Sandbox Code Playgroud)
但这感觉很笨拙.如果用户决定自己编译模块生成mymodule.pyd怎么办?
我正在玩Python中的元类,发现了一些非常好奇的东西.我可以创建两个具有相同名称的类,但实际上它们是不同的对象.看到:
>>> def create_class(**data):
... return type('MyClass', (object,), data)
...
>>> A = create_class(x=1, y=2)
>>> B = create_class(x=1, y=2)
>>> A
<class '__main__.MyClass'>
>>> B
<class '__main__.MyClass'>
>>> A == B
False
>>> a = A()
>>> b = B()
>>> type(a)
<class '__main__.MyClass'>
>>> type(b)
<class '__main__.MyClass'>
>>> type(a) == type(b)
False
Run Code Online (Sandbox Code Playgroud)
我认为名称空间中的名称应该是唯一的.那不是吗?
我在不同长度的批次序列上训练LSTM细胞.它tf.nn.rnn有一个非常方便的参数sequence_length,但在调用它之后,我不知道如何选择与批处理中每个项目的最后一个步骤相对应的输出行.
我的代码基本如下:
lstm_cell = tf.nn.rnn_cell.LSTMCell(num_lstm_units, input_size)
lstm_outputs, state = tf.nn.rnn(lstm_cell, input_list, dtype=tf.float32, sequence_length=sequence_lengths)
Run Code Online (Sandbox Code Playgroud)
lstm_outputs是每个时间步都有LSTM输出的列表.但是,我的批处理中的每个项目都有不同的长度,因此我想创建一个包含最后一个LSTM输出的张量,该输出对我的批次中的每个项目都有效.
如果我可以使用numpy索引,我会做这样的事情:
all_outputs = tf.pack(lstm_outputs)
last_outputs = all_outputs[sequence_lengths, tf.range(batch_size), :]
Run Code Online (Sandbox Code Playgroud)
但事实证明,开始tensorflow不支持它(我知道功能请求).
那么,我怎么能得到这些价值呢?
我正在尝试编写一个__iter__应该递归遍历目录的函数(包括子目录),并且由于它的结构是任意的,我认为递归函数是可行的.但它没有用.
这就是我所拥有的:
class Dummy(object):
def __init__(self, directory):
self.directory = directory
def _iterate_on_dir(self, path):
'''
Internal helper recursive function.
'''
for filename in os.listdir(path):
full_path = os.path.join(path, filename)
if os.path.isdir(full_path):
self._iterate_on_dir(full_path)
else:
yield full_path
def __iter__(self):
'''
Yield filenames
'''
return self._iterate_on_dir(self.directory)
Run Code Online (Sandbox Code Playgroud)
一些print陈述告诉我,递归调用只是被忽略了.
我怎么能做到这一点?
当在tensorflow中使用创建变量时validate_shape=False,它也会忽略变量等级:
x = tf.placeholder(tf.float32, [None, 10])
v = tf.Variable(tf.ones_like(x), trainable=False, validate_shape=False)
tf.layers.dense(v, 10)
ValueError: Input 0 of layer dense_5 is incompatible with the layer: its rank is undefined, but the layer requires a defined rank.
Run Code Online (Sandbox Code Playgroud)
在这种情况下,尽管确切的变量形状必须是动态的,但我知道其排名将是多少。有什么方法可以将其告知张量流,以便我可以使用需要知道输入等级的操作吗?
python ×11
tensorflow ×4
nlp ×2
argparse ×1
coding-style ×1
corpus ×1
cython ×1
exception ×1
generator ×1
iterator ×1
linguistics ×1
listener ×1
lstm ×1
nltk ×1
recursion ×1
tensorboard ×1
wordnet ×1