我想通过训练张量流模型获得可重复的结果。我抬头看怎么做。我使用的代码如下:
#include <iostream>
using namespace std;
struct Node{
int data;
struct Node *next;
};
class List{
private:
struct Node *head;
struct Node *tail;
public:
List(){
//initialise both head and tail to NULL
tail=NULL;
head=NULL;
}
void add(int d){
printf("I'm entering the add\n");
struct Node *n=new Node;
printf("Node created\n");
n->data=d;
printf("Data set %d\n", n->data);
n->next=NULL;
// I think you missed about the first time when you will add a node
if(head==NULL)//for adding first time , we will have to check as the first will be our last one
{
tail=n;
head=n;
}
else// for second time or more we give new node pointer address to our linked list last node next
{
tail->next=n;
tail=n; // then this n becomes our last node
}
printf("Node added\n");
}
};
int main(){
List l;
l.add(50);
l.add(70);
l.add(90);
return 0;
}
我训练了模型,结果是:
CriteriaBuilder cb = session.getCriteriaBuilder();
CriteriaQuery<MessageWrapper> q = cb.createQuery(MessageWrapper.class);
Root<Chain> c = q.from(Chain.class);
Join<Chain, Message> m = p.join("messages");
q.groupBy(c.get("id"));
q.select(cb.construct(MessageWrapper.class, c.get("id"), cb.max(m.get("id"))));
我重新启动了内核并清除了所有输出,然后再次进行了重新训练。结果是:
os.environ['PYTHONHASHSEED']='0'
np.random.seed(66)
rn.seed(66)
tf.set_random_seed(66)
tf.random.set_random_seed(66)
session_conf=tf.ConfigProto(intra_op_parallelism_threads=1, inter_op_parallelism_threads=1)
sess=tf.Session(graph=tf.get_default_graph(),config=session_conf)
差异很小,但是有人知道为什么它们不完全相同吗?
答案 0 :(得分:0)
经过一些研究,我发现缺乏可重复性的多种原因。我正在Keras中使用图像数据生成器,并具有目录流。来自目录的流具有一个参数seed =。这需要设置为种子编号,以控制图像的顺序和转换。接下来,我看了看模型。我正在使用MobileNet模型。该模型定义包括“辍学率”的规范。由于这是一个随机过程,因此需要播种。但是,在移动网络功能的定义中没有任何参数可以接收种子输入参数。
def MobileNet(input_shape=None,
alpha=1.0,
depth_multiplier=1,
dropout=1e-3,
include_top=True,
weights='imagenet',
input_tensor=None,
pooling=None,
classes=1000,
**kwargs):
"""Instantiates the MobileNet architecture.
要消除随机性,您可以将辍学率设置为= 0,但这可能会导致模型的过度训练。