小编Dav*_*vid的帖子

Keras:如何保存模型并继续培训?

我有一个模型,我已经训练了40个时代.我为每个时代保留了检查站,也保存了模型model.save().培训的代码是

n_units = 1000
model = Sequential()
model.add(LSTM(n_units, input_shape=(None, vec_size), return_sequences=True))
model.add(Dropout(0.2))
model.add(LSTM(n_units, return_sequences=True))
model.add(Dropout(0.2))
model.add(LSTM(n_units))
model.add(Dropout(0.2))
model.add(Dense(vec_size, activation='linear'))
model.compile(loss='mean_squared_error', optimizer='adam')
# define the checkpoint
filepath="word2vec-{epoch:02d}-{loss:.4f}.hdf5"
checkpoint = ModelCheckpoint(filepath, monitor='loss', verbose=1, save_best_only=True, mode='min')
callbacks_list = [checkpoint]
# fit the model
model.fit(x, y, epochs=40, batch_size=50, callbacks=callbacks_list)
Run Code Online (Sandbox Code Playgroud)

但是,当加载模型并再次训练时,它会重新开始,就像之前没有训练过一样.损失不是从上次培训开始的.

让我感到困惑的是,当我用重新定义的模型结构加载模型时load_weight,model.predict()效果很好.因此我相信模型权重被加载.

model = Sequential()
model.add(LSTM(n_units, input_shape=(None, vec_size), return_sequences=True))
model.add(Dropout(0.2))
model.add(LSTM(n_units, return_sequences=True))
model.add(Dropout(0.2))
model.add(LSTM(n_units))
model.add(Dropout(0.2))
model.add(Dense(vec_size, activation='linear'))
filename = "word2vec-39-0.0027.hdf5"
model.load_weights(filename)
model.compile(loss='mean_squared_error', optimizer='adam')
Run Code Online (Sandbox Code Playgroud)

但是,当我继续训练时

filepath="word2vec-{epoch:02d}-{loss:.4f}.hdf5"
checkpoint = ModelCheckpoint(filepath, monitor='loss', …
Run Code Online (Sandbox Code Playgroud)

python keras

25
推荐指数
4
解决办法
4万
查看次数

如何在没有固定batch_size的情况下设置Tensorflow dynamic_rnn,zero_state?

根据Tensorflow的官方网站(https://www.tensorflow.org/api_docs/python/tf/contrib/rnn/BasicLSTMCell#zero_state),zero_state必须指定batch_size.我发现的许多例子使用此代码:

    init_state = lstm_cell.zero_state(batch_size, dtype=tf.float32)

    outputs, final_state = tf.nn.dynamic_rnn(lstm_cell, X_in, 
        initial_state=init_state, time_major=False)
Run Code Online (Sandbox Code Playgroud)

对于培训步骤,可以修复批量大小.但是,在预测时,测试集的形状可能与训练集的批量大小不同.例如,我的一批训练数据具有形状[100,255,128].批量大小为100,包含255个步骤和128个输入.而测试集是[2000,255,128].我无法预测,因为在dynamic_rnn(initial_state)中,它已经设置了一个固定的batch_size = 100.如何修复此问题?

谢谢.

python tensorflow

7
推荐指数
1
解决办法
2606
查看次数

使用Rcpp安装R包是否需要Rtools(Windows)

我正在用Rcpp制作一个R包.它在我安装了Rtools的机器上工作正常.但最近,我尝试在不同的机器(Windows)上本地安装我的软件包并得到编译错误.原因是在那台机器上没有g ++编译器(对于Windows,g ++与Rtools一起提供).安装Rtools之后,它运行得很好.

所以问题是,如果我将它上传到CRAN,是否还需要用户手动安装Rtools?或者该功能install.package()是否为它们检测并安装Rtools?

另外,如果你们知道一些用Rcpp写的包,请告诉我.我想看看它是如何工作的.

r cran rcpp

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

如何使用 Rcpp 处理 R 和 C++ 中调用约定的不匹配?

我正在开发一个带有 C++ 函数的 R 包。我使用 Rcpp。编写和测试时一切正常。但是,当我完成并循环运行它时,我偶尔会收到以下警告和错误: 警告和错误

警告:“.Call”中的堆栈不平衡,78 然后是 77

警告:'{' 中的堆栈不平衡,75 然后是 74

警告:“.Call”中的堆栈不平衡,78 然后是 79

警告:'{' 中的堆栈不平衡,75 然后是 76

警告:“.Call”中的堆栈不平衡,78 然后是 77

警告:'{' 中的堆栈不平衡,75 然后是 74

所以我用谷歌搜索堆栈不平衡,我发现:

什么是堆栈不平衡?

本文指出堆栈不平衡通常是由语言之间调用约定的差异(不匹配)引起的。据我所知,callng约定是调用者函数删除局部变量还是被调用者函数删除的约定。

我发现了这个:

http://www.stats.uwo.ca/faculty/murdoch/software/compilingDLLs/

它说 R 正在使用cdecl而 C++ 使用stdcall.

“如果您的函数使用了stdcall而不是cdecl,则返回时可能会发生崩溃,因为您的参数将在它们已经消失后从堆栈中删除。”

如果我在声明中犯了任何错误,请告诉我。

这是我的 R 代码调用的 C++ 函数:

//[[Rcpp::export]]
int compute(SEXP p_in, Rcpp::NumericVector a) {
    Rcpp::XPtr<emcdf> p(p_in);
    p->cdf(a);
    return p->getResult();
}
//p_in is an external pointer(pointer to an emcdf object in C++)
Run Code Online (Sandbox Code Playgroud)

所以,我的问题是,我该如何解决这个问题?

我感谢您的帮助。

更多细节和代码 2.14.2017 …

c++ r calling-convention rcpp

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

标签 统计

python ×2

r ×2

rcpp ×2

c++ ×1

calling-convention ×1

cran ×1

keras ×1

tensorflow ×1