张量流的可重复结果

时间:2018-12-24 02:34:43

标签: python tensorflow keras neural-network deep-learning

我想通过训练张量流模型获得可重复的结果。我抬头看怎么做。我使用的代码如下:

#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)

差异很小,但是有人知道为什么它们不完全相同吗?

1 个答案:

答案 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,但这可能会导致模型的过度训练。