Гледам това от часове и не мога да разбера защо след второто ми въвеждане моят низ, съхранен от първото въвеждане, се променя.
Когато стартирам проба, стартирайте така:
Моля, въведете id: 12
Моля, въведете името: jay
Когато стартирам тази част от кода само за стандартно въвеждане и извеждане, gdb показва, че id1Buf има стойност "12\n" след първото четене. След това се подканва да въведете име, така че когато въведа jay id1Buf стойността се променя на "12\njay" по някаква причина. Не мога да разбера, би било чудесно, ако някой може да помогне.
SECTION .text ;.text section
global _start ;start section
_start: ;start
main:
;;write out
mov eax, SYSCALL_WRITE ;write function
mov ebx, STDOUT ;write value
mov ecx, id ;address of message
mov edx, lenid ;length of message
int 80h ;interrupt
;;read user input
mov eax, SYSCALL_READ ;read function
mov ebx, STDIN ;read in value
mov ecx, id1Buf ;store read value in id1Buf
mov edx, IDBUFLEN ;length of idbuf
int 80h ;interrupt
;;write out
mov eax, SYSCALL_WRITE ;write function
mov ebx, STDOUT ;write value
mov ecx, name ;address of message
mov edx, lenname ;length of message
int 80h ;interrupt
;;read user input
mov eax, SYSCALL_READ ;read function
mov ebx, STDIN ;read in value
mov ecx, name1Buf ;store read value in name1Buf
mov edx, NAMEBUFLEN ;length of namebuf
int 80h ;interrupt
mov [name1readlen], eax ;store length of name
Това е част от другия код за справка.
;;constants
%define STDIN 0 ;read function
%define STDOUT 1 ;write function
%define STDERR 2 ;error function
%define SYSCALL_EXIT 1 ;exit
%define SYSCALL_READ 3 ;read
%define SYSCALL_WRITE 4 ;write
%define IDBUFLEN 3 ;length of id buffer
%define NAMEBUFLEN 500 ;length of name buffer
;;given data
SECTION .data
id db "Please enter the id: " ;prompt for id
lenid equ $-id ;length of id prompt
name db "Please enter the name: " ;prompt for name
lenname equ $-name ;length of name
idlabel db "ID: " ;used for printing end data
lenidlabel equ $-idlabel ;length of id label
namelabel db "NAME: " ;used for printing end data
lennamelabel equ $-namelabel ;length of name label
printline db "", 10 ;new line character
;;unintialized data
SECTION .bss
id1Buf: resb IDBUFLEN ;buffer for id 1
name1Buf: resb NAMEBUFLEN ;buffer for name 1
equ
вместо%define
за тази константа и ми кажете какво се случва. - person alvonellos   schedule 26.03.2014IDBUFLEN equ 2
- person Captain Gh0st   schedule 26.03.2014TL;DR: Трябва да опитате да преработите този клас, така че
self.create_network()
да се извиква (i) само веднъж и (ii) предиtf.train.Saver()
да бъде конструиран.Тук има два фини проблема, които се дължат на структурата на кода и поведението по подразбиране на
tf.train.Saver
конструктор. Когато конструирате спасител без аргументи (както във вашия код), той събира текущия набор от променливи във вашата програма и добавя операции към графиката за запазването и възстановяването им. Във вашия код, когато извикатеtflasso()
, той ще създаде предпазител и няма да има променливи (тъй катоcreate_network()
още не е извикан). В резултат на това контролно-пропускателният пункт трябва да е празен.Вторият проблем е, че по подразбиране форматът на запазена контролна точка е карта от
name
свойство на променлива към текущата й стойност. Ако създадете две променливи с едно и също име, те ще бъдат автоматично "уникални" от TensorFlow:Последствието от това е, че когато извикате
self.create_network()
във второто извикване наtfl.fit()
, всички променливи ще имат различни имена от имената, които се съхраняват в контролната точка, щяха да бъдат, ако спасителят беше конструиран след мрежата. (Можете да избегнете това поведение, като подадете речник name-Variable
към конструктора на saver, но това обикновено е доста неудобно.)Има две основни решения:
При всяко извикване на
tflasso.fit()
, създайте целия модел наново, като дефинирате новtf.Graph
, след което в тази графика изградете мрежата и създайтеtf.train.Saver
.ПРЕПОРЪЧИТЕЛНО Създайте мрежата, след това
tf.train.Saver
в конструктораtflasso
и използвайте отново тази графика при всяко извикване наtflasso.fit()
. Имайте предвид, че може да се наложи да свършите още малко работа, за да реорганизирате нещата (по-специално, не съм сигурен какво правите сself.X
иself.xlen
), но трябва да е възможно да постигнете това с заместители и захранване.id1Buf: resb IDBUFLEN
id2Buf: resb IDBUFLEN
кой е най-добрият начин за съхраняване на всички тези потребителски данни за лесно редактиране/манипулиране по-късно? - person Captain Gh0st   schedule 26.03.2014