Это подтвердит, что тензорный поток с использованием GPU также тренируется?
Код
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
Выход
I tensorflow/core/common_runtime/gpu/gpu_device.cc:885] Found device 0 with properties:
name: GeForce GT 730
major: 3 minor: 5 memoryClockRate (GHz) 0.9015
pciBusID 0000:01:00.0
Total memory: 1.98GiB
Free memory: 1.72GiB
I tensorflow/core/common_runtime/gpu/gpu_device.cc:906] DMA: 0
I tensorflow/core/common_runtime/gpu/gpu_device.cc:916] 0: Y
I tensorflow/core/common_runtime/gpu/gpu_device.cc:975] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GT 730, pci bus id: 0000:01:00.0)
Device mapping:
/job:localhost/replica:0/task:0/gpu:0 -> device: 0, name: GeForce GT 730, pci bus id: 0000:01:00.0
I tensorflow/core/common_runtime/direct_session.cc:255] Device mapping:
/job:localhost/replica:0/task:0/gpu:0 -> device: 0, name: GeForce GT 730, pci bus id: 0000:01:00.0
Да.
var data = {
'PropertyA': 1,
'PropertyB': 2,
'PropertyC': 3
};
data["PropertyD"] = 4;
// dialog box with 4 in it
alert(data.PropertyD);
alert(data["PropertyD"]);
в дополнение ко всем предыдущим ответам, и в случае, если вам интересно, как мы будем писать динамические имена свойств в будущем, используя имена вычисляемых объектов (ECMAScript 6), вот как:
var person = "John Doe";
var personId = "person_" + new Date().getTime();
var personIndex = {
[ personId ]: person
// ^ computed property name
};
personIndex[ personId ]; // "John Doe"
Я знаю, что на вопрос ответили отлично, но я также нашел другой способ добавить новые свойства и хотел поделиться им с вами:
Вы можете использовать функцию Object.defineProperty()
Найдено в Mozilla Developer Network
Пример:
var o = {}; // Creates a new object
// Example of an object property added with defineProperty with a data property descriptor
Object.defineProperty(o, "a", {value : 37,
writable : true,
enumerable : true,
configurable : true});
// 'a' property exists in the o object and its value is 37
// Example of an object property added with defineProperty with an accessor property descriptor
var bValue;
Object.defineProperty(o, "b", {get : function(){ return bValue; },
set : function(newValue){ bValue = newValue; },
enumerable : true,
configurable : true});
o.b = 38;
// 'b' property exists in the o object and its value is 38
// The value of o.b is now always identical to bValue, unless o.b is redefined
// You cannot try to mix both :
Object.defineProperty(o, "conflict", { value: 0x9f91102,
get: function() { return 0xdeadbeef; } });
// throws a TypeError: value appears only in data descriptors, get appears only in accessor descriptors
defineProperties
(множественное число).
– rvighne
10 August 2014 в 02:08
Object.defineProperty
не предназначен для простого удобства, но тот, у которого есть мелкозернистый элемент управления. Если вам не нужен этот дополнительный контроль, это неправильный инструмент.
– kleinfreund
6 September 2017 в 09:00
Object.defineProperty(obj, prop, valueDescriptor)
для V8 намного медленнее и сложнее, чем просто делать obj[prop] = value
;
– Jack Giffin
3 April 2018 в 16:37
Да, возможно. Предполагая:
var data = {
'PropertyA': 1,
'PropertyB': 2,
'PropertyC': 3
};
var propertyName = "someProperty";
var propertyValue = "someValue";
Либо:
data[propertyName] = propertyValue;
, либо
eval("data." + propertyName + " = '" + propertyValue + "'");
. Первый метод является предпочтительным. eval () имеет очевидные проблемы с безопасностью, если вы используете значения, предоставленные пользователем, поэтому не используйте его, если вы можете его избежать, но стоит знать, что он существует и что он может сделать.
ссылайтесь на это с помощью:
alert(data.someProperty);
или
data(data["someProperty"]);
или
alert(data[propertyName]);
Я знаю, что есть несколько ответов на этот пост, но я не видел того, где есть несколько свойств, и они находятся внутри массива. И это решение, кстати, для ES6.
Для иллюстрации предположим, что у нас есть массив с именем person с объектами внутри:
let Person = [{id:1, Name: "John"}, {id:2, Name: "Susan"}, {id:3, Name: "Jet"}]
Итак, вы можете добавить свойство с помощью соответствующее значение. Предположим, мы хотим добавить язык со значением по умолчанию EN.
Person.map((obj)=>({...obj,['Language']:"EN"}))
Теперь массив Person будет выглядеть следующим образом:
Person = [{id:1, Name: "John", Language:"EN"},
{id:2, Name: "Susan", Language:"EN"}, {id:3, Name: "Jet", Language:"EN"}]
Person = Person.map(code here)
. Но дело в том, что вы легко можете добавить свойство к существующему объекту с помощью ES6
.
– Edper
11 November 2017 в 00:27
Вы можете добавить столько дополнительных свойств, сколько хотите, используя нотную нотацию:
var data = {
var1:'somevalue'
}
data.newAttribute = 'newvalue'
или:
data[newattribute] = somevalue
для динамических клавиш.
Хороший способ доступа к динамическим именам строк, содержащих объекты (например, object.subobject.property)
function ReadValue(varname)
{
var v=varname.split(".");
var o=window;
if(!v.length)
return undefined;
for(var i=0;i<v.length-1;i++)
o=o[v[i]];
return o[v[v.length-1]];
}
function AssignValue(varname,value)
{
var v=varname.split(".");
var o=window;
if(!v.length)
return;
for(var i=0;i<v.length-1;i++)
o=o[v[i]];
o[v[v.length-1]]=value;
}
Пример:
ReadValue("object.subobject.property");
WriteValue("object.subobject.property",5);
eval работает для чтения значение, но значение записи немного сложнее.
Более продвинутая версия (создайте подклассы, если они не существуют, и разрешает объекты вместо глобальных переменных)
function ReadValue(varname,o=window)
{
if(typeof(varname)==="undefined" || typeof(o)==="undefined" || o===null)
return undefined;
var v=varname.split(".");
if(!v.length)
return undefined;
for(var i=0;i<v.length-1;i++)
{
if(o[v[i]]===null || typeof(o[v[i]])==="undefined")
o[v[i]]={};
o=o[v[i]];
}
if(typeof(o[v[v.length-1]])==="undefined")
return undefined;
else
return o[v[v.length-1]];
}
function AssignValue(varname,value,o=window)
{
if(typeof(varname)==="undefined" || typeof(o)==="undefined" || o===null)
return;
var v=varname.split(".");
if(!v.length)
return;
for(var i=0;i<v.length-1;i++)
{
if(o[v[i]]===null || typeof(o[v[i]])==="undefined")
o[v[i]]={};
o=o[v[i]];
}
o[v[v.length-1]]=value;
}
Пример:
ReadValue("object.subobject.property",o);
WriteValue("object.subobject.property",5,o);
Это то же самое, что o.object.subobject.property
Вот как я решил проблему.
var obj = {
};
var field = "someouter.someinner.someValue";
var value = 123;
function _addField( obj, field, value )
{
// split the field into tokens
var tokens = field.split( '.' );
// if there's more than one token, this field is an object
if( tokens.length > 1 )
{
var subObj = tokens[0];
// define the object
if( obj[ subObj ] !== undefined ) obj[ subObj ] = {};
// call addfield again on the embedded object
var firstDot = field.indexOf( '.' );
_addField( obj[ subObj ], field.substr( firstDot + 1 ), value );
}
else
{
// no embedded objects, just field assignment
obj[ field ] = value;
}
}
_addField( obj, field, value );
_addField(obj, 'simpleString', 'string');
console.log( JSON.stringify( obj, null, 2 ) );
Создает следующий объект:
{
"someouter": {
"someinner": {
"someValue": 123
}
},
"simpleString": "string"
}
ES6 для win!
const b = 'b';
const c = 'c';
const data = {
a: true,
[b]: true, // dynamic property
[`interpolated-${c}`]: true, // dynamic property + interpolation
[`${b}-${c}`]: true
}
Если вы записете data
, вы получите следующее:
{
a: true,
b: true,
interpolated-c: true,
b-c: true
}
Это использует новый динамический синтаксис свойств + литералы шаблона .
obj[propname]
). Вместо этого я смог использовать это с синтаксисом распространения объекта.
– intcreator
13 February 2018 в 06:41
var a = {}; a["dynamic-" + prop] = true;
– Jack Giffin
3 April 2018 в 16:39
a
. (Специально при использовании таких пакетов, как redux)
– Mauricio Soares
10 August 2018 в 09:35
Здесь, используя ваши обозначения:
var data = {
'PropertyA': 1,
'PropertyB': 2,
'PropertyC': 3
};
var propName = 'Property' + someUserInput
//imagine someUserInput was 'Z', how can I now add a 'PropertyZ' property to
//my object?
data[propName] = 'Some New Property value'
Вы можете добавлять свойства динамически, используя некоторые из приведенных ниже параметров:
В вашем примере:
var data = {
'PropertyA': 1,
'PropertyB': 2,
'PropertyC': 3
};
Вы можете определить свойство с динамическим значением следующими двумя способами :
data.key = value;
или
data['key'] = value;
Еще больше. Если ваш ключ также динамический, вы можете определить с помощью класса Object с помощью:
Object.defineProperty(data, key, withValue(value));
, где data - ваш объект, клавиша - это переменная для хранения имени ключа, а значение - это переменная для сохранения значения.
Надеюсь, это поможет!
Просто добавление к вышеприведенному ответу. Вы можете определить функцию для инкапсуляции сложности defineProperty, как указано ниже.
var defineProp = function ( obj, key, value ){
var config = {
value: value,
writable: true,
enumerable: true,
configurable: true
};
Object.defineProperty( obj, key, config );
};
//Call the method to add properties to any object
defineProp( data, "PropertyA", 1 );
defineProp( data, "PropertyB", 2 );
defineProp( data, "PropertyC", 3 );
ссылка: http://addyosmani.com/resources/essentialjsdesignpatterns/book/#constructorpatternjavascript
Самый простой и самый портативный способ:
var varFieldName = "good";
var ob = {};
Object.defineProperty(ob, varFieldName , { value: "Fresh Value" });
Исходя из ответа #abeing!
Определенно. Подумайте об этом как о словаре или ассоциативном массиве. Вы можете добавить к ней в любой момент.
object["property"]
не совсем то же самое, чтоarray[4]
, первый не был создан как истинный массив. – Georg Schölly 5 March 2013 в 14:15data["PropertyD"]
кdata[function_to_get_property_name()]
кажется тривиальным. – Georg Schölly 24 February 2014 в 12:17