我对那些在编程中有关于无状态和有状态设计的具体信息的文章很感兴趣.我很感兴趣,因为我想了解更多,但我真的找不到任何关于它的好文章.我已经阅读了几十篇关于网络的文章,这些文章模糊地讨论了这个主题,或者他们谈论的是网络服务器和会话 - 这也是'有状态与无国籍的关系,但我对无状态与编码属性的有状态设计感兴趣.示例:我听说BL-classes在设计上是无状态的,实体类(或者至少我称之为Person(id,name,..))是有状态的等等.
我认为重要的是要知道,因为我相信如果我能理解它,我可以编写更好的代码(例如粒度).
无论如何,真的很短,这就是我所知道的'有状态对无国籍:
有状态(如WinForms):存储数据以供进一步使用,但限制了应用程序的可伸缩性,因为它受CPU或内存限制的限制
无状态(与ASP.NET一样 - 尽管ASP尝试使用ViewStates保持状态):操作完成后,数据将被传输,实例将被传回线程池(Amorphous).
正如您所看到的,它是非常模糊和有限的信息(并且非常关注服务器交互),所以如果您能为我提供更多美味的信息,我将非常感激:)
我试图了解React的有状态和无状态组件之间的确切区别.好吧,无状态组件只是做某事,但没有记住任何事情,而有状态组件可能会做同样的事情,但他们会记住内部的东西this.state.这就是理论.
但现在,检查如何使用代码显示这一点,我有点麻烦有所作为.我是对的,有以下两个例子吗?唯一的区别是getInitialState函数的定义.
无状态组件的示例:
var React = require('react');
var Header = React.createClass({
render: function() {
return(
<img src={'mypicture.png'} />
);
}
});
module.exports = Header;
Run Code Online (Sandbox Code Playgroud)
有状态组件的示例:
var React = require('react');
var Header = React.createClass({
getInitialState: function() {
return {
someVariable: "I remember something"
};
},
render: function() {
return(
<img src={'mypicture.png'} />
);
}
});
module.exports = Header;
Run Code Online (Sandbox Code Playgroud) 给定训练有素的LSTM模型,我想对单个时间步进行推理,即seq_length = 1在下面的示例中.在每个时间步之后,需要记住内部LSTM(内存和隐藏)状态以用于下一个"批处理".在推理的最开始,init_c, init_h给定输入计算内部LSTM状态.然后将它们存储在LSTMStateTuple传递给LSTM 的对象中.在训练期间,每个时间步都更新此状态.然而,对于推理,我希望state在批次之间保存,即初始状态只需要在开始时计算,然后在每个"批次"(n = 1)之后保存LSTM状态.
我发现这个相关的StackOverflow问题:Tensorflow,在RNN中保存状态的最佳方法?.但是,这仅在以下情况下有效state_is_tuple=False,但TensorFlow很快就会弃用此行为(请参阅rnn_cell.py).Keras似乎有一个很好的包装器可以使有状态的 LSTM成为可能,但我不知道在TensorFlow中实现这一目标的最佳方法.TensorFlow GitHub上的这个问题也与我的问题有关:https://github.com/tensorflow/tensorflow/issues/2838
有关构建有状态LSTM模型的任何好建议吗?
inputs = tf.placeholder(tf.float32, shape=[None, seq_length, 84, 84], name="inputs")
targets = tf.placeholder(tf.float32, shape=[None, seq_length], name="targets")
num_lstm_layers = 2
with tf.variable_scope("LSTM") as scope:
lstm_cell = tf.nn.rnn_cell.LSTMCell(512, initializer=initializer, state_is_tuple=True)
self.lstm = tf.nn.rnn_cell.MultiRNNCell([lstm_cell] * num_lstm_layers, state_is_tuple=True)
init_c = # compute initial LSTM memory state using contents in placeholder 'inputs'
init_h = # compute initial LSTM …Run Code Online (Sandbox Code Playgroud) 您在实际项目中看到什么样的服务器?
1)Web服务必须是无状态的:基本上你必须为每个请求发送用户名/密码,每个请求必须使用HTTPS,我将在每次需要时验证并加载User对象.
2)Web服务会话:就像在Web容器中一样,因此我至少可以保存经过身份验证的User对象并具有类似于会话ID的内容,因此我不需要在每个请求上对User进行身份验证,加载和检查.
3)粘性服务(跨请求的持久服务):https://jax-ws.dev.java.net/nonav/2.1/docs/statefulWebservice.html
我理解有状态服务(以及Web应用程序会话)的可伸缩性问题,但有时您必须具有某种状态,例如购物车.但是你也可以将这个状态放在数据库中(使用后端作为一种会话argh)或将整个状态传递给客户端(客户端负责重新发送整个购物车).
事实是,至少对于Web应用程序,会话在许多情况下都有很大帮助.如果您的系统接受"如果他的Web服务器发生故障,用户必须重新开始做任何事情",或者您可以尝试使用会话群集(如果这是不可接受的),则可以忽略可伸缩性问题.
它是如何用于Web服务的?我倾向于得出结论,Web服务与Web应用程序非常不同,并且接受选项1)(总是无状态),但是根据实际项目经验听取其他意见会很好.
这是我的第一个问题,我希望我做得对.
我需要处理一个Java EE项目,因此,在开始之前,我正在尝试做一些简单的事情,看看我能做到这一点.
我被Stateful Session Beans困住了.
这是一个问题:如何使用SFSB跟踪用户的会话?我看到的所有情况,"把"的最终SFSB到HttpSession的属性.但我不明白为什么!我的意思是,如果bean是STATEFUL,为什么我必须使用HttpSession来保存它?
EJB容器的任务不是将正确的SFSB返回给客户端吗?
我试过一个简单的计数器豆.在不使用会话的情况下,两个不同的浏览器具有相同的计数器bean(单击"增量"会更改它们的值).使用会话,我有两个不同的值,每个值对应每个浏览器(点击Firefox上的"增量",只添加一个到Firefox的bean).
但我的老师告诉SFSB保持"与客户的会话状态",那么为什么它不能在不使用HttpSession的情况下工作呢?
如果我理解正确的,不使用HttpSession中有SFSB同样用做它的SLSB呢?
我希望我的问题很明确,而且我的英语不是那么差!
编辑:我正在使用登录系统.一切顺利,完成登录后,我会看到一个显示用户数据的个人资料页面.但重新加载页面会使我的数据消失!我尝试在记录时添加HttpSession,但这样做会使数据在注销后保持不变!
我想使用Akka Streams读取多个大文件来处理每一行.想象一下,每个键都包含一个(identifier -> value).如果找到新的标识符,我想将它及其值保存在数据库中; 否则,如果在处理行流时已找到标识符,我只想保存该值.对于这一点,我认为我需要某种形式的递归状态流量,以保持这种已经在发现标识符Map.我想我会在这个流程中收到一对(newLine, contextWithIdentifiers).
我刚刚开始研究Akka Streams.我想我可以管理自己做无状态处理的东西,但我不知道如何保持contextWithIdentifiers.我很欣赏指向正确方向的任何指示.
我从未使用过有状态的EJB.我知道有状态EJB对java客户端很有用.
但我想知道:在哪种情况下在Web应用程序中使用它们?如何?我们应该把这些有状态的bean放在Session中吗(因为无状态的http)?
这是一个好习惯吗?(没有过多讨论有状态与无状态)
我正在阅读有关RNN/LSTM的本教程,我很难理解有状态的LSTM.我的问题如下:
在关于RNN的Keras文档中,我发现i批次中位于样本中的样本的隐藏状态将作为输入隐藏状态提供i给下一批中的样本.这是否意味着如果我们想要将隐藏状态从样本传递到样本,我们必须使用大小为1的批次,因此执行在线梯度下降?有没有办法在批量> 1的批次中传递隐藏状态并在该批次上执行梯度下降?
在教程的段落中,"一个字符到一个字符映射的状态LSTM"被给出了一个代码,该代码使用batch_size = 1并stateful = True学习在给定字母表字母的情况下预测字母表的下一个字母.在代码的最后部分(第53行到完整代码的结尾),模型以随机字母('K')开始测试并预测'B'然后给出'B'它预测'C'等等除了'K'之外,它似乎运作良好.但是,我尝试了下面的代码调整(最后一部分,我保持52行及以上):
# demonstrate a random starting point
letter1 = "M"
seed1 = [char_to_int[letter1]]
x = numpy.reshape(seed, (1, len(seed), 1))
x = x / float(len(alphabet))
prediction = model.predict(x, verbose=0)
index = numpy.argmax(prediction)
print(int_to_char[seed1[0]], "->", int_to_char[index])
letter2 = "E"
seed2 = [char_to_int[letter2]]
seed = seed2
print("New start: ", letter1, letter2)
for i in range(0, 5):
x = numpy.reshape(seed, …Run Code Online (Sandbox Code Playgroud) 是否可以即时声明一个新类型(一个空的struct或没有实现的struct)?
例如
constexpr auto make_new_type() -> ???;
using A = decltype(make_new_type());
using B = decltype(make_new_type());
using C = decltype(make_new_type());
static_assert(!std::is_same<A, B>::value, "");
static_assert(!std::is_same<B, C>::value, "");
static_assert(!std::is_same<A, C>::value, "");
Run Code Online (Sandbox Code Playgroud)
一个“手动”解决方案是
template <class> struct Tag;
using A = Tag<struct TagA>;
using B = Tag<struct TagB>;
using C = Tag<struct TagC>;
Run Code Online (Sandbox Code Playgroud)
甚至
struct A;
struct B;
struct C;
Run Code Online (Sandbox Code Playgroud)
但是对于模板/ meta,一些魔术make_new_type()功能会很好。
有状态的元编程格式不正确,这样的事情是否可能呢?
c++ templates metaprogramming stateful compile-time-constant
我已经在7批样品的多批次上训练了一个LSTM模型(用Keras和TF构建),每个样品有3个特征,下面的样本形状类似(下面的数字只是占位符以便解释),每个批次标记为0或1:
数据:
[
[[1,2,3],[1,2,3],[1,2,3],[1,2,3],[1,2,3],[1,2,3],[1,2,3]]
[[1,2,3],[1,2,3],[1,2,3],[1,2,3],[1,2,3],[1,2,3],[1,2,3]]
[[1,2,3],[1,2,3],[1,2,3],[1,2,3],[1,2,3],[1,2,3],[1,2,3]]
...
]
Run Code Online (Sandbox Code Playgroud)
即:m个序列的批次,每个长度为7,其元素是三维向量(因此批次具有形状(m*7*3))
目标:
[
[1]
[0]
[1]
...
]
Run Code Online (Sandbox Code Playgroud)
在我的生产环境中,数据是具有3个特征([1,2,3],[1,2,3]...)的样本流.我希望在每个样本到达我的模型时流式传输并获得中间概率而不等待整个批次(7) - 请参阅下面的动画.
我的一个想法是用缺少的样本填充批处理0,
[[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[1,2,3]]但这似乎是低效的.
我将非常感谢任何帮助,这些帮助将指引我以持久的方式保存LSTM中间状态,同时等待下一个样本并预测使用部分数据训练特定批量大小的模型.
更新,包括型号代码:
opt = optimizers.Adam(lr=0.001, beta_1=0.9, beta_2=0.999, epsilon=10e-8, decay=0.001)
model = Sequential()
num_features = data.shape[2]
num_samples = data.shape[1]
first_lstm = LSTM(32, batch_input_shape=(None, num_samples, num_features), return_sequences=True, activation='tanh')
model.add(
first_lstm)
model.add(LeakyReLU())
model.add(Dropout(0.2))
model.add(LSTM(16, return_sequences=True, activation='tanh'))
model.add(Dropout(0.2))
model.add(LeakyReLU())
model.add(Flatten())
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer=opt,
metrics=['accuracy', keras_metrics.precision(), keras_metrics.recall(), f1])
Run Code Online (Sandbox Code Playgroud)
型号摘要:
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
lstm_1 (LSTM) …Run Code Online (Sandbox Code Playgroud) stateful ×10
lstm ×3
keras ×2
python ×2
session ×2
stateless ×2
tensorflow ×2
akka ×1
akka-stream ×1
c++ ×1
components ×1
ejb ×1
ejb-3.0 ×1
httpsession ×1
java-ee ×1
javabeans ×1
reactjs ×1
scala ×1
stream ×1
templates ×1
terminology ×1
web-services ×1